ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAppbmRleCBiNDFmM2U1Li5mMWM1YzRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dApAQCAtMSwxNSArMSwyOCBAQAogCi1FeHBvcnQgY3B1IHRvcG9sb2d5IGluZm8gdmlhIHN5c2ZzLiBJdGVtcyAoYXR0cmlidXRlcykgYXJlIHNpbWlsYXIKK0V4cG9ydCBDUFUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgogdG8gL3Byb2MvY3B1aW5mby4KIAogMSkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9waHlzaWNhbF9wYWNrYWdlX2lkOgotcmVwcmVzZW50IHRoZSBwaHlzaWNhbCBwYWNrYWdlIGlkIG9mICBjcHUgWDsKKworCXBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1WC4gVHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwKKwlzb2NrZXQgbnVtYmVyLCBidXQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtCisJZGVwZW5kZW50LgorCiAyKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L2NvcmVfaWQ6Ci1yZXByZXNlbnQgdGhlIGNwdSBjb3JlIGlkIHRvIGNwdSBYOworCisJdGhlIENQVSBjb3JlIElEIG9mIGNwdVguIFR5cGljYWxseSBpdCBpcyB0aGUgaGFyZHdhcmUgcGxhdGZvcm0ncworCWlkZW50aWZpZXIgKHJhdGhlciB0aGFuIHRoZSBrZXJuZWwncykuICBUaGUgYWN0dWFsIHZhbHVlIGlzCisJYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKIDMpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvdGhyZWFkX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgY29yZTsKKworCWludGVybmVsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJY29yZSBhcyBjcHVYCisKIDQpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9zaWJsaW5nczoKLXJlcHJlc2VudCB0aGUgdGhyZWFkIHNpYmxpbmdzIHRvIGNwdSBYIGluIHRoZSBzYW1lIHBoeXNpY2FsIHBhY2thZ2U7CisKKwlpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdVgncyBoYXJkd2FyZSB0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZQorCXBoeXNpY2FsX3BhY2thZ2VfaWQuCiAKIFRvIGltcGxlbWVudCBpdCBpbiBhbiBhcmNoaXRlY3R1cmUtbmV1dHJhbCB3YXksIGEgbmV3IHNvdXJjZSBmaWxlLAogZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMsIGlzIHRvIGV4cG9ydCB0aGUgNCBhdHRyaWJ1dGVzLgpAQCAtMzIsMzIgKzQ1LDMyIEBACiAzKSB0aHJlYWRfc2libGluZ3M6IGp1c3QgdGhlIGdpdmVuIENQVQogNCkgY29yZV9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiAKLUFkZGl0aW9uYWxseSwgY3B1IHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCitBZGRpdGlvbmFsbHksIENQVSB0b3BvbG9neSBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB1bmRlcgogL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUgYW5kIGluY2x1ZGVzIHRoZXNlIGZpbGVzLiAgVGhlIGludGVybmFsCiBzb3VyY2UgZm9yIHRoZSBvdXRwdXQgaXMgaW4gYnJhY2tldHMgKCJbXSIpLgogCi0gICAga2VybmVsX21heDogdGhlIG1heGltdW0gY3B1IGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICAgIGtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIENQVSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KIAkJW05SX0NQVVMtMV0KIAotICAgIG9mZmxpbmU6CWNwdXMgdGhhdCBhcmUgbm90IG9ubGluZSBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuCisgICAgb2ZmbGluZToJQ1BVcyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KIAkJSE9UUExVR0dFRCBvZmYgKHNlZSBjcHUtaG90cGx1Zy50eHQpIG9yIGV4Y2VlZCB0aGUgbGltaXQKLQkJb2YgY3B1cyBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiAoa2VybmVsX21heAorCQlvZiBDUFVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CiAJCWFib3ZlKS4gW35jcHVfb25saW5lX21hc2sgKyBjcHVzID49IE5SX0NQVVNdCiAKLSAgICBvbmxpbmU6CWNwdXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KKyAgICBvbmxpbmU6CUNQVXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KIAotICAgIHBvc3NpYmxlOgljcHVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQorICAgIHBvc3NpYmxlOglDUFVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQogCQlicm91Z2h0IG9ubGluZSBpZiB0aGV5IGFyZSBwcmVzZW50LiBbY3B1X3Bvc3NpYmxlX21hc2tdCiAKLSAgICBwcmVzZW50OgljcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKKyAgICBwcmVzZW50OglDUFVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKIAkJc3lzdGVtLiBbY3B1X3ByZXNlbnRfbWFza10KIAogVGhlIGZvcm1hdCBmb3IgdGhlIGFib3ZlIG91dHB1dCBpcyBjb21wYXRpYmxlIHdpdGggY3B1bGlzdF9wYXJzZSgpCiBbc2VlIDxsaW51eC9jcHVtYXNrLmg+XS4gIFNvbWUgZXhhbXBsZXMgZm9sbG93LgogCi1JbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBjcHVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCitJbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBDUFVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCiB0aGUga2VybmVsIG1heCB3aGljaCBpcyBsaW1pdGVkIHRvIDAuLjMxIGJ5IHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24KLWJlaW5nIDMyLiAgTm90ZSBhbHNvIHRoYXQgY3B1cyAyIGFuZCA0LTMxIGFyZSBub3Qgb25saW5lIGJ1dCBjb3VsZCBiZQorYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBDUFVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCiBicm91Z2h0IG9ubGluZSBhcyB0aGV5IGFyZSBib3RoIHByZXNlbnQgYW5kIHBvc3NpYmxlLgogCiAgICAgIGtlcm5lbF9tYXg6IDMxCkBAIC02Nyw4ICs4MCw4IEBACiAgICAgICAgIHByZXNlbnQ6IDAtMzEKIAogSW4gdGhpcyBleGFtcGxlLCB0aGUgTlJfQ1BVUyBjb25maWcgb3B0aW9uIGlzIDEyOCwgYnV0IHRoZSBrZXJuZWwgd2FzCi1zdGFydGVkIHdpdGggcG9zc2libGVfY3B1cz0xNDQuICBUaGVyZSBhcmUgNCBjcHVzIGluIHRoZSBzeXN0ZW0gYW5kIGNwdTIKLXdhcyBtYW51YWxseSB0YWtlbiBvZmZsaW5lIChhbmQgaXMgdGhlIG9ubHkgY3B1IHRoYXQgY2FuIGJlIGJyb3VnaHQKK3N0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IENQVXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgord2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBDUFUgdGhhdCBjYW4gYmUgYnJvdWdodAogb25saW5lLikKIAogICAgICBrZXJuZWxfbWF4OiAxMjcKQEAgLTc4LDQgKzkxLDQgQEAKICAgICAgICAgcHJlc2VudDogMC0zCiAKIFNlZSBjcHUtaG90cGx1Zy50eHQgZm9yIHRoZSBwb3NzaWJsZV9jcHVzPU5VTSBrZXJuZWwgc3RhcnQgcGFyYW1ldGVyCi1hcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFzaydzLgorYXMgd2VsbCBhcyBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNwdW1hc2tzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDA0ZTZjODEuLmJjNjkzZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQxOCw2ICs0MTgsMTQgQEAKIFdoeToJU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHVzZXJzcGFjZSwgcG9saWN5IGRhZW1vbi4KIFdobzoJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUNPTkZJR19JTk9USUZZCitXaGVuOgkyLjYuMzMKK1doeToJbGFzdCB1c2VyIChhdWRpdCkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIG5ld2VyIG1vcmUgZ2VuZXJpYworCWFuZCBtb3JlIGVhc2lseSBtYWludGFpbmVkIGZzbm90aWZ5IHN1YnN5c3RlbQorV2hvOglFcmljIFBhcmlzIDxlcGFyaXNAcmVkaGF0LmNvbT4KKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0Oglsb2NrX3BvbGljeV9yd3NlbV8qIGFuZCB1bmxvY2tfcG9saWN5X3J3c2VtXyogd2lsbCBub3QgYmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CmluZGV4IGJmNGY0YjcuLjZkOTRlMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dApAQCAtMTM0LDkgKzEzNCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgCW1vdW50IG9wdGlvbnMgInJvLG5vbG9hZCIgY2FuIGJlIHVzZWQgdG8gcHJldmVudAogCQkgICAgIAl3cml0ZXMgdG8gdGhlIGZpbGVzeXN0ZW0uCiAKK2pvdXJuYWxfY2hlY2tzdW0JRW5hYmxlIGNoZWNrc3VtbWluZyBvZiB0aGUgam91cm5hbCB0cmFuc2FjdGlvbnMuCisJCQlUaGlzIHdpbGwgYWxsb3cgdGhlIHJlY292ZXJ5IGNvZGUgaW4gZTJmc2NrIGFuZCB0aGUKKwkJCWtlcm5lbCB0byBkZXRlY3QgY29ycnVwdGlvbiBpbiB0aGUga2VybmVsLiAgSXQgaXMgYQorCQkJY29tcGF0aWJsZSBjaGFuZ2UgYW5kIHdpbGwgYmUgaWdub3JlZCBieSBvbGRlciBrZXJuZWxzLgorCiBqb3VybmFsX2FzeW5jX2NvbW1pdAlDb21taXQgYmxvY2sgY2FuIGJlIHdyaXR0ZW4gdG8gZGlzayB3aXRob3V0IHdhaXRpbmcKIAkJCWZvciBkZXNjcmlwdG9yIGJsb2Nrcy4gSWYgZW5hYmxlZCBvbGRlciBrZXJuZWxzIGNhbm5vdAotCQkJbW91bnQgdGhlIGRldmljZS4KKwkJCW1vdW50IHRoZSBkZXZpY2UuIFRoaXMgd2lsbCBlbmFibGUgJ2pvdXJuYWxfY2hlY2tzdW0nCisJCQlpbnRlcm5hbGx5LgogCiBqb3VybmFsPXVwZGF0ZQkJVXBkYXRlIHRoZSBleHQ0IGZpbGUgc3lzdGVtJ3Mgam91cm5hbCB0byB0aGUgY3VycmVudAogCQkJZm9ybWF0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggZGNiZDUwMi4uODJkZWY4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTM1MywxMCArMzUzLDIwIEBACiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KIAotcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbAlQb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsLiAgQSBwb2xsCisJCQkJbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gdGhpcyBmaWxlIGlmIHRoZQorCQkJCWhhcmR3YXJlIGNoYW5nZXMgdGhlIGF2ZXJhZ2luZyBpbnRlcnZhbC4KIAkJCQlVbml0OiBtaWxsaXNlY29uZHMKIAkJCQlSVwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWxfbWF4CU1heGltdW0gcG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcworCQkJCVJPCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9taW4JTWluaW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKwogcG93ZXJbMS0qXV9hdmVyYWdlX2hpZ2hlc3QJSGlzdG9yaWNhbCBhdmVyYWdlIG1heGltdW0gcG93ZXIgdXNlCiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KQEAgLTM2NSw2ICszNzUsMTggQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfbWF4CQlBIHBvbGwgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8KKwkJCQlwb3dlclsxLSpdX2F2ZXJhZ2Ugd2hlbiBwb3dlciB1c2UKKwkJCQlyaXNlcyBhYm92ZSB0aGlzIHZhbHVlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9taW4JCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXNpbmtzIGJlbG93IHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKwogcG93ZXJbMS0qXV9pbnB1dAkJSW5zdGFudGFuZW91cyBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzgxLDYgKzQwMywzOSBAQAogCQkJCWF2ZXJhZ2VfaGlnaGVzdCBhbmQgYXZlcmFnZV9sb3dlc3QuCiAJCQkJV08KIAorcG93ZXJbMS0qXV9hY2N1cmFjeQkJQWNjdXJhY3kgb2YgdGhlIHBvd2VyIG1ldGVyLgorCQkJCVVuaXQ6IFBlcmNlbnQKKwkJCQlSTworCitwb3dlclsxLSpdX2FsYXJtCQkxIGlmIHRoZSBzeXN0ZW0gaXMgZHJhd2luZyBtb3JlIHBvd2VyIHRoYW4gdGhlCisJCQkJY2FwIGFsbG93czsgMCBvdGhlcndpc2UuICBBIHBvbGwgbm90aWZpY2F0aW9uIGlzCisJCQkJc2VudCB0byB0aGlzIGZpbGUgd2hlbiB0aGUgcG93ZXIgdXNlIGV4Y2VlZHMgdGhlCisJCQkJY2FwLiAgVGhpcyBmaWxlIG9ubHkgYXBwZWFycyBpZiB0aGUgY2FwIGlzIGtub3duCisJCQkJdG8gYmUgZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJUk8KKworcG93ZXJbMS0qXV9jYXAJCQlJZiBwb3dlciB1c2UgcmlzZXMgYWJvdmUgdGhpcyBsaW1pdCwgdGhlCisJCQkJc3lzdGVtIHNob3VsZCB0YWtlIGFjdGlvbiB0byByZWR1Y2UgcG93ZXIgdXNlLgorCQkJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJY2FwIGlzIGNoYW5nZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhlICpfY2FwCisJCQkJZmlsZXMgb25seSBhcHBlYXIgaWYgdGhlIGNhcCBpcyBrbm93biB0byBiZQorCQkJCWVuZm9yY2VkIGJ5IGhhcmR3YXJlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX2h5c3QJCU1hcmdpbiBvZiBoeXN0ZXJlc2lzIGJ1aWx0IGFyb3VuZCBjYXBwaW5nIGFuZAorCQkJCW5vdGlmaWNhdGlvbi4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCitwb3dlclsxLSpdX2NhcF9tYXgJCU1heGltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCitwb3dlclsxLSpdX2NhcF9taW4JCU1pbmltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCiAqKioqKioqKioqCiAqIEVuZXJneSAqCiAqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAppbmRleCBjNWIzN2M1Li5hYzU0MGM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKQEAgLTgsNyArOCw3IEBACiAgICAgRGF0YXNoZWV0OiBPbmx5IGF2YWlsYWJsZSB2aWEgTkRBIGZyb20gU2VydmVyV29ya3MKICAgKiBBVEkgSVhQMjAwLCBJWFAzMDAsIElYUDQwMCwgU0I2MDAsIFNCNzAwIGFuZCBTQjgwMCBzb3V0aGJyaWRnZXMKICAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKLSAgKiBBTUQgU0I5MDAKKyAgKiBBTUQgSHVkc29uLTIKICAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKICAgKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgKFNNU0MpIFNMQzkwRTY2IChWaWN0b3J5NjYpIHNvdXRoYnJpZGdlCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNNU0Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNtc2MuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CmluZGV4IDcwZDY4Y2UuLmE4N2RjMjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CkBAIC0xLDUgKzEsNSBAQAogR2VuZXJpYyBUaGVybWFsIFN5c2ZzIGRyaXZlciBIb3cgVG8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFdyaXR0ZW4gYnkgU3VqaXRoIFRob21hcyA8c3VqaXRoLnRob21hc0BpbnRlbC5jb20+LCBaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CiAKQEAgLTEwLDIwICsxMCwyMCBAQAogCiAwLiBJbnRyb2R1Y3Rpb24KIAotVGhlIGdlbmVyaWMgdGhlcm1hbCBzeXNmcyBwcm92aWRlcyBhIHNldCBvZiBpbnRlcmZhY2VzIGZvciB0aGVybWFsIHpvbmUgZGV2aWNlcyAoc2Vuc29ycykKLWFuZCB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyAoZmFuLCBwcm9jZXNzb3IuLi4pIHRvIHJlZ2lzdGVyIHdpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudAotc29sdXRpb24gYW5kIHRvIGJlIGEgcGFydCBvZiBpdC4KK1RoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lCitkZXZpY2VzIChzZW5zb3JzKSBhbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3Rlcgord2l0aCB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50IHNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCiAKLVRoaXMgaG93LXRvIGZvY3VzZXMgb24gZW5hYmxpbmcgbmV3IHRoZXJtYWwgem9uZSBhbmQgY29vbGluZyBkZXZpY2VzIHRvIHBhcnRpY2lwYXRlCi1pbiB0aGVybWFsIG1hbmFnZW1lbnQuCi1UaGlzIHNvbHV0aW9uIGlzIHBsYXRmb3JtIGluZGVwZW5kZW50IGFuZCBhbnkgdHlwZSBvZiB0aGVybWFsIHpvbmUgZGV2aWNlcyBhbmQKLWNvb2xpbmcgZGV2aWNlcyBzaG91bGQgYmUgYWJsZSB0byBtYWtlIHVzZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuCitUaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0bworcGFydGljaXBhdGUgaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgorVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMKK2FuZCBjb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgogCi1UaGUgbWFpbiB0YXNrIG9mIHRoZSB0aGVybWFsIHN5c2ZzIGRyaXZlciBpcyB0byBleHBvc2UgdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgYXMgd2VsbAotYXMgY29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyB0byB0aGUgdXNlciBzcGFjZS4KLUFuIGludGVsbGlnZW50IHRoZXJtYWwgbWFuYWdlbWVudCBhcHBsaWNhdGlvbiBjYW4gbWFrZSBkZWNpc2lvbnMgYmFzZWQgb24gaW5wdXRzCi1mcm9tIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzICh0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBhbmQgdHJpcCBwb2ludCB0ZW1wZXJhdHVyZSkKLWFuZCB0aHJvdHRsZSBhcHByb3ByaWF0ZSBkZXZpY2VzLgorVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzCithcyB3ZWxsIGFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCitBbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uCitpbnB1dHMgZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQKK3RlbXBlcmF0dXJlKSBhbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KIAogWzAtKl0JZGVub3RlcyBhbnkgcG9zaXRpdmUgbnVtYmVyIHN0YXJ0aW5nIGZyb20gMAogWzEtKl0JZGVub3RlcyBhbnkgcG9zaXRpdmUgbnVtYmVyIHN0YXJ0aW5nIGZyb20gMQpAQCAtMzEsNzcgKzMxLDc3IEBACiAxLiB0aGVybWFsIHN5c2ZzIGRyaXZlciBpbnRlcmZhY2UgZnVuY3Rpb25zCiAKIDEuMSB0aGVybWFsIHpvbmUgZGV2aWNlIGludGVyZmFjZQotMS4xLjEgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoY2hhciAqbmFtZSwgaW50IHRyaXBzLAotCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlX29wcyAqb3BzKQorMS4xLjEgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoY2hhciAqbmFtZSwKKwkJaW50IHRyaXBzLCB2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCB6b25lIGRldmljZSAoc2Vuc29yKSB0bwotCS9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYXMgdGhlcm1hbF96b25lWzAtKl0uCi0JSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIHJlZ2lzdGVyZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KKyAgICAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGFsbCB0aGUKKyAgICB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCiAKLQluYW1lOiB0aGUgdGhlcm1hbCB6b25lIG5hbWUuCi0JdHJpcHM6IHRoZSB0b3RhbCBudW1iZXIgb2YgdHJpcCBwb2ludHMgdGhpcyB0aGVybWFsIHpvbmUgc3VwcG9ydHMuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YQotCW9wczogdGhlcm1hbCB6b25lIGRldmljZSBjYWxsLWJhY2tzLgotCQkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLnVuYmluZDogdW5iaW5kIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHdpdGggYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X3RlbXA6IGdldCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJCSAgICJrZXJuZWwiIG1lYW5zIHRoZXJtYWwgbWFuYWdlbWVudCBpcyBkb25lIGluIGtlcm5lbC4KLQkJCSAgICJ1c2VyIiB3aWxsIHByZXZlbnQga2VybmVsIHRoZXJtYWwgZHJpdmVyIGFjdGlvbnMgdXBvbiB0cmlwIHBvaW50cwotCQkJICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgotCQkuc2V0X21vZGU6IHNldCB0aGUgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCS5nZXRfdHJpcF90eXBlOiBnZXQgdGhlIHR5cGUgb2YgY2VydGFpbiB0cmlwIHBvaW50LgotCQkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0JCQkJd2lsbCBiZSBmaXJlZC4KKyAgICBuYW1lOiB0aGUgdGhlcm1hbCB6b25lIG5hbWUuCisgICAgdHJpcHM6IHRoZSB0b3RhbCBudW1iZXIgb2YgdHJpcCBwb2ludHMgdGhpcyB0aGVybWFsIHpvbmUgc3VwcG9ydHMuCisgICAgZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YQorICAgIG9wczogdGhlcm1hbCB6b25lIGRldmljZSBjYWxsLWJhY2tzLgorCS5iaW5kOiBiaW5kIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHdpdGggYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkuZ2V0X3RlbXA6IGdldCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGUgdGhlcm1hbCB6b25lLgorCS5nZXRfbW9kZTogZ2V0IHRoZSBjdXJyZW50IG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgorCSAgICAtICJrZXJuZWwiIG1lYW5zIHRoZXJtYWwgbWFuYWdlbWVudCBpcyBkb25lIGluIGtlcm5lbC4KKwkgICAgLSAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKKwkgICAgICBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiB0YWtlIGNoYXJnZSBvZiB0aGVybWFsIG1hbmFnZW1lbnQuCisJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgorCS5nZXRfdHJpcF90eXBlOiBnZXQgdGhlIHR5cGUgb2YgY2VydGFpbiB0cmlwIHBvaW50LgorCS5nZXRfdHJpcF90ZW1wOiBnZXQgdGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRoZSBjZXJ0YWluIHRyaXAgcG9pbnQKKwkJCXdpbGwgYmUgZmlyZWQuCiAKIDEuMS4yIHZvaWQgdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZCBhbGwKLQl0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZXMgaXQgdXNlcy4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBhbGwgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCiAKIDEuMiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGludGVyZmFjZQogMS4yLjEgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKnRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoY2hhciAqbmFtZSwKLQkJCQkJdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzICopCisJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQogCi0JVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgaXRzZWxmIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KLQluYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KLQlkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgotCW9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KLQkJLmdldF9tYXhfc3RhdGU6IGdldCB0aGUgTWF4aW11bSB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCi0JCS5nZXRfY3VyX3N0YXRlOiBnZXQgdGhlIEN1cnJlbnQgdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgY29vbGluZyBkZXZpY2UgKGZhbi9wcm9jZXNzb3IvLi4uKQorICAgIHRvIC9zeXMvY2xhc3MvdGhlcm1hbC8gZm9sZGVyIGFzIGNvb2xpbmdfZGV2aWNlWzAtKl0uIEl0IHRyaWVzIHRvIGJpbmQgaXRzZWxmCisgICAgdG8gYWxsIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlcyByZWdpc3RlciBhdCB0aGUgc2FtZSB0aW1lLgorICAgIG5hbWU6IHRoZSBjb29saW5nIGRldmljZSBuYW1lLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEuCisgICAgb3BzOiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBjYWxsLWJhY2tzLgorCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgorCS5nZXRfY3VyX3N0YXRlOiBnZXQgdGhlIEN1cnJlbnQgdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgorCS5zZXRfY3VyX3N0YXRlOiBzZXQgdGhlIEN1cnJlbnQgdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgogCiAxLjIuMiB2b2lkIHRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHJlbW92ZSB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQlJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQgdW5iaW5kCi0JaXRzZWxmIGZyb20gYWxsCXRoZSB0aGVybWFsIHpvbmUgZGV2aWNlcyB1c2luZyBpdC4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisgICAgSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kCisgICAgdW5iaW5kIGl0c2VsZiBmcm9tIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCiAKIDEuMyBpbnRlcmZhY2UgZm9yIGJpbmRpbmcgYSB0aGVybWFsIHpvbmUgZGV2aWNlIHdpdGggYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCiAxLjMuMSBpbnQgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJaW50IHRyaXAsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KTsKKwkJaW50IHRyaXAsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KTsKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIHRvIHRoZSBjZXJ0YWluIHRyaXAgcG9pbnQKLQlvZiBhIHRoZXJtYWwgem9uZSBkZXZpY2UuCi0JVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBpbiB0aGUgdGhlcm1hbCB6b25lIGRldmljZSAuYmluZCBjYWxsYmFjay4KLQl0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKLQljZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCi0JdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKLQkJIGluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIHRvIHRoZSBjZXJ0YWluIHRyaXAKKyAgICBwb2ludCBvZiBhIHRoZXJtYWwgem9uZSBkZXZpY2UuCisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBpbiB0aGUgdGhlcm1hbCB6b25lIGRldmljZSAuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAxLjMuMiBpbnQgdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosCi0JCQkJaW50IHRyaXAsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KTsKKwkJaW50IHRyaXAsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KTsKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KLQl0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKLQljZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCi0JdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKLQkJaW4gdGhpcyB0aGVybWFsIHpvbmUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gdW5iaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSBmcm9tIHRoZSBjZXJ0YWluCisgICAgdHJpcCBwb2ludCBvZiBhIHRoZXJtYWwgem9uZSBkZXZpY2UuIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4KKyAgICB0aGUgdGhlcm1hbCB6b25lIGRldmljZSAudW5iaW5kIGNhbGxiYWNrLgorICAgIHR6OiB0aGUgdGhlcm1hbCB6b25lIGRldmljZQorICAgIGNkZXY6IHRoZXJtYWwgY29vbGluZyBkZXZpY2UKKyAgICB0cmlwOiBpbmRpY2F0ZXMgd2hpY2ggdHJpcCBwb2ludCB0aGUgY29vbGluZyBkZXZpY2VzIGlzIGFzc29jaWF0ZWQgd2l0aAorCSAgaW4gdGhpcyB0aGVybWFsIHpvbmUuCiAKIDIuIHN5c2ZzIGF0dHJpYnV0ZXMgc3RydWN0dXJlCiAKQEAgLTExNCwxNTMgKzExNCwxNjYgQEAKIAogVGhlcm1hbCB6b25lIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZVswLSpdOgotCXwtLS0tLXR5cGU6CQkJVHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lCi0JfC0tLS0tdGVtcDoJCQlDdXJyZW50IHRlbXBlcmF0dXJlCi0JfC0tLS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRyaXBfcG9pbnRfWzAtKl1fdGVtcDoJVHJpcCBwb2ludCB0ZW1wZXJhdHVyZQotCXwtLS0tLXRyaXBfcG9pbnRfWzAtKl1fdHlwZToJVHJpcCBwb2ludCB0eXBlCisgICAgfC0tLXR5cGU6CQkJVHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lCisgICAgfC0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQorICAgIHwtLS1tb2RlOgkJCVdvcmtpbmcgbW9kZSBvZiB0aGUgdGhlcm1hbCB6b25lCisgICAgfC0tLXRyaXBfcG9pbnRfWzAtKl1fdGVtcDoJVHJpcCBwb2ludCB0ZW1wZXJhdHVyZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQogCiBUaGVybWFsIGNvb2xpbmcgZGV2aWNlIHN5cyBJL0YsIGNyZWF0ZWQgb25jZSBpdCdzIHJlZ2lzdGVyZWQ6CiAvc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2VbMC0qXToKLQl8LS0tLS10eXBlIDoJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKLQl8LS0tLS1tYXhfc3RhdGU6CQlNYXhpbXVtIGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCi0JfC0tLS0tY3VyX3N0YXRlOgkJQ3VycmVudCBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlKHByb2Nlc3Nvci9mYW4vLi4uKQorICAgIHwtLS1tYXhfc3RhdGU6CQlNYXhpbXVtIGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCisgICAgfC0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKIAogCi1UaGVzZSB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuCi1UaGV5IHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgotVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoCi10aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uLgorVGhlbiBuZXh0IHR3byBkeW5hbWljIGF0dHJpYnV0ZXMgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBpbiBwYWlycy4gVGhleSByZXByZXNlbnQKK3RoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIHRoZXJtYWwgem9uZSBhbmQgaXRzIGFzc29jaWF0ZWQgY29vbGluZyBkZXZpY2UuCitUaGV5IGFyZSBjcmVhdGVkL3JlbW92ZWQgZm9yIGVhY2ggc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YKK3RoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlL3RoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2UuCiAKLS9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXQotCXwtLS0tLWNkZXZbMC0qXToJCVRoZSBbMC0qXXRoIGNvb2xpbmcgZGV2aWNlIGluIHRoZSBjdXJyZW50IHRoZXJtYWwgem9uZQotCXwtLS0tLWNkZXZbMC0qXV90cmlwX3BvaW50OglUcmlwIHBvaW50IHRoYXQgY2RldlswLSpdIGlzIGFzc29jaWF0ZWQgd2l0aAorL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZVswLSpdOgorICAgIHwtLS1jZGV2WzAtKl06CQlbMC0qXXRoIGNvb2xpbmcgZGV2aWNlIGluIGN1cnJlbnQgdGhlcm1hbCB6b25lCisgICAgfC0tLWNkZXZbMC0qXV90cmlwX3BvaW50OglUcmlwIHBvaW50IHRoYXQgY2RldlswLSpdIGlzIGFzc29jaWF0ZWQgd2l0aAogCiBCZXNpZGVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHN5c2ZzIEkvRiBhbmQgY29vbGluZyBkZXZpY2Ugc3lzZnMgSS9GLAotdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgYWxzbyBjcmVhdGVzIGEgaHdtb24gc3lzZnMgSS9GIGZvciBlYWNoIF90eXBlXyBvZgotdGhlcm1hbCB6b25lIGRldmljZS4gRS5nLiB0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciByZWdpc3RlcnMgb25lIGh3bW9uIGNsYXNzIGRldmljZQotYW5kIGJ1aWxkIHRoZSBhc3NvY2lhdGVkIGh3bW9uIHN5c2ZzIEkvRiBmb3IgYWxsIHRoZSByZWdpc3RlcmVkIEFDUEkgdGhlcm1hbCB6b25lcy4KK3RoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8KK29mIHRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbgorY2xhc3MgZGV2aWNlIGFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZAorQUNQSSB0aGVybWFsIHpvbmVzLgorCiAvc3lzL2NsYXNzL2h3bW9uL2h3bW9uWzAtKl06Ci0JfC0tLS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMuCi0JfC0tLS0tdGVtcFsxLSpdX2lucHV0OgkJVGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlcm1hbCB6b25lIFsxLSpdLgotCXwtLS0tLXRlbXBbMS0qXV9jcml0aWNhbDoJVGhlIGNyaXRpY2FsIHRyaXAgcG9pbnQgb2YgdGhlcm1hbCB6b25lIFsxLSpdLgorICAgIHwtLS1uYW1lOgkJCVRoZSB0eXBlIG9mIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlcworICAgIHwtLS10ZW1wWzEtKl1faW5wdXQ6CVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXQorICAgIHwtLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXQorCiBQbGVhc2UgcmVhZCBEb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi10eXBlCQkJCVN0cmluZ3Mgd2hpY2ggcmVwcmVzZW50IHRoZSB0aGVybWFsIHpvbmUgdHlwZS4KLQkJCQlUaGlzIGlzIGdpdmVuIGJ5IHRoZXJtYWwgem9uZSBkcml2ZXIgYXMgcGFydCBvZiByZWdpc3RyYXRpb24uCi0JCQkJRWc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCi0JCQkJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZSwKLQkJCQl0aGlzIHNob3VsZCBiZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLAotCQkJCW5vdCBjb250YWluaW5nIHNwYWNlcyBub3IgZGFzaGVzLgotCQkJCVJPCi0JCQkJUmVxdWlyZWQKK3R5cGUKKwlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCisJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgorCUUuZzogImFjcGl0eiIgaW5kaWNhdGVzIGl0J3MgYW4gQUNQSSB0aGVybWFsIGRldmljZS4KKwlJbiBvcmRlciB0byBrZWVwIGl0IGNvbnNpc3RlbnQgd2l0aCBod21vbiBzeXMgYXR0cmlidXRlOyB0aGlzIHNob3VsZAorCWJlIGEgc2hvcnQsIGxvd2VyY2FzZSBzdHJpbmcsIG5vdCBjb250YWluaW5nIHNwYWNlcyBub3IgZGFzaGVzLgorCVJPLCBSZXF1aXJlZAogCi10ZW1wCQkJCUN1cnJlbnQgdGVtcGVyYXR1cmUgYXMgcmVwb3J0ZWQgYnkgdGhlcm1hbCB6b25lIChzZW5zb3IpCi0JCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cwotCQkJCVJPCi0JCQkJUmVxdWlyZWQKK3RlbXAKKwlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKS4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIFJlcXVpcmVkCiAKLW1vZGUJCQkJT25lIG9mIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBpbiBba2VybmVsLCB1c2VyXQotCQkJCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtCi0JCQkJdGhhdCBpcyBjdXJyZW50bHkgbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4KLQkJCQlJdCBjYW4gYmUgZWl0aGVyIGRlZmF1bHQga2VybmVsIGJhc2VkIGFsZ29yaXRobQotCQkJCW9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb24uCi0JCQkJUlcKLQkJCQlPcHRpb25hbAotCQkJCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KLQkJCQl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KLQkJCQkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAotCQkJCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorbW9kZQorCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0uCisJVGhpcyBmaWxlIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhbGdvcml0aG0gdGhhdCBpcyBjdXJyZW50bHkKKwltYW5hZ2luZyB0aGUgdGhlcm1hbCB6b25lLiBJdCBjYW4gYmUgZWl0aGVyIGRlZmF1bHQga2VybmVsIGJhc2VkCisJYWxnb3JpdGhtIG9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb24uCisJa2VybmVsCT0gVGhlcm1hbCBtYW5hZ2VtZW50IGluIGtlcm5lbCB0aGVybWFsIHpvbmUgZHJpdmVyLgorCXVzZXIJPSBQcmV2ZW50aW5nIGtlcm5lbCB0aGVybWFsIHpvbmUgZHJpdmVyIGFjdGlvbnMgdXBvbgorCQkgIHRyaXAgcG9pbnRzIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbiBjYW4gdGFrZSBmdWxsCisJCSAgY2hhcmdlIG9mIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQuCisJUlcsIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdGVtcAkJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZAotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCU9wdGlvbmFsCit0cmlwX3BvaW50X1swLSpdX3RlbXAKKwlUaGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdHJpcCBwb2ludCB3aWxsIGJlIGZpcmVkLgorCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKKwlSTywgT3B0aW9uYWwKIAotdHJpcF9wb2ludF9bMC0qXV90eXBlIAkJU3RyaW5ncyB3aGljaCBpbmRpY2F0ZSB0aGUgdHlwZSBvZiB0aGUgdHJpcCBwb2ludAotCQkJCUUuZy4gaXQgY2FuIGJlIG9uZSBvZiBjcml0aWNhbCwgaG90LCBwYXNzaXZlLAotCQkJCSAgICBhY3RpdmVbMC0qXSBmb3IgQUNQSSB0aGVybWFsIHpvbmUuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90eXBlCisJU3RyaW5ncyB3aGljaCBpbmRpY2F0ZSB0aGUgdHlwZSBvZiB0aGUgdHJpcCBwb2ludC4KKwlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwgYWN0aXZlWzAtKl0gZm9yIEFDUEkKKwl0aGVybWFsIHpvbmUuCisJUk8sIE9wdGlvbmFsCiAKLWNkZXZbMC0qXQkJCVN5c2ZzIGxpbmsgdG8gdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2Ugbm9kZSB3aGVyZSB0aGUgc3lzIEkvRgotCQkJCWZvciBjb29saW5nIGRldmljZSB0aHJvdHRsaW5nIGNvbnRyb2wgcmVwcmVzZW50cy4KLQkJCQlSTwotCQkJCU9wdGlvbmFsCitjZGV2WzAtKl0KKwlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKKwlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCisJUk8sIE9wdGlvbmFsCiAKLWNkZXZbMC0qXV90cmlwX3BvaW50CQlUaGUgdHJpcCBwb2ludCB3aXRoIHdoaWNoIGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIGluIHRoaXMgdGhlcm1hbCB6b25lCi0JCQkJLTEgbWVhbnMgdGhlIGNvb2xpbmcgZGV2aWNlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHRyaXAgcG9pbnQuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdX3RyaXBfcG9pbnQKKwlUaGUgdHJpcCBwb2ludCB3aXRoIHdoaWNoIGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIGluIHRoaXMgdGhlcm1hbAorCXpvbmU7IC0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwCisJcG9pbnQuCisJUk8sIE9wdGlvbmFsCiAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb29saW5nIGRldmljZSAgYXR0cmlidXRlcyAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3Bhc3NpdmUKKwlBdHRyaWJ1dGUgaXMgb25seSBwcmVzZW50IGZvciB6b25lcyBpbiB3aGljaCB0aGUgcGFzc2l2ZSBjb29saW5nCisJcG9saWN5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlIHRoZXJtYWwgZHJpdmVyLiBEZWZhdWx0IGlzIHplcm8KKwlhbmQgY2FuIGJlIHNldCB0byBhIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMpIHRvIGVuYWJsZSBhCisJcGFzc2l2ZSB0cmlwIHBvaW50IGZvciB0aGUgem9uZS4gQWN0aXZhdGlvbiBpcyBkb25lIGJ5IHBvbGxpbmcgd2l0aAorCWFuIGludGVydmFsIG9mIDEgc2Vjb25kLgorCVVuaXQ6IG1pbGxpZGVncmVlcyBDZWxzaXVzCisJUlcsIE9wdGlvbmFsCiAKLXR5cGUJCQkJU3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGV2aWNlCi0JCQkJZWc6IEZvciBnZW5lcmljIEFDUEk6IHRoaXMgc2hvdWxkIGJlICJGYW4iLAotCQkJCSJQcm9jZXNzb3IiIG9yICJMQ0QiCi0JCQkJZWcuIEZvciBtZW1vcnkgY29udHJvbGxlciBkZXZpY2Ugb24gaW50ZWxfbWVubG93IHBsYXRmb3JtOgotCQkJCXRoaXMgc2hvdWxkIGJlICJNZW1vcnkgY29udHJvbGxlciIKLQkJCQlSTwotCQkJCVJlcXVpcmVkCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb29saW5nIGRldmljZSBhdHRyaWJ1dGVzICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLW1heF9zdGF0ZQkJCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGV2aWNlLCBlLmc6CisJLSBmb3IgZ2VuZXJpYyBBQ1BJOiBzaG91bGQgYmUgIkZhbiIsICJQcm9jZXNzb3IiIG9yICJMQ0QiCisJLSBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKKwkgIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiLgorCVJPLCBSZXF1aXJlZAogCi1jdXJfc3RhdGUJCQlUaGUgY3VycmVudCBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJdGhlIHZhbHVlIGNhbiBhbnkgaW50ZWdlciBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4X3N0YXRlLAotCQkJCWN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKLQkJCQljdXJfc3RhdGUgPT0gbWF4X3N0YXRlIG1lYW5zIHRoZSBtYXhpbXVtIGNvb2xpbmcuCi0JCQkJUlcKLQkJCQlSZXF1aXJlZAorbWF4X3N0YXRlCisJVGhlIG1heGltdW0gcGVybWlzc2libGUgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVJPLCBSZXF1aXJlZAorCitjdXJfc3RhdGUKKwlUaGUgY3VycmVudCBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCisJVGhlIHZhbHVlIGNhbiBhbnkgaW50ZWdlciBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4X3N0YXRlOgorCS0gY3VyX3N0YXRlID09IDAgbWVhbnMgbm8gY29vbGluZworCS0gY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgorCVJXLCBSZXF1aXJlZAogCiAzLiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbgogCi1BQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsL2hvdC9wYXNzaXZlL2FjdGl2ZS4KLUlmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLCBhY3RpdmVbMF0gYW5kIGFjdGl2ZVsxXSBhdCB0aGUgc2FtZSB0aW1lLAotaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhIHRoZXJtYWxfem9uZV9kZXZpY2UgKHRoZXJtYWxfem9uZTEpIHdpdGggNCB0cmlwIHBvaW50cyBpbiBhbGwuCi1JdCBoYXMgb25lIHByb2Nlc3NvciBhbmQgb25lIGZhbiwgd2hpY2ggYXJlIGJvdGggcmVnaXN0ZXJlZCBhcyB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlLgotSWYgdGhlIHByb2Nlc3NvciBpcyBsaXN0ZWQgaW4gX1BTTCBtZXRob2QsIGFuZCB0aGUgZmFuIGlzIGxpc3RlZCBpbiBfQUwwIG1ldGhvZCwKLXRoZSBzeXMgSS9GIHN0cnVjdHVyZSB3aWxsIGJlIGJ1aWx0IGxpa2UgdGhpczoKK0FDUEkgdGhlcm1hbCB6b25lIG1heSBzdXBwb3J0IG11bHRpcGxlIHRyaXAgcG9pbnRzIGxpa2UgY3JpdGljYWwsIGhvdCwKK3Bhc3NpdmUsIGFjdGl2ZS4gSWYgYW4gQUNQSSB0aGVybWFsIHpvbmUgc3VwcG9ydHMgY3JpdGljYWwsIHBhc3NpdmUsCithY3RpdmVbMF0gYW5kIGFjdGl2ZVsxXSBhdCB0aGUgc2FtZSB0aW1lLCBpdCBtYXkgcmVnaXN0ZXIgaXRzZWxmIGFzIGEKK3RoZXJtYWxfem9uZV9kZXZpY2UgKHRoZXJtYWxfem9uZTEpIHdpdGggNCB0cmlwIHBvaW50cyBpbiBhbGwuCitJdCBoYXMgb25lIHByb2Nlc3NvciBhbmQgb25lIGZhbiwgd2hpY2ggYXJlIGJvdGggcmVnaXN0ZXJlZCBhcwordGhlcm1hbF9jb29saW5nX2RldmljZS4KKworSWYgdGhlIHByb2Nlc3NvciBpcyBsaXN0ZWQgaW4gX1BTTCBtZXRob2QsIGFuZCB0aGUgZmFuIGlzIGxpc3RlZCBpbiBfQUwwCittZXRob2QsIHRoZSBzeXMgSS9GIHN0cnVjdHVyZSB3aWxsIGJlIGJ1aWx0IGxpa2UgdGhpczoKIAogL3N5cy9jbGFzcy90aGVybWFsOgogCiB8dGhlcm1hbF96b25lMToKLQl8LS0tLS10eXBlOgkJCWFjcGl0egotCXwtLS0tLXRlbXA6CQkJMzcwMDAKLQl8LS0tLS1tb2RlOgkJCWtlcm5lbAotCXwtLS0tLXRyaXBfcG9pbnRfMF90ZW1wOgkxMDAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKLQl8LS0tLS10cmlwX3BvaW50XzFfdGVtcDoJODAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzFfdHlwZToJcGFzc2l2ZQotCXwtLS0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfMl90eXBlOglhY3RpdmUwCi0JfC0tLS0tdHJpcF9wb2ludF8zX3RlbXA6CTYwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKLQl8LS0tLS1jZGV2MDoJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMAotCXwtLS0tLWNkZXYwX3RyaXBfcG9pbnQ6CQkxCS8qIGNkZXYwIGNhbiBiZSB1c2VkIGZvciBwYXNzaXZlICovCi0JfC0tLS0tY2RldjE6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTMKLQl8LS0tLS1jZGV2MV90cmlwX3BvaW50OgkJMgkvKiBjZGV2MSBjYW4gYmUgdXNlZCBmb3IgYWN0aXZlWzBdKi8KKyAgICB8LS0tdHlwZToJCQlhY3BpdHoKKyAgICB8LS0tdGVtcDoJCQkzNzAwMAorICAgIHwtLS1tb2RlOgkJCWtlcm5lbAorICAgIHwtLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMF90eXBlOgljcml0aWNhbAorICAgIHwtLS10cmlwX3BvaW50XzFfdGVtcDoJODAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKKyAgICB8LS0tdHJpcF9wb2ludF8yX3RlbXA6CTcwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMl90eXBlOglhY3RpdmUwCisgICAgfC0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzNfdHlwZToJYWN0aXZlMQorICAgIHwtLS1jZGV2MDoJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMAorICAgIHwtLS1jZGV2MF90cmlwX3BvaW50OgkxCS8qIGNkZXYwIGNhbiBiZSB1c2VkIGZvciBwYXNzaXZlICovCisgICAgfC0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCisgICAgfC0tLWNkZXYxX3RyaXBfcG9pbnQ6CTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCiAKIHxjb29saW5nX2RldmljZTA6Ci0JfC0tLS0tdHlwZToJCQlQcm9jZXNzb3IKLQl8LS0tLS1tYXhfc3RhdGU6CQk4Ci0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCVByb2Nlc3NvcgorICAgIHwtLS1tYXhfc3RhdGU6CQk4CisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogfGNvb2xpbmdfZGV2aWNlMzoKLQl8LS0tLS10eXBlOgkJCUZhbgotCXwtLS0tLW1heF9zdGF0ZToJCTIKLQl8LS0tLS1jdXJfc3RhdGU6CQkwCisgICAgfC0tLXR5cGU6CQkJRmFuCisgICAgfC0tLW1heF9zdGF0ZToJCTIKKyAgICB8LS0tY3VyX3N0YXRlOgkJMAogCiAvc3lzL2NsYXNzL2h3bW9uOgogCiB8aHdtb24wOgotCXwtLS0tLW5hbWU6CQkJYWNwaXR6Ci0JfC0tLS0tdGVtcDFfaW5wdXQ6CQkzNzAwMAotCXwtLS0tLXRlbXAxX2NyaXQ6CQkxMDAwMDAKKyAgICB8LS0tbmFtZToJCQlhY3BpdHoKKyAgICB8LS0tdGVtcDFfaW5wdXQ6CQkzNzAwMAorICAgIHwtLS10ZW1wMV9jcml0OgkJMTAwMDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggOTU3YjIyZi4uODE3OTY5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtMTIzMSw2ICsxMjMxLDcgQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNkZWZpbmUgX1NUUih4KSAjeAogI2RlZmluZSBTVFIoeCkgX1NUUih4KQpAQCAtMTI2NSw2ICsxMjY2LDcgQEAKICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KIAorICAgICAgIHN0cmNhdChkZWJ1Z2ZzLCAiL3RyYWNpbmcvIik7CiAgICAgICAgZGVidWdmc19mb3VuZCA9IDE7CiAKICAgICAgICByZXR1cm4gZGVidWdmczsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhYWJlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0CkBAIC0wLDAgKzEsMTQ5IEBACisgICAgICAgICAgICAgICAgICAgICAgICBLcHJvYmUtYmFzZWQgRXZlbnQgVHJhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdQorCisKK092ZXJ2aWV3CistLS0tLS0tLQorVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIHRvIHRyYWNlcG9pbnQgYmFzZWQgZXZlbnRzLiBJbnN0ZWFkIG9mIFRyYWNlcG9pbnQsCit0aGlzIGlzIGJhc2VkIG9uIGtwcm9iZXMgKGtwcm9iZSBhbmQga3JldHByb2JlKS4gU28gaXQgY2FuIHByb2JlIHdoZXJldmVyCitrcHJvYmVzIGNhbiBwcm9iZSAodGhpcyBtZWFucywgYWxsIGZ1bmN0aW9ucyBib2R5IGV4Y2VwdCBmb3IgX19rcHJvYmVzCitmdW5jdGlvbnMpLiBVbmxpa2UgdGhlIFRyYWNlcG9pbnQgYmFzZWQgZXZlbnQsIHRoaXMgY2FuIGJlIGFkZGVkIGFuZCByZW1vdmVkCitkeW5hbWljYWxseSwgb24gdGhlIGZseS4KKworVG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgYnVpbGQgeW91ciBrZXJuZWwgd2l0aCBDT05GSUdfS1BST0JFX1RSQUNJTkc9eS4KKworU2ltaWxhciB0byB0aGUgZXZlbnRzIHRyYWNlciwgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgYWN0aXZhdGVkIHZpYQorY3VycmVudF90cmFjZXIuIEluc3RlYWQgb2YgdGhhdCwgYWRkIHByb2JlIHBvaW50cyB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cywgYW5kIGVuYWJsZSBpdCB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvPEVWRU5UPi9lbmFibGVkLgorCisKK1N5bm9wc2lzIG9mIGtwcm9iZV9ldmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgcFs6W0dSUC9dRVZFTlRdIFNZTUJPTFsrb2Zmc118TUVNQUREUiBbRkVUQ0hBUkdTXQk6IFNldCBhIHByb2JlCisgIHJbOltHUlAvXUVWRU5UXSBTWU1CT0xbKzBdIFtGRVRDSEFSR1NdCQk6IFNldCBhIHJldHVybiBwcm9iZQorCisgR1JQCQk6IEdyb3VwIG5hbWUuIElmIG9taXR0ZWQsIHVzZSAia3Byb2JlcyIgZm9yIGl0LgorIEVWRU5UCQk6IEV2ZW50IG5hbWUuIElmIG9taXR0ZWQsIHRoZSBldmVudCBuYW1lIGlzIGdlbmVyYXRlZAorCQkgIGJhc2VkIG9uIFNZTUJPTCtvZmZzIG9yIE1FTUFERFIuCisgU1lNQk9MWytvZmZzXQk6IFN5bWJvbCtvZmZzZXQgd2hlcmUgdGhlIHByb2JlIGlzIGluc2VydGVkLgorIE1FTUFERFIJOiBBZGRyZXNzIHdoZXJlIHRoZSBwcm9iZSBpcyBpbnNlcnRlZC4KKworIEZFVENIQVJHUwk6IEFyZ3VtZW50cy4gRWFjaCBwcm9iZSBjYW4gaGF2ZSB1cCB0byAxMjggYXJncy4KKyAgJVJFRwkJOiBGZXRjaCByZWdpc3RlciBSRUcKKyAgQEFERFIJCTogRmV0Y2ggbWVtb3J5IGF0IEFERFIgKEFERFIgc2hvdWxkIGJlIGluIGtlcm5lbCkKKyAgQFNZTVsrfC1vZmZzXQk6IEZldGNoIG1lbW9yeSBhdCBTWU0gK3wtIG9mZnMgKFNZTSBzaG91bGQgYmUgYSBkYXRhIHN5bWJvbCkKKyAgJHN0YWNrTgk6IEZldGNoIE50aCBlbnRyeSBvZiBzdGFjayAoTiA+PSAwKQorICAkc3RhY2sJOiBGZXRjaCBzdGFjayBhZGRyZXNzLgorICAkYXJnTgkJOiBGZXRjaCBmdW5jdGlvbiBhcmd1bWVudC4gKE4gPj0gMCkoKikKKyAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKiopCisgICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKikKKyAgTkFNRT1GRVRDSEFSRzogU2V0IE5BTUUgYXMgdGhlIGFyZ3VtZW50IG5hbWUgb2YgRkVUQ0hBUkcuCisKKyAgKCopIGFOIG1heSBub3QgY29ycmVjdCBvbiBhc21saW5rYWdlZCBmdW5jdGlvbnMgYW5kIGF0IHRoZSBtaWRkbGUgb2YKKyAgICAgIGZ1bmN0aW9uIGJvZHkuCisgICgqKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgorICAoKioqKSB0aGlzIGlzIHVzZWZ1bCBmb3IgZmV0Y2hpbmcgYSBmaWVsZCBvZiBkYXRhIHN0cnVjdHVyZXMuCisKKworUGVyLVByb2JlIEV2ZW50IEZpbHRlcmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFBlci1wcm9iZSBldmVudCBmaWx0ZXJpbmcgZmVhdHVyZSBhbGxvd3MgeW91IHRvIHNldCBkaWZmZXJlbnQgZmlsdGVyIG9uIGVhY2gKK3Byb2JlIGFuZCBnaXZlcyB5b3Ugd2hhdCBhcmd1bWVudHMgd2lsbCBiZSBzaG93biBpbiB0cmFjZSBidWZmZXIuIElmIGFuIGV2ZW50CituYW1lIGlzIHNwZWNpZmllZCByaWdodCBhZnRlciAncDonIG9yICdyOicgaW4ga3Byb2JlX2V2ZW50cywgaXQgYWRkcyBhbiBldmVudAordW5kZXIgdHJhY2luZy9ldmVudHMva3Byb2Jlcy88RVZFTlQ+LCBhdCB0aGUgZGlyZWN0b3J5IHlvdSBjYW4gc2VlICdpZCcsCisnZW5hYmxlZCcsICdmb3JtYXQnIGFuZCAnZmlsdGVyJy4KKworZW5hYmxlZDoKKyAgWW91IGNhbiBlbmFibGUvZGlzYWJsZSB0aGUgcHJvYmUgYnkgd3JpdGluZyAxIG9yIDAgb24gaXQuCisKK2Zvcm1hdDoKKyAgVGhpcyBzaG93cyB0aGUgZm9ybWF0IG9mIHRoaXMgcHJvYmUgZXZlbnQuCisKK2ZpbHRlcjoKKyAgWW91IGNhbiB3cml0ZSBmaWx0ZXJpbmcgcnVsZXMgb2YgdGhpcyBldmVudC4KKworaWQ6CisgIFRoaXMgc2hvd3MgdGhlIGlkIG9mIHRoaXMgcHJvYmUgZXZlbnQuCisKKworRXZlbnQgUHJvZmlsaW5nCistLS0tLS0tLS0tLS0tLS0KKyBZb3UgY2FuIGNoZWNrIHRoZSB0b3RhbCBudW1iZXIgb2YgcHJvYmUgaGl0cyBhbmQgcHJvYmUgbWlzcy1oaXRzIHZpYQorL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfcHJvZmlsZS4KKyBUaGUgZmlyc3QgY29sdW1uIGlzIGV2ZW50IG5hbWUsIHRoZSBzZWNvbmQgaXMgdGhlIG51bWJlciBvZiBwcm9iZSBoaXRzLAordGhlIHRoaXJkIGlzIHRoZSBudW1iZXIgb2YgcHJvYmUgbWlzcy1oaXRzLgorCisKK1VzYWdlIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLQorVG8gYWRkIGEgcHJvYmUgYXMgYSBuZXcgZXZlbnQsIHdyaXRlIGEgbmV3IGRlZmluaXRpb24gdG8ga3Byb2JlX2V2ZW50cworYXMgYmVsb3cuCisKKyAgZWNobyBwOm15cHJvYmUgZG9fc3lzX29wZW4gZGZkPSRhcmcwIGZpbGVuYW1lPSRhcmcxIGZsYWdzPSRhcmcyIG1vZGU9JGFyZzMgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKworIFRoaXMgc2V0cyBhIGtwcm9iZSBvbiB0aGUgdG9wIG9mIGRvX3N5c19vcGVuKCkgZnVuY3Rpb24gd2l0aCByZWNvcmRpbmcKKzFzdCB0byA0dGggYXJndW1lbnRzIGFzICJteXByb2JlIiBldmVudC4gQXMgdGhpcyBleGFtcGxlIHNob3dzLCB1c2VycyBjYW4KK2Nob29zZSBtb3JlIGZhbWlsaWFyIG5hbWVzIGZvciBlYWNoIGFyZ3VtZW50cy4KKworICBlY2hvIHI6bXlyZXRwcm9iZSBkb19zeXNfb3BlbiAkcmV0dmFsID4+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cworCisgVGhpcyBzZXRzIGEga3JldHByb2JlIG9uIHRoZSByZXR1cm4gcG9pbnQgb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoCityZWNvcmRpbmcgcmV0dXJuIHZhbHVlIGFzICJteXJldHByb2JlIiBldmVudC4KKyBZb3UgY2FuIHNlZSB0aGUgZm9ybWF0IG9mIHRoZXNlIGV2ZW50cyB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvPEVWRU5UPi9mb3JtYXQuCisKKyAgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvbXlwcm9iZS9mb3JtYXQKK25hbWU6IG15cHJvYmUKK0lEOiA3NQorZm9ybWF0OgorCWZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOwlvZmZzZXQ6MDsJc2l6ZToyOworCWZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOwlvZmZzZXQ6MjsJc2l6ZToxOworCWZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CW9mZnNldDozOwlzaXplOjE7CisJZmllbGQ6aW50IGNvbW1vbl9waWQ7CW9mZnNldDo0OwlzaXplOjQ7CisJZmllbGQ6aW50IGNvbW1vbl90Z2lkOwlvZmZzZXQ6ODsJc2l6ZTo0OworCisJZmllbGQ6IHVuc2lnbmVkIGxvbmcgaXA7CW9mZnNldDoxNjt0c2l6ZTo4OworCWZpZWxkOiBpbnQgbmFyZ3M7CW9mZnNldDoyNDt0c2l6ZTo0OworCWZpZWxkOiB1bnNpZ25lZCBsb25nIGRmZDsJb2Zmc2V0OjMyO3RzaXplOjg7CisJZmllbGQ6IHVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7CW9mZnNldDo0MDt0c2l6ZTo4OworCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZsYWdzOwlvZmZzZXQ6NDg7dHNpemU6ODsKKwlmaWVsZDogdW5zaWduZWQgbG9uZyBtb2RlOwlvZmZzZXQ6NTY7dHNpemU6ODsKKworcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5pcCwgUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQorCisKKyBZb3UgY2FuIHNlZSB0aGF0IHRoZSBldmVudCBoYXMgNCBhcmd1bWVudHMgYXMgaW4gdGhlIGV4cHJlc3Npb25zIHlvdSBzcGVjaWZpZWQuCisKKyAgZWNobyA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cworCisgVGhpcyBjbGVhcnMgYWxsIHByb2JlIHBvaW50cy4KKworIFJpZ2h0IGFmdGVyIGRlZmluaXRpb24sIGVhY2ggZXZlbnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gRm9yIHRyYWNpbmcgdGhlc2UKK2V2ZW50cywgeW91IG5lZWQgdG8gZW5hYmxlIGl0LgorCisgIGVjaG8gMSA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvbXlwcm9iZS9lbmFibGUKKyAgZWNobyAxID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva3Byb2Jlcy9teXJldHByb2JlL2VuYWJsZQorCisgQW5kIHlvdSBjYW4gc2VlIHRoZSB0cmFjZWQgaW5mb3JtYXRpb24gdmlhIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2UuCisKKyAgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2UKKyMgdHJhY2VyOiBub3AKKyMKKyMgICAgICAgICAgIFRBU0stUElEICAgIENQVSMgICAgVElNRVNUQU1QICBGVU5DVElPTgorIyAgICAgICAgICAgICAgfCB8ICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY4NzU6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPTMgZmlsZW5hbWU9N2ZmZmQxZWM0NDQwIGZsYWdzPTgwMDAgbW9kZT0wCisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2ODc4OiBteXJldHByb2JlOiAoc3lzX29wZW5hdCsweGMvMHhlIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPWZmZmZmZmZmZmZmZmZmZmUKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY4ODU6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPWZmZmZmZjljIGZpbGVuYW1lPTQwNDEzYyBmbGFncz04MDAwIG1vZGU9MWI2CisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2OTE1OiBteXJldHByb2JlOiAoc3lzX29wZW4rMHgxYi8weDFkIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPTMKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY5Njk6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPWZmZmZmZjljIGZpbGVuYW1lPTQwNDFjNiBmbGFncz05ODgwMCBtb2RlPTEwCisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2OTc2OiBteXJldHByb2JlOiAoc3lzX29wZW4rMHgxYi8weDFkIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPTMKKworCisgRWFjaCBsaW5lIHNob3dzIHdoZW4gdGhlIGtlcm5lbCBoaXRzIGFuIGV2ZW50LCBhbmQgPC0gU1lNQk9MIG1lYW5zIGtlcm5lbAorcmV0dXJucyBmcm9tIFNZTUJPTChlLmcuICJzeXNfb3BlbisweDFiLzB4MWQgPC0gZG9fc3lzX29wZW4iIG1lYW5zIGtlcm5lbAorcmV0dXJucyBmcm9tIGRvX3N5c19vcGVuIHRvIHN5c19vcGVuKzB4MWIpLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmYWRmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0CkBAIC0wLDAgKzEsMTM2IEBACitXaGF0IGlzIGh3cG9pc29uPworCitVcGNvbWluZyBJbnRlbCBDUFVzIGhhdmUgc3VwcG9ydCBmb3IgcmVjb3ZlcmluZyBmcm9tIHNvbWUgbWVtb3J5IGVycm9ycworKGBgTUNBIHJlY292ZXJ5JycpLiBUaGlzIHJlcXVpcmVzIHRoZSBPUyB0byBkZWNsYXJlIGEgcGFnZSAicG9pc29uZWQiLAora2lsbCB0aGUgcHJvY2Vzc2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgYXZvaWQgdXNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4KKworVGhpcyBwYXRjaGtpdCBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gdGhlIFZNLgorCitUbyBxdW90ZSB0aGUgb3ZlcnZpZXcgY29tbWVudDoKKworICogSGlnaCBsZXZlbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuIEhhbmRsZXMgcGFnZXMgcmVwb3J0ZWQgYnkgdGhlCisgKiBoYXJkd2FyZSBhcyBiZWluZyBjb3JydXB0ZWQgdXN1YWxseSBkdWUgdG8gYSAyYml0IEVDQyBtZW1vcnkgb3IgY2FjaGUKKyAqIGZhaWx1cmUuCisgKgorICogVGhpcyBmb2N1c3NlcyBvbiBwYWdlcyBkZXRlY3RlZCBhcyBjb3JydXB0ZWQgaW4gdGhlIGJhY2tncm91bmQuCisgKiBXaGVuIHRoZSBjdXJyZW50IENQVSB0cmllcyB0byBjb25zdW1lIGNvcnJ1cHRpb24gdGhlIGN1cnJlbnRseQorICogcnVubmluZyBwcm9jZXNzIGNhbiBqdXN0IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkLiBUaGlzIGltcGxpZXMKKyAqIHRoYXQgaWYgdGhlIGVycm9yIGNhbm5vdCBiZSBoYW5kbGVkIGZvciBzb21lIHJlYXNvbiBpdCdzIHNhZmUgdG8KKyAqIGp1c3QgaWdub3JlIGl0IGJlY2F1c2Ugbm8gY29ycnVwdGlvbiBoYXMgYmVlbiBjb25zdW1lZCB5ZXQuIEluc3RlYWQKKyAqIHdoZW4gdGhhdCBoYXBwZW5zIGFub3RoZXIgbWFjaGluZSBjaGVjayB3aWxsIGhhcHBlbi4KKyAqCisgKiBIYW5kbGVzIHBhZ2UgY2FjaGUgcGFnZXMgaW4gdmFyaW91cyBzdGF0ZXMuIFRoZSB0cmlja3kgcGFydAorICogaGVyZSBpcyB0aGF0IHdlIGNhbiBhY2Nlc3MgYW55IHBhZ2UgYXN5bmNocm9ub3VzIHRvIG90aGVyIFZNCisgKiB1c2VycywgYmVjYXVzZSBtZW1vcnkgZmFpbHVyZXMgY291bGQgaGFwcGVuIGFueXRpbWUgYW5kIGFueXdoZXJlLAorICogcG9zc2libHkgdmlvbGF0aW5nIHNvbWUgb2YgdGhlaXIgYXNzdW1wdGlvbnMuIFRoaXMgaXMgd2h5IHRoaXMgY29kZQorICogaGFzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsLiBHZW5lcmFsbHkgaXQgdHJpZXMgdG8gdXNlIG5vcm1hbCBsb2NraW5nCisgKiBydWxlcywgYXMgaW4gZ2V0IHRoZSBzdGFuZGFyZCBsb2NrcywgZXZlbiBpZiB0aGF0IG1lYW5zIHRoZQorICogZXJyb3IgaGFuZGxpbmcgdGFrZXMgcG90ZW50aWFsbHkgYSBsb25nIHRpbWUuCisgKgorICogU29tZSBvZiB0aGUgb3BlcmF0aW9ucyBoZXJlIGFyZSBzb21ld2hhdCBpbmVmZmljaWVudCBhbmQgaGF2ZSBub24KKyAqIGxpbmVhciBhbGdvcml0aG1pYyBjb21wbGV4aXR5LCBiZWNhdXNlIHRoZSBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBub3QKKyAqIGJlZW4gb3B0aW1pemVkIGZvciB0aGlzIGNhc2UuIFRoaXMgaXMgaW4gcGFydGljdWxhciB0aGUgY2FzZQorICogZm9yIHRoZSBtYXBwaW5nIGZyb20gYSB2bWEgdG8gYSBwcm9jZXNzLiBTaW5jZSB0aGlzIGNhc2UgaXMgZXhwZWN0ZWQKKyAqIHRvIGJlIHJhcmUgd2UgaG9wZSB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzLgorCitUaGUgY29kZSBjb25zaXN0cyBvZiBhIHRoZSBoaWdoIGxldmVsIGhhbmRsZXIgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYywKK2EgbmV3IHBhZ2UgcG9pc29uIGJpdCBhbmQgdmFyaW91cyBjaGVja3MgaW4gdGhlIFZNIHRvIGhhbmRsZSBwb2lzb25lZAorcGFnZXMuCisKK1RoZSBtYWluIHRhcmdldCByaWdodCBub3cgaXMgS1ZNIGd1ZXN0cywgYnV0IGl0IHdvcmtzIGZvciBhbGwga2luZHMKK29mIGFwcGxpY2F0aW9ucy4gS1ZNIHN1cHBvcnQgcmVxdWlyZXMgYSByZWNlbnQgcWVtdS1rdm0gcmVsZWFzZS4KKworRm9yIHRoZSBLVk0gdXNlIHRoZXJlIHdhcyBuZWVkIGZvciBhIG5ldyBzaWduYWwgdHlwZSBzbyB0aGF0CitLVk0gY2FuIGluamVjdCB0aGUgbWFjaGluZSBjaGVjayBpbnRvIHRoZSBndWVzdCB3aXRoIHRoZSBwcm9wZXIKK2FkZHJlc3MuIFRoaXMgaW4gdGhlb3J5IGFsbG93cyBvdGhlciBhcHBsaWNhdGlvbnMgdG8gaGFuZGxlCittZW1vcnkgZmFpbHVyZXMgdG9vLiBUaGUgZXhwZWN0aW9uIGlzIHRoYXQgbmVhciBhbGwgYXBwbGljYXRpb25zCit3b24ndCBkbyB0aGF0LCBidXQgc29tZSB2ZXJ5IHNwZWNpYWxpemVkIG9uZXMgbWlnaHQuCisKKy0tLQorCitUaGVyZSBhcmUgdHdvIChhY3R1YWxseSB0aHJlZSkgbW9kaSBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBjYW4gYmUgaW46CisKK3ZtLm1lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IHN5c2N0bCBzZXQgdG8gemVybzoKKwlBbGwgbWVtb3J5IGZhaWx1cmVzIGNhdXNlIGEgcGFuaWMuIERvIG5vdCBhdHRlbXB0IHJlY292ZXJ5LgorCShvbiB4ODYgdGhpcyBjYW4gYmUgYWxzbyBhZmZlY3RlZCBieSB0aGUgdG9sZXJhbnQgbGV2ZWwgb2YgdGhlCisJTUNFIHN1YnN5c3RlbSkKKworZWFybHkga2lsbAorCShjYW4gYmUgY29udHJvbGxlZCBnbG9iYWxseSBhbmQgcGVyIHByb2Nlc3MpCisJU2VuZCBTSUdCVVMgdG8gdGhlIGFwcGxpY2F0aW9uIGFzIHNvb24gYXMgdGhlIGVycm9yIGlzIGRldGVjdGVkCisJVGhpcyBhbGxvd3MgYXBwbGljYXRpb25zIHdobyBjYW4gcHJvY2VzcyBtZW1vcnkgZXJyb3JzIGluIGEgZ2VudGxlCisJd2F5IChlLmcuIGRyb3AgYWZmZWN0ZWQgb2JqZWN0KQorCVRoaXMgaXMgdGhlIG1vZGUgdXNlZCBieSBLVk0gcWVtdS4KKworbGF0ZSBraWxsCisJU2VuZCBTSUdCVVMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbnRvIHRoZSBjb3JydXB0ZWQgcGFnZS4KKwlUaGlzIGlzIGJlc3QgZm9yIG1lbW9yeSBlcnJvciB1bmF3YXJlIGFwcGxpY2F0aW9ucyBhbmQgZGVmYXVsdAorCU5vdGUgc29tZSBwYWdlcyBhcmUgYWx3YXlzIGhhbmRsZWQgYXMgbGF0ZSBraWxsLgorCistLS0KKworVXNlciBjb250cm9sOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeQorCVNlZSBzeXNjdGwudHh0CisKK3ZtLm1lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwKKwlFbmFibGUgZWFybHkga2lsbCBtb2RlIGdsb2JhbGx5CisKK1BSX01DRV9LSUxMCisJU2V0IGVhcmx5L2xhdGUga2lsbCBtb2RlL3JldmVydCB0byBzeXN0ZW0gZGVmYXVsdAorCWFyZzE6IFBSX01DRV9LSUxMX0NMRUFSOiBSZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9TRVQ6IGFyZzIgZGVmaW5lcyB0aHJlYWQgc3BlY2lmaWMgbW9kZQorCQlQUl9NQ0VfS0lMTF9FQVJMWTogRWFybHkga2lsbAorCQlQUl9NQ0VfS0lMTF9MQVRFOiAgTGF0ZSBraWxsCisJCVBSX01DRV9LSUxMX0RFRkFVTFQ6IFVzZSBzeXN0ZW0gZ2xvYmFsIGRlZmF1bHQKK1BSX01DRV9LSUxMX0dFVAorCXJldHVybiBjdXJyZW50IG1vZGUKKworCistLS0KKworVGVzdGluZzoKKworbWFkdmlzZShNQURWX1BPSVNPTiwgLi4uLikKKwkoYXMgcm9vdCkKKwlQb2lzb24gYSBwYWdlIGluIHRoZSBwcm9jZXNzIGZvciB0ZXN0aW5nCisKKworaHdwb2lzb24taW5qZWN0IG1vZHVsZSB0aHJvdWdoIGRlYnVnZnMKKwkvc3lzL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuCisKK0luamVjdCBod3BvaXNvbiBmYXVsdCBhdCBQRk4gZWNob2VkIGludG8gdGhpcyBmaWxlCisKKworQXJjaGl0ZWN0dXJlIHNwZWNpZmljIE1DRSBpbmplY3RvcgorCit4ODYgaGFzIG1jZS1pbmplY3QsIG1jZS10ZXN0CisKK1NvbWUgcG9ydGFibGUgaHdwb2lzb24gdGVzdCBwcm9ncmFtcyBpbiBtY2UtdGVzdCwgc2VlIGJsb3cuCisKKy0tLQorCitSZWZlcmVuY2VzOgorCitodHRwOi8vaGFsb2JhdGVzLmRlL21jZS1sYzA5LTIucGRmCisJT3ZlcnZpZXcgcHJlc2VudGF0aW9uIGZyb20gTGludXhDb24gMDkKKworZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9jcHUvbWNlL21jZS10ZXN0LmdpdAorCVRlc3Qgc3VpdGUgKGh3cG9pc29uIHNwZWNpZmljIHBvcnRhYmxlIHRlc3RzIGluIHRzcmMpCisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtaW5qZWN0LmdpdAorCXg4NiBzcGVjaWZpYyBpbmplY3RvcgorCisKKy0tLQorCitMaW1pdGF0aW9uczoKKworLSBOb3QgYWxsIHBhZ2UgdHlwZXMgYXJlIHN1cHBvcnRlZCBhbmQgbmV2ZXIgd2lsbC4gTW9zdCBrZXJuZWwgaW50ZXJuYWwKK29iamVjdHMgY2Fubm90IGJlIHJlY292ZXJlZCwgb25seSBMUlUgcGFnZXMgZm9yIG5vdy4KKy0gUmlnaHQgbm93IGh1Z2VwYWdlIHN1cHBvcnQgaXMgbWlzc2luZy4KKworLS0tCitBbmRpIEtsZWVuLCBPY3QgMjAwOQorCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGQ1ZWI4YzEuLjgxZDY4ZDUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02NSw0MyArNjUsNTEgQEAKIAogOC4JSGFwcHkgaGFja2luZy4KIAotCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGVzY3JpcHRpb25zIG9mIHNlY3Rpb24gZW50cmllczoKIAotTWFpbnRhaW5lcnMgTGlzdCAodHJ5IHRvIGxvb2sgZm9yIG1vc3QgcHJlY2lzZSBhcmVhcyBmaXJzdCkKKwlQOiBQZXJzb24gKG9ic29sZXRlKQorCU06IE1haWwgcGF0Y2hlcyB0bzogRnVsbE5hbWUgPGFkZHJlc3NAZG9tYWluPgorCUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQorCVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KKwlUOiBTQ00gdHJlZSB0eXBlIGFuZCBsb2NhdGlvbi4gIFR5cGUgaXMgb25lIG9mOiBnaXQsIGhnLCBxdWlsdCwgc3RnaXQuCisJUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkgICBTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCisJICAgTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KKwkgICBPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCisJCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KKwkgICBPcnBoYW46CU5vIGN1cnJlbnQgbWFpbnRhaW5lciBbYnV0IG1heWJlIHlvdSBjb3VsZCB0YWtlIHRoZQorCQkJcm9sZSBhcyB5b3Ugd3JpdGUgeW91ciBuZXcgY29kZV0uCisJICAgT2Jzb2xldGU6CU9sZCBjb2RlLiBTb21ldGhpbmcgdGFnZ2VkIG9ic29sZXRlIGdlbmVyYWxseSBtZWFucworCQkJaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBiZXR0ZXIgc3lzdGVtIGFuZCB5b3UKKwkJCXNob3VsZCBiZSB1c2luZyB0aGF0LgorCUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgorCSAgIEEgdHJhaWxpbmcgc2xhc2ggaW5jbHVkZXMgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcnkgZmlsZXMuCisJICAgRjoJZHJpdmVycy9uZXQvCWFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgZHJpdmVycy9uZXQKKwkgICBGOglkcml2ZXJzL25ldC8qCWFsbCBmaWxlcyBpbiBkcml2ZXJzL25ldCwgYnV0IG5vdCBiZWxvdworCSAgIEY6CSovbmV0LyoJCWFsbCBmaWxlcyBpbiAiYW55IHRvcCBsZXZlbCBkaXJlY3RvcnkiL25ldAorCSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KKwlYOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKKwkgICBGaWxlcyBleGNsdXNpb25zIGFyZSB0ZXN0ZWQgYmVmb3JlIGZpbGUgbWF0Y2hlcy4KKwkgICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKKwkgICBGOgluZXQvCisJICAgWDoJbmV0L2lwdjYvCisJICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJSzogS2V5d29yZCBwZXJsIGV4dGVuZGVkIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggY29udGVudCBpbiBhCisJICAgcGF0Y2ggb3IgZmlsZS4gIEZvciBpbnN0YW5jZToKKwkgICBLOiBvZl9nZXRfcHJvZmlsZQorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gIm9mX2dldF9wcm9maWxlIgorCSAgIEs6IFxiKHByaW50a3xwcl8oaW5mb3xlcnIpKVxiCisJICAgICAgbWF0Y2hlcyBwYXRjaGVzIG9yIGZpbGVzIHRoYXQgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgd29yZHMKKwkgICAgICBwcmludGssIHByX2luZm8gb3IgcHJfZXJyCisJICAgT25lIHJlZ2V4IHBhdHRlcm4gcGVyIGxpbmUuICBNdWx0aXBsZSBLOiBsaW5lcyBhY2NlcHRhYmxlLgogCiBOb3RlOiBGb3IgdGhlIGhhcmQgb2YgdGhpbmtpbmcsIHRoaXMgbGlzdCBpcyBtZWFudCB0byByZW1haW4gaW4gYWxwaGFiZXRpY2FsCiBvcmRlci4gSWYgeW91IGNvdWxkIGFkZCB5b3Vyc2VsdmVzIHRvIGl0IGluIGFscGhhYmV0aWNhbCBvcmRlciB0aGF0IHdvdWxkIGJlCiBzbyBtdWNoIGVhc2llciBbRWRdCiAKLVA6IFBlcnNvbiAob2Jzb2xldGUpCi1NOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KLUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQotVzogV2ViLXBhZ2Ugd2l0aCBzdGF0dXMvaW5mbwotVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgotUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKK01haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCiAKLQlTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCi0JTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KLQlPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCi0JCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KLQlPcnBoYW46CQlObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKLQkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgotCU9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKLQkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91Ci0JCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KLQotRjogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggd2lsZGNhcmQgcGF0dGVybnMuCi0gICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgotCUY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0Ci0JRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKLQlGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKLSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KLVg6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBOT1QgbWFpbnRhaW5lZCwgc2FtZSBydWxlcyBhcyBGOgotICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCi0gICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKLQlGOgluZXQvCi0JWDoJbmV0L2lwdjYvCi0gICBtYXRjaGVzIGFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgbmV0IGV4Y2x1ZGluZyBuZXQvaXB2Ni8KKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogM0M1MDUgTkVUV09SSyBEUklWRVIKIE06CVBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KQEAgLTE3NCw3ICsxODIsNyBAQAogTToJTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KIEw6CXY5ZnMtZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL3N3aWsubmV0L3Y5ZnMKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9lcmljdmgvdjlmcy5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZXJpY3ZoL3Y5ZnMuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAogRjoJZnMvOXAvCkBAIC04OTgsNyArOTA2LDYgQEAKIEw6CWFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKLUY6CWFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKIAogQVNVUyBBU0IxMDAgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKQEAgLTk5Miw3ICs5OTksNyBAQAogCiBBVE0KIE06CUNoYXMgV2lsbGlhbXMgPGNoYXNAY21mLm5ybC5uYXZ5Lm1pbD4KLUw6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXgtYXRtLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMTIzNywxMSArMTI0NCwxMCBAQAogRjoJZHJpdmVycy9uZXQvdGczLioKIAogQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKLVA6ICAgICAgSmluZyBIdWFuZwotTTogICAgICBodWFuZ2pAYnJvY2FkZS5jb20KLUw6ICAgICAgbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVM6ICAgICAgU3VwcG9ydGVkCi1GOiAgICAgIGRyaXZlcnMvc2NzaS9iZmEvCitNOglKaW5nIEh1YW5nIDxodWFuZ2pAYnJvY2FkZS5jb20+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvYmZhLwogCiBCU0cgKGJsb2NrIGxheWVyIGdlbmVyaWMgc2cgdjQgZHJpdmVyKQogTToJRlVKSVRBIFRvbW9ub3JpIDxmdWppdGEudG9tb25vcmlAbGFiLm50dC5jby5qcD4KQEAgLTE0ODAsNiArMTQ4Niw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjE1MSw3ICsyMTU4LDcgQEAKIEY6CWFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliLwogRjoJYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLypxZS5oCiAKLUZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJJQUwgRFJJVkVSUworRlJFRVNDQUxFIFVTQiBQRVJJUEhFUkFMIERSSVZFUlMKIE06CUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwpAQCAtMjIwMiwxOCArMjIwOSw2IEBACiBGOglmcy9mc2NhY2hlLwogRjoJaW5jbHVkZS9saW51eC9mc2NhY2hlKi5oCiAKLVRSQUNJTkcKLU06CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgotTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgotTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKLVM6CU1haW50YWluZWQKLUY6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAotRjoJYXJjaC8qLyovKi9mdHJhY2UuaAotRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYwotRjoJaW5jbHVkZS8qL2Z0cmFjZS5oIGluY2x1ZGUvdHJhY2UvIGluY2x1ZGUvbGludXgvdHJhY2UqLmgKLUY6CWtlcm5lbC90cmFjZS8KLQogRlVKSVRTVSBGUi1WIChGUlYpIFBPUlQKIE06CURhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CiBTOglNYWludGFpbmVkCkBAIC0yMjcyLDkgKzIyNjcsOCBAQAogRjoJaW5jbHVkZS9hc20tZ2VuZXJpYwogCiBHRU5FUklDIFVJTyBEUklWRVIgRk9SIFBDSSBERVZJQ0VTCi1NOglNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEByZWRoYXQuY29tPgorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgogTDoJa3ZtQHZnZXIua2VybmVsLm9yZwotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Vpby91aW9fcGNpX2dlbmVyaWMuYwogCkBAIC0yODI5LDcgKzI4MjMsNyBAQAogCiBJUE1JIFNVQlNZU1RFTQogTToJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgotTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0zMDA0LDggKzI5OTgsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTM2MjIsNyArMzYxNiw3IEBACiBMOgljb3JldGVhbUBuZXRmaWx0ZXIub3JnCiBXOglodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvCiBXOglodHRwOi8vd3d3LmlwdGFibGVzLm9yZy8KLVQ6CWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2thYmVyL25mLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIqCiBGOglpbmNsdWRlL2xpbnV4L25ldGZpbHRlci8KQEAgLTM2NjcsNyArMzY2MSw5IEBACiBNOgkiRGF2aWQgUy4gTWlsbGVyIiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9lbi9OZXQKK1c6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L25ldGRldi9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtbmV4dC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOgluZXQvCiBGOglpbmNsdWRlL25ldC8KQEAgLTM3ODQsNyArMzc4MCw3IEBACiBGOglkcml2ZXJzL3ZpZGVvL252aWRpYS8KIAogT01BUCBTVVBQT1JUCi1NOgkiVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4iIDx0b255QGF0b21pZGUuY29tPgorTToJVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lm11cnUuY29tL2xpbnV4L29tYXAvCiBXOglodHRwOi8vbGludXgub21hcC5jb20vCkBAIC0zODg5LDYgKzM4ODUsMTUgQEAKIEY6CURvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtb2NvcmVzCiBGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jb3Jlcy5jCiAKK09QRU4gRklSTVdBUkUgQU5EIEZMQVRURU5FRCBERVZJQ0UgVFJFRQorTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcKK1c6CWh0dHA6Ly9mZHQuc2VjcmV0bGFiLmNhCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL29mCitGOglpbmNsdWRlL2xpbnV4L29mKi5oCitLOglvZl9nZXRfcHJvcGVydHkKKwogT1BST0ZJTEUKIE06CVJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgogTDoJb3Byb2ZpbGUtbGlzdEBsaXN0cy5zZi5uZXQKQEAgLTQzMjQsNyArNDMyOSw3IEBACiBSQUxJTksgUlQyWDAwIFdJUkVMRVNTIExBTiBEUklWRVIKIFA6CXJ0MngwMCBwcm9qZWN0CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLUw6CXVzZXJzQHJ0MngwMC5zZXJpYWxtb25rZXkuY29tCitMOgl1c2Vyc0BydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vCiBTOglNYWludGFpbmVkCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2l2ZC9ydDJ4MDAuZ2l0CkBAIC00NTMzLDEyICs0NTM4LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3NjaGVkLmgKIAogU0NPUkUgQVJDSElURUNUVVJFCi1QOglDaGVuIExpcWluCi1NOglsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20KLVA6CUxlbm5veCBXdQotTToJbGVubm94Lnd1QGdtYWlsLmNvbQorTToJQ2hlbiBMaXFpbiA8bGlxaW4uY2hlbkBzdW5wbHVzY3QuY29tPgorTToJTGVubm94IFd1IDxsZW5ub3gud3VAZ21haWwuY29tPgogVzoJaHR0cDovL3d3dy5zdW5wbHVzY3QuY29tCiBTOglTdXBwb3J0ZWQKK0Y6CWFyY2gvc2NvcmUvCiAKIFNDU0kgQ0RST00gRFJJVkVSCiBNOglKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CkBAIC00NjExLDI3ICs0NjE1LDI3IEBACiBGOglkcml2ZXJzL21tYy9ob3N0L3Nkcmljb2hfY3MuYwogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgRFJJVkVSCi1TOiAgICAgT3JwaGFuCi1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwotRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgorUzoJT3JwaGFuCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSwgT1BFTiBGSVJNV0FSRSBCSU5ESU5HUyAoU0RIQ0ktT0YpCiBNOglBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCi1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuKgorRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBTQU1TVU5HIERSSVZFUgogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKIAogU0VDVVJJVFkgU1VCU1lTVEVNCiBNOglKYW1lcyBNb3JyaXMgPGptb3JyaXNAbmFtZWkub3JnPgogTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZyAoc3VnZ2VzdGVkIENjOikKLVQ6CWdpdCBnaXQ6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKIFc6CWh0dHA6Ly9zZWN1cml0eS53aWtpLmtlcm5lbC5vcmcvCiBTOglTdXBwb3J0ZWQKIEY6CXNlY3VyaXR5LwpAQCAtNDY2NywxMiArNDY3MSwxMSBAQAogRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAogCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotUDogICAgIEpheWFtb2hhbiBLYWxsaWNrYWwKLU06ICAgICBqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tCi1MOiAgICAgbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6ICAgICBodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCi1TOiAgICAgU3VwcG9ydGVkCi1GOiAgICAgZHJpdmVycy9zY3NpL2JlMmlzY3NpLworTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZTJpc2NzaS8KIAogU0VSVkVSIEVOR0lORVMgMTBHYnBzIE5JQyAtIEJsYWRlRW5naW5lIDIgRFJJVkVSCiBNOglTYXRoeWEgUGVybGEgPHNhdGh5YXBAc2VydmVyZW5naW5lcy5jb20+CkBAIC00NzI3LDggKzQ3MzAsNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MCoKIAogU0lNUExFIEZJUk1XQVJFIElOVEVSRkFDRSAoU0ZJKQotUDoJTGVuIEJyb3duCi1NOglsZW5iQGtlcm5lbC5vcmcKK006CUxlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPgogTDoJc2ZpLWRldmVsQHNpbXBsZWZpcm13YXJlLm9yZwogVzoJaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1zZmktMi42LmdpdApAQCAtNTE3Niw2ICs1MTc4LDIwIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2NoYXIvdHBtLwogCitUUkFDSU5HCitNOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KK006CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KK006CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKK0Y6CWFyY2gvKi8qLyovZnRyYWNlLmgKK0Y6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKK0Y6CWluY2x1ZGUvKi9mdHJhY2UuaAorRjoJaW5jbHVkZS9saW51eC90cmFjZSouaAorRjoJaW5jbHVkZS90cmFjZS8KK0Y6CWtlcm5lbC90cmFjZS8KKwogVFJJVklBTCBQQVRDSEVTCiBNOglKaXJpIEtvc2luYSA8dHJpdmlhbEBrZXJuZWwub3JnPgogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qaWtvcy90cml2aWFsLmdpdApAQCAtNTY2NCw2ICs1NjgwLDEzIEBACiBGOglkcml2ZXJzL3ZseW5xL3ZseW5xLmMKIEY6CWluY2x1ZGUvbGludXgvdmx5bnEuaAogCitWTVdBUkUgVk1YTkVUMyBFVEhFUk5FVCBEUklWRVIKK006CVNocmV5YXMgQmhhdGV3YXJhIDxzYmhhdGV3YXJhQHZtd2FyZS5jb20+CitNOgkiVk13YXJlLCBJbmMuIiA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvdm14bmV0My8KKwogVk9MVEFHRSBBTkQgQ1VSUkVOVCBSRUdVTEFUT1IgRlJBTUVXT1JLCiBNOglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CkBAIC01NzM1LDggKzU3NTgsNyBAQAogRjoJZHJpdmVycy9zY3NpL3dkNzAwMC5jCiAKIFdJTkJPTkQgQ0lSIERSSVZFUgotUDoJRGF2aWQgSORyZGVtYW4KLU06CWRhdmlkQGhhcmRlbWFuLm51CitNOglEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKIApAQCAtNTc5Myw5ICs1ODE1LDcgQEAKIEY6CWluY2x1ZGUvbGludXgvd205N3h4LmgKIAogV09MRlNPTiBNSUNST0VMRUNUUk9OSUNTIFBNSUMgRFJJVkVSUwotUDoJTWFyayBCcm93bgotTToJYnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20KLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK006CU1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogVDoJZ2l0IGdpdDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9saW51eC0yLjYtYXVkaW9wbHVzCiBXOglodHRwOi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL25vZGUvOAogUzoJU3VwcG9ydGVkCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDMyNjc5MTUuLjgyNzgzNjEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDMyCi1FWFRSQVZFUlNJT04gPSAtcmM0CitFWFRSQVZFUlNJT04gPSAtcmM3CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAppbmRleCBlNDI4MjNlLi43MzEyNmU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0yNiw4ICsyNiw4IEBACiAjZGVmaW5lIEZfR0VUT1dOCTYJLyogIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KLSNkZWZpbmUgRl9TRVRPV05fRVgJMTIKLSNkZWZpbmUgRl9HRVRPV05fRVgJMTMKKyNkZWZpbmUgRl9TRVRPV05fRVgJMTUKKyNkZWZpbmUgRl9HRVRPV05fRVgJMTYKIAogLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KICNkZWZpbmUgRl9SRExDSwkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDUwNzZhODguLjgxNTY4MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTUwLDEyICs1MCwxMiBAQAogcmVnaXN0ZXIgc3RydWN0IHRocmVhZF9pbmZvICpfX2N1cnJlbnRfdGhyZWFkX2luZm8gX19hc21fXygiJDgiKTsKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpICBfX2N1cnJlbnRfdGhyZWFkX2luZm8KIAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAvKiBUaHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbi4gICovCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIDEKICNkZWZpbmUgVEhSRUFEX1NJWkUgKDIqUEFHRV9TSVpFKQogCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMDAKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW1zX2RlbHRhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW1zX2RlbHRhX2RlZmNvbmZpZwppbmRleCA3NjQ3MzI1Li5lOGY3MzgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW1zX2RlbHRhX2RlZmNvbmZpZwpAQCAtNTUsMTAgKzU1LDEwIEBACiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTIyNCw3ICsyMjQsNyBAQAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKICMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1RIVU1CPXkKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIPXkKQEAgLTI0OCw3ICsyNDgsNyBAQAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTI5OSw3ICsyOTksOSBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC02NzAsNyArNjcyLDcgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCkBAIC03ODQsNiArNzg2LDcgQEAKICMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKIAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCkBAIC04MjAsNiArODIzLDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTg5Niw3ICs5MDAsMTMgQEAKICMKICMgU291bmQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfQU1TX0RFTFRBPXkKIAogIwogIyBISUQgRGV2aWNlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCBhZjc0Y2MyLi5iY2ZhZGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDExOjU4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDozMToxOCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDcgKzcxLDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODYsNiArODMsMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTk1LDEzICs5NiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTQsNyArMTE5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSwxOSArMTQwLDIyIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTU2LDI1ICsxNjQsMjcgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfS0lSS1dPT0Q9eQotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTg1LDYgKzE5NSw3IEBACiBDT05GSUdfTUFDSF9NVjg4RjYyODFHVFdfR0U9eQogQ09ORklHX01BQ0hfU0hFRVZBUExVRz15CiBDT05GSUdfTUFDSF9UUzIxOT15CitDT05GSUdfTUFDSF9PUEVOUkRfQkFTRT15CiBDT05GSUdfUExBVF9PUklPTj15CiAKICMKQEAgLTE5NSw3ICsyMDYsNyBAQAogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTEsNiArMjIyLDcgQEAKIENPTkZJR19PVVRFUl9DQUNIRT15CiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQogIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMzUsMTEgKzI0NywxMiBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjU0LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM0NSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODMsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxNyArNDAwLDE4IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CkBAIC00MTQsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDI1LDkgKzQ0NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTEzLDcgQEAKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU0Myw2ICs1NjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU4OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTg3LDYgKzYwNCw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MTQsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjExLDcgKzYzMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MjMsMTEgKzY0MiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NDksNiArNjcxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NzYsNiArNjk5LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjkzLDEzICs3MTcsMTYgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzY4LDYgKzc5NSw5IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4OSw2ICs4MTksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CkBAIC03OTcsMTAgKzgyOCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPXkKQEAgLTgyMCw5ICs4NDgsNyBAQAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldApAQCAtODMyLDYgKzg1OCw4IEBACiAjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg1NSw2ICs4ODMsNyBAQAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC04NzgsMTMgKzkwNywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTQzLDYgKzk3OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05OTgsMTAgKzEwMzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDIzLDExICsxMDU1LDQ3IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNDEsMzMgKzExMDksMjggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE1MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwNiwxMCArMTE2OCwxMiBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQogIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExMjMsOSArMTE4NywxNCBAQAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQogIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQogIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNTAsMTggKzEyMTksMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTI1MiwxMSArMTMyNCwxNCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX01WU0RJTz15CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI2Niw3ICsxMzQxLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CkBAIC0xMjc4LDExICsxMzUzLDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTMxNCw2ICsxMzkyLDcgQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTMyNSw2ICsxNDA0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNjAsOCArMTQ0MCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzksMTAgKzE0NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDU1LDcgKzE1NDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTMwLDYgKzE2MTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTQ3LDYgKzE2MzMsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNTY3LDEyICsxNjU0LDE0IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xNTgxLDI1ICsxNjcwLDEyIEBACiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjIzLDcgKzE2OTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2NjUsMTEgKzE3NDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3MTQsNiArMTc5MSw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwppbmRleCA4ZGE3NWRlLi4yNjRmNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKQEAgLTMwNCw3ICszMDQsNyBAQAogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTBDMDgwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MTAyMDAwMDAKICMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMyLDExNTIwMG44IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwppbmRleCAzNTdkNDAyLi5iM2M4Y2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC05NjksNyArOTY5LDYgQEAKICMKIENPTkZJR19VU0JfT1RHX1VUSUxTPXkKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15CiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKaW5kZXggYjU0YWQyZS4uMTUwZGVhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC02MTEsNyArNjExLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYzNCw3ICs2MzQsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgzNCw3ICs4MzUsMjkgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorQ09ORklHX1NORF9TT0NfVFdMNDAzMD15CisKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDIwLDcgKzEwNDMsMTMgQEAKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwODQsOSArMTExMywxMiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisKICMKICMgRmlsZSBzeXN0ZW1zCiAjCkBAIC0xNDA3LDMgKzE0MzksMTAgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorCisjIGFkZGVkIGJ5IGhhbmQgZm9yIG5vdworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1RXTDQwMzBfVVNCPXkKK0NPTkZJR19NTUNfT01BUF9IUz15CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA4YTRhN2UyLi41YTMwNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xNzAzLDcgKzE3MDMsMTQgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDllMjM4NTIuLjUzODNjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDE0OjA3OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDo1MjoyMSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTY5LDcgKzY3LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTgyLDYgKzc5LDEwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkxLDEzICs5MiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEwOSw3ICsxMTQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTMwLDE5ICsxMzUsMjIgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTEsMjUgKzE1OSwyNyBAQAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT1JJT041WD15CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIE9yaW9uIEltcGxlbWVudGF0aW9ucwpAQCAtMTg3LDYgKzE5Nyw5IEBACiBDT05GSUdfTUFDSF9UUzc4WFg9eQogQ09ORklHX01BQ0hfTVYyMTIwPXkKIENPTkZJR19NQUNIX0VETUlOSV9WMj15CitDT05GSUdfTUFDSF9EMk5FVD15CitDT05GSUdfTUFDSF9CSUdESVNLPXkKK0NPTkZJR19NQUNIX05FVDJCSUc9eQogQ09ORklHX01BQ0hfTVNTMj15CiBDT05GSUdfTUFDSF9XTlI4NTRUPXkKIENPTkZJR19NQUNIX1JEODhGNTE4MUxfR0U9eQpAQCAtMjAyLDcgKzIxNSw3IEBACiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTUsNyArMjI4LDcgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjQwLDExICsyNTMsMTIgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0yNTksMTIgKzI3MywxNCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19DUFU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMwOCw2ICszMjQsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzU2LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM5Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzk0LDExICs0MTMsMTUgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMSw2ICs0MzQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzNyw2ICs1NjEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldApAQCAtNTUyLDcgKzU3Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NzYsMTAgKzYwMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTk2LDYgKzYxOSw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYwNCw2ICs2MjksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjIwLDcgKzY0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzIsMTEgKzY1NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1OCw2ICs2ODYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4NSw2ICs3MTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MDMsMTMgKzczMywxNiBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NzcsNiArODEwLDggQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03OTgsNiArODMzLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKIENPTkZJR19NVjY0M1hYX0VUSD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtODA2LDEwICs4NDIsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzUsNiArODY4LDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtODU1LDEzICs4ODksMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTEyLDYgKzk1Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjcsMjAgKzEwMDgsNTUgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwMzAsNiArMTEwNiw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDQxLDkgKzExMTksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA1NywzMyArMTEzMywyNiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk3LDcgKzExNjYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTYsMTAgKzExODQsMTEgQEAKICMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTEzMCwxMCArMTE5OSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMTYwLDE4ICsxMjMwLDIxIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEyNDgsNyArMTMyMSw2IEBACiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI1OCw3ICsxMzMwLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtMTI2OSwxMSArMTM0MSwxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEzMDYsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEzNDQsOCArMTQyMCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNTgsMTAgKzE0MzcsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj1tCkBAIC0xMzcwLDEwICsxNDQ5LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ0Niw3ICsxNTI4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUzNyw2ICsxNjE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU1Miw2ICsxNjM0LDcgQEAKIENPTkZJR19TQ0hFRFNUQVRTPXkKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU3Miw2ICsxNjU1LDcgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtMTU3OSw2ICsxNjYzLDcgQEAKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKQEAgLTE1ODcsMjUgKzE2NzIsMTIgQEAKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2MjksMjAgKzE3MDEsMTkgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE2NzAsMTEgKzE3NDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTY5MSw3ICsxNzY0LDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC0xNzE5LDYgKzE3OTIsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKaW5kZXggN2Q2MWFlNi4uOTUzYmEwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCi0jIFRodSBKdWwgMTYgMjM6MzY6MTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBTYXQgT2N0IDE3IDIzOjMyOjI0IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKK0NPTkZJR19IQVZFX1RDTT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC00NCwxMSArNDQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODAsMTcgKzgxLDE1IEBACiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEzMyw2ICsxMzIsNyBAQAogIwogIyBTeXN0ZW0gVHlwZQogIworQ09ORklHX01NVT15CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKQEAgLTE0Nyw2ICsxNDcsNyBAQAogIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE2OSwxMSArMTcwLDEzIEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9VMzAwPXkKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBTVC1Fcmljc3NvbiBBQiBVMzAwL1UzMzAvVTMzNS9VMzY1IFBsYXRmb3JtCkBAIC0xOTUsNiArMTk4LDcgQEAKIENPTkZJR19NQUNIX1UzMDBfRFVBTF9SQU09eQogQ09ORklHX1UzMDBfREVCVUc9eQogIyBDT05GSUdfTUFDSF9VMzAwX1NFTUlfSVNfU0hBUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVk9eQogCiAjCiAjIEFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzCkBAIC0yMDcsNyArMjExLDcgQEAKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CkBAIC0yMjIsNiArMjI2LDcgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiBDT05GSUdfQVJNX1ZJQz15CiBDT05GSUdfQVJNX1ZJQ19OUj0yCiBDT05GSUdfQ09NTU9OX0NMS0RFVj15CkBAIC0yNDUsNiArMjUwLDggQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CkBAIC0yNjUsNiArMjcyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKQEAgLTMxMyw2ICszMjEsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzUxLDYgKzM2MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkxLDYgKzQwMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDAyLDkgKzQxMyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NTMsNiArNDY0LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01MjAsNiArNTMyLDcgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTU0MCwxMiArNTUzLDE2IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTk3LDYgKzYxNCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTYyOSw5ICs2NDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY1MywxNiArNjY4LDIxIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNjkwLDEwICs3MTAsMjQgQEAKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKIENPTkZJR19BQjMxMDBfQ09SRT15CitDT05GSUdfQUIzMTAwX09UUD15CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9BQjMxMDA9eQorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzkyLDkgKzgyNiwxMCBAQAogIwogQ09ORklHX01NQ19BUk1NTUNJPXkKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CiAKQEAgLTgyMCwxMCArODU1LDEwIEBACiAjCiAjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19IQ1RPU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTg2Myw2ICs4OTgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtODc4LDI3ICs5MTQsMjUgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQUIzMTAwPXkKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfUEwwMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QTDAzMSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9DT0g5MDEzMzE9eQogQ09ORklHX0RNQURFVklDRVM9eQogCiAjCiAjIERNQSBEZXZpY2VzCiAjCiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEzLDYgKzk0Nyw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTc1LDcgKzEwMTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogCiAjCkBAIC0xMDMzLDYgKzEwNjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NiwxMSArMTEwMSwxMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjEsNiArMTE1OCw3IEBACiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZmQwM2ZiNi4uM2QwY2RkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNDE0LDkgKzQxNCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCisJZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKKwl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7CisjZWxzZQogCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgogCSAgICA6CiAJICAgIDogInIiICgwKSk7CisjZW5kaWYKIH0KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzNiOTExZS4uNmFhYzNmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTk4LDYgKzk4LDkgQEAKIGV4dGVybiBpbnQgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYyhjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICosIGludCk7CiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCxzdGspIGFybV9lbGZfcmVhZF9pbXBsaWVzX2V4ZWMoJihleCksIHN0aykKIAoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncyk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTIGR1bXBfdGFza19yZWdzCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBhNDVhYjVkLi5jMmYxNjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfV0IpKQogCQlkc2IoKTsKIAotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpKSB7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZ2V0X2NwdSgpLCBtbV9jcHVtYXNrKG1tKSkpIHsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKIAkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9VX0ZVTEwpKQpAQCAtMzYwLDYgKzM2MCw3IEBACiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfSV9GVUxMKSkKIAkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAl9CisJcHV0X2NwdSgpOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX0FTSUQpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzcsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDcwMjAyMTcuLjRlNTA2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00MDMsNiArNDAzLDE1IEBACiAjZGVmaW5lIF9fQVJNX05SX3NldF90bHMJCShfX0FSTV9OUl9CQVNFKzUpCiAKIC8qCisgKiAqTk9URSo6IFRoaXMgaXMgYSBnaG9zdCBzeXNjYWxsIHByaXZhdGUgdG8gdGhlIGtlcm5lbC4gIE9ubHkgdGhlCisgKiBfX2t1c2VyX2NtcHhjaGcgY29kZSBpbiBlbnRyeS1hcm12LlMgc2hvdWxkIGJlIGF3YXJlIG9mIGl0cworICogZXhpc3RlbmNlLiAgRG9uJ3QgZXZlciB1c2UgdGhpcyBmcm9tIHVzZXIgY29kZS4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUk1fTlJfY21weGNoZwkJKF9fQVJNX05SX0JBU0UrMHgwMGZmZjApCisjZW5kaWYKKworLyoKICAqIFRoZSBmb2xsb3dpbmcgc3lzY2FsbHMgYXJlIG9ic29sZXRlIGFuZCBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBFQUJJLgogICovCiAjaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCAzMjI0MTBiLi5kMjkwM2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTYwOCwzMyArNjA5LDMzIEBACiAgVEhVTUIoCWFkZAlwYywgcjgJCQkpCiAJbm9wCiAKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMAorCW1vdndfcGMJbHIJCQkJQCBDUCMwCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMxIChGUEUpCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMyIChGUEUpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMwogI2lmZGVmIENPTkZJR19DUlVOQ0gKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM0IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM1IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM2IChNYXZlcmlja0NydW5jaCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzQKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNQotCVcobW92KQlwYywgbHIJCQkJQCBDUCM2CisJbW92d19wYwlscgkJCQlAIENQIzQKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNQorCW1vdndfcGMJbHIJCQkJQCBDUCM2CiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNwotCVcobW92KQlwYywgbHIJCQkJQCBDUCM4Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNworCW1vdndfcGMJbHIJCQkJQCBDUCM4CisJbW92d19wYwlscgkJCQlAIENQIzkKICNpZmRlZiBDT05GSUdfVkZQCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMCAoVkZQKQogCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTEgKFZGUCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEwIChWRlApCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzExIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzEwIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzExIChWRlApCiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTIKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTMKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTQgKERlYnVnKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTIKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTQgKERlYnVnKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKIAogI2lmZGVmIENPTkZJR19ORU9OCiAJLmFsaWduCTYKQEAgLTkwOCwxMCArOTA5LDEwIEBACiAJICogQSBzcGVjaWFsIGdob3N0IHN5c2NhbGwgaXMgdXNlZCBmb3IgdGhhdCAoc2VlIHRyYXBzLmMpLgogCSAqLwogCXN0bWZkCXNwISwge3I3LCBscn0KLQltb3YJcjcsICMweGZmMDAJCUAgMHhmZmYwIGludG8gcjcgZm9yIEVBQkkKLQlvcnIJcjcsIHI3LCAjMHhmMAotCXN3aQkjMHg5ZmZmZjAKKwlsZHIJcjcsID0xZgkJCUAgaXQncyAyMCBiaXRzCisJc3dpCV9fQVJNX05SX2NtcHhjaGcKIAlsZG1mZAlzcCEsIHtyNywgcGN9CisxOgkud29yZAlfX0FSTV9OUl9jbXB4Y2hnCiAKICNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IGFjMzRjMGQuLjdlOWVkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTExMCw2ICsxMTAsMTMgQEAKIAltb3YJXHJkLCBzcCwgbHNyICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwkuZW5kbQogI2Vsc2UJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKIAljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKQEAgLTE0Niw2ICsxNTMsMTQgQEAKIAlsc3IJXHJkLCBccmQsICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwlub3AKKwkuZW5kbQogI2VuZGlmCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUwppbmRleCA4ODVhNzIxLi5iOTUwNWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUwpAQCAtOTcsNyArOTcsNyBAQAogCWJsCXByaW50aGV4OAogCWFkcglyMCwgc3RyX2EyCiAJYmwJcHJpbnRhc2NpaQotCWFkcglyMywgM2YKKwlhZHIJcjMsIDRmCiAJbGRtaWEJcjMsIHtyNCwgcjUsIHI2fQkJQCBnZXQgbWFjaGluZSBkZXNjIGxpc3QKIAlzdWIJcjQsIHIzLCByNAkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cwogCWFkZAlyNSwgcjUsIHI0CQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA3OTBmYmVlLi4wZDk2ZDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMyOCw2ICszMjgsMTUgQEAKIH0KIAogLyoKKyAqIEZpbGwgaW4gdGhlIHRhc2sncyBlbGZyZWdzIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuCisgKi8KK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MpCit7CisJZWxmX2NvcmVfY29weV9yZWdzKGVsZnJlZ3MsIHRhc2tfcHRfcmVncyh0KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBmaWxsIGluIHRoZSBmcGUgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4uLgogICovCiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlcl9mcCAqZnApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTQyM2EzNC4uMmE1NzNkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IFJ1c3NlbGwgS2luZwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjksNiArMjksNyBAQAogICovCiAjZGVmaW5lIFNXSV9TWVNfU0lHUkVUVVJOCSgweGVmMDAwMDAwfChfX05SX3NpZ3JldHVybil8KF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UpKQogI2RlZmluZSBTV0lfU1lTX1JUX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9ydF9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKKyNkZWZpbmUgU1dJX1NZU19SRVNUQVJUCQkoMHhlZjAwMDAwMHxfX05SX3Jlc3RhcnRfc3lzY2FsbHxfX05SX09BQklfU1lTQ0FMTF9CQVNFKQogCiAvKgogICogV2l0aCBFQUJJLCB0aGUgc3lzY2FsbCBudW1iZXIgaGFzIHRvIGJlIGxvYWRlZCBpbnRvIHI3LgpAQCAtNDksNiArNTAsMTggQEAKIH07CiAKIC8qCisgKiBFaXRoZXIgd2Ugc3VwcG9ydCBPQUJJIG9ubHksIG9yIHdlIGhhdmUgRUFCSSB3aXRoIHRoZSBPQUJJCisgKiBjb21wYXQgbGF5ZXIgZW5hYmxlZC4gIEluIHRoZSBsYXRlciBjYXNlIHdlIGRvbid0IGtub3cgaWYKKyAqIHVzZXIgc3BhY2UgaXMgRUFCSSBvciBub3QsIGFuZCBpZiBub3Qgd2UgbXVzdCBub3QgY2xvYmJlciByNy4KKyAqIEFsd2F5cyB1c2luZyB0aGUgT0FCSSBzeXNjYWxsIHNvbHZlcyB0aGF0IGlzc3VlIGFuZCB3b3JrcyBmb3IKKyAqIGFsbCB0aG9zZSBjYXNlcy4KKyAqLworY29uc3QgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3Jlc3RhcnRfY29kZVsyXSA9IHsKKwlTV0lfU1lTX1JFU1RBUlQsCS8qIHN3aQlfX05SX3Jlc3RhcnRfc3lzY2FsbCAqLworCTB4ZTQ5ZGYwMDQsCQkvKiBsZHIJcGMsIFtzcF0sICM0ICovCit9OworCisvKgogICogYXRvbWljYWxseSBzd2FwIGluIHRoZSBuZXcgc2lnbmFsIG1hc2ssIGFuZCB3YWl0IGZvciBhIHNpZ25hbC4KICAqLwogYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQoaW50IHJlc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2xkbWFzaywgb2xkX3NpZ3NldF90IG1hc2spCkBAIC02NDUsMzIgKzY1OCwxMiBAQAogCQkJCXJlZ3MtPkFSTV9wYyAtPSA0OwogI2Vsc2UKIAkJCQl1MzIgX191c2VyICp1c3A7Ci0JCQkJdTMyIHN3aXZhbCA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOwogCi0JCQkJcmVncy0+QVJNX3NwIC09IDEyOworCQkJCXJlZ3MtPkFSTV9zcCAtPSA0OwogCQkJCXVzcCA9ICh1MzIgX191c2VyICopcmVncy0+QVJNX3NwOwogCi0JCQkJLyoKLQkJCQkgKiBFaXRoZXIgd2Ugc3VwcG9ydHMgT0FCSSBvbmx5LCBvciB3ZSBoYXZlCi0JCQkJICogRUFCSSB3aXRoIHRoZSBPQUJJIGNvbXBhdCBsYXllciBlbmFibGVkLgotCQkJCSAqIEluIHRoZSBsYXRlciBjYXNlIHdlIGRvbid0IGtub3cgaWYgdXNlcgotCQkJCSAqIHNwYWNlIGlzIEVBQkkgb3Igbm90LCBhbmQgaWYgbm90IHdlIG11c3QKLQkJCQkgKiBub3QgY2xvYmJlciByNy4gIEFsd2F5cyB1c2luZyB0aGUgT0FCSQotCQkJCSAqIHN5c2NhbGwgc29sdmVzIHRoYXQgaXNzdWUgYW5kIHdvcmtzIGZvcgotCQkJCSAqIGFsbCB0aG9zZSBjYXNlcy4KLQkJCQkgKi8KLQkJCQlzd2l2YWwgPSBzd2l2YWwgLSBfX05SX1NZU0NBTExfQkFTRSArIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0U7Ci0KLQkJCQlwdXRfdXNlcihyZWdzLT5BUk1fcGMsICZ1c3BbMF0pOwotCQkJCS8qIHN3aSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAqLwotCQkJCXB1dF91c2VyKDB4ZWYwMDAwMDAgfCBzd2l2YWwsICZ1c3BbMV0pOwotCQkJCS8qIGxkcglwYywgW3NwXSwgIzEyICovCi0JCQkJcHV0X3VzZXIoMHhlNDlkZjAwYywgJnVzcFsyXSk7Ci0KLQkJCQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdXNwLAotCQkJCQkJICAgKHVuc2lnbmVkIGxvbmcpKHVzcCArIDMpKTsKLQotCQkJCXJlZ3MtPkFSTV9wYyA9IHJlZ3MtPkFSTV9zcCArIDQ7CisJCQkJcHV0X3VzZXIocmVncy0+QVJNX3BjLCB1c3ApOworCQkJCXJlZ3MtPkFSTV9wYyA9IEtFUk5fUkVTVEFSVF9DT0RFOwogI2VuZGlmCiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaCBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAppbmRleCAyN2JlZWNlLi42ZmNmZTgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCkBAIC0xLDEyICsxLDE0IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUnVzc2VsbCBLaW5nLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFJ1c3NlbGwgS2luZy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjZGVmaW5lIEtFUk5fU0lHUkVUVVJOX0NPREUJKENPTkZJR19WRUNUT1JTX0JBU0UgKyAweDAwMDAwNTAwKQorI2RlZmluZSBLRVJOX1JFU1RBUlRfQ09ERQkoS0VSTl9TSUdSRVRVUk5fQ09ERSArIHNpemVvZihzaWdyZXR1cm5fY29kZXMpKQogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzaWdyZXR1cm5fY29kZXNbN107CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3Jlc3RhcnRfY29kZVsyXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IGQzODMxZjYuLjlhYjQxNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtMzcsNiArMzcsMTAgQEAKIAl1MzIgc2N1X2N0cmw7CiAKIAlzY3VfY3RybCA9IF9fcmF3X3JlYWRsKHNjdV9iYXNlICsgU0NVX0NUUkwpOworCS8qIGFscmVhZHkgZW5hYmxlZD8gKi8KKwlpZiAoc2N1X2N0cmwgJiAxKQorCQlyZXR1cm47CisKIAlzY3VfY3RybCB8PSAxOwogCV9fcmF3X3dyaXRlbChzY3VfY3RybCwgc2N1X2Jhc2UgKyBTQ1VfQ1RSTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggZjgzOGYzNi4uM2YzNjFhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IFJ1c3NlbGwgS2luZwogICogIEZyYWdtZW50cyB0aGF0IGFwcGVhciB0aGUgc2FtZSBhcyBsaW51eC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgKEMpIExpbnVzIFRvcnZhbGRzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUyOCw3ICs1MjgsNyBAQAogCSAqIF9fa3VzZXJfY21weGNoZyBjb2RlIGluIGVudHJ5LWFybXYuUyBzaG91bGQgYmUgYXdhcmUgb2YgaXRzCiAJICogZXhpc3RlbmNlLiAgRG9uJ3QgZXZlciB1c2UgdGhpcyBmcm9tIHVzZXIgY29kZS4KIAkgKi8KLQljYXNlIDB4ZmZmMDoKKwljYXNlIE5SKGNtcHhjaGcpOgogCWZvciAoOzspIHsKIAkJZXh0ZXJuIHZvaWQgZG9fRGF0YUFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogCQkgICBpZiBub3QgaW1wbGVtZW50ZWQsIHJhdGhlciB0aGFuIHJhaXNpbmcgU0lHSUxMLiAgVGhpcwogCQkgICB3YXkgdGhlIGNhbGxpbmcgcHJvZ3JhbSBjYW4gZ3JhY2VmdWxseSBkZXRlcm1pbmUgd2hldGhlcgogCQkgICBhIGZlYXR1cmUgaXMgc3VwcG9ydGVkLiAgKi8KLQkJaWYgKG5vIDw9IDB4N2ZmKQorCQlpZiAoKG5vICYgMHhmZmZmKSA8PSAweDdmZikKIAkJCXJldHVybiAtRU5PU1lTOwogCQlicmVhazsKIAl9CkBAIC03NTEsNiArNzUxLDggQEAKIAkgKi8KIAltZW1jcHkoKHZvaWQgKilLRVJOX1NJR1JFVFVSTl9DT0RFLCBzaWdyZXR1cm5fY29kZXMsCiAJICAgICAgIHNpemVvZihzaWdyZXR1cm5fY29kZXMpKTsKKwltZW1jcHkoKHZvaWQgKilLRVJOX1JFU1RBUlRfQ09ERSwgc3lzY2FsbF9yZXN0YXJ0X2NvZGUsCisJICAgICAgIHNpemVvZihzeXNjYWxsX3Jlc3RhcnRfY29kZSkpOwogCiAJZmx1c2hfaWNhY2hlX3JhbmdlKHZlY3RvcnMsIHZlY3RvcnMgKyBQQUdFX1NJWkUpOwogCW1vZGlmeV9kb21haW4oRE9NQUlOX1VTRVIsIERPTUFJTl9DTElFTlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCmluZGV4IDM5YmFmMTEuLjc4NmFjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKQEAgLTI2LDYgKzI2LDE1IEBACiAgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2Muc3Vic2V0LnN3ZGV2LmFiaS9pbmRleC5odG1sCiAgKi8KIAorI2lmICFkZWZpbmVkIChfX0FSTV9FQUJJX18pCisjd2FybmluZyBZb3VyIGNvbXBpbGVyIGRvZXMgbm90IGhhdmUgRUFCSSBzdXBwb3J0LgorI3dhcm5pbmcgICAgQVJNIHVud2luZCBpcyBrbm93biB0byBjb21waWxlIG9ubHkgd2l0aCBFQUJJIGNvbXBpbGVycy4KKyN3YXJuaW5nICAgIENoYW5nZSBjb21waWxlciBvciBkaXNhYmxlIEFSTV9VTldJTkQgb3B0aW9uLgorI2VsaWYgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPD0gMikKKyN3YXJuaW5nIFlvdXIgY29tcGlsZXIgaXMgdG9vIGJ1Z2d5OyBpdCBpcyBrbm93biB0byBub3QgY29tcGlsZSBBUk0gdW53aW5kIHN1cHBvcnQuCisjd2FybmluZyAgICBDaGFuZ2UgY29tcGlsZXIgb3IgZGlzYWJsZSBBUk1fVU5XSU5EIG9wdGlvbi4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKaW5kZXggZDU4MWNmZi4uMzMyYjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCkBAIC04MzgsNyArODM4LDcgQEAKICAqICBXYXRjaGRvZwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPR19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfd2R0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV93ZHQiLAogCS5pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDM0YTk1MDIuLmMyMmRmMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMjUsNiArMjUsOCBAQAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzIwCTB4MDE5OTA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVJMNjQJMHgwMTliMDNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1CTB4ODE5YjA1YTAKKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NU1STAkweDgxOWIwNWEyCS8qIGFrYSA5RzQ1LUVTMiAmIG5vbiBFUyBsb3RzICovCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVFUwkweDgxOWIwNWExCS8qIDlHNDUtRVMgKEVuZ2luZWVyaW5nIFNhbXBsZSkgKi8KICNkZWZpbmUgQVJDSF9JRF9BVDkxQ0FQOQkweDAzOUEwM0EwCiAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMTI4CTB4MzI5OTczYTAKQEAgLTQxLDYgKzQzLDExIEBACiAJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKSAmIH5BVDkxX0NJRFJfVkVSU0lPTik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX2NwdV9mdWxseV9pZGVudGlmeSh2b2lkKQoreworCXJldHVybiBhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKTsKK30KKwogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlNMTEJMHgwMDAwMDAwMQogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlNMTAJMHgwMDAwMDAwMgogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlHNDUJMHgwMDAwMDAwNApAQCAtMTE4LDggKzEyNSwxMCBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUc0NSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoYXQ5MV9jcHVfZnVsbHlfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1RVMpCiAjZWxzZQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MUNBUDkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmOTVkYzE2Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggY2E3MWNmMS4uYTRhN2JlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCQkJICAgIEFSUkFZX1NJWkUoZWRiOTN4eGFfaTJjX2JvYXJkX2luZm8pKTsKIAl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfZWRiOTMwNygpIHx8IG1hY2hpbmVfaXNfZWRiOTMxMigpIHx8CiAJCSAgIG1hY2hpbmVfaXNfZWRiOTMxNSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YQorCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCiAJCQkJICAgIGVkYjkzeHhfaTJjX2JvYXJkX2luZm8sCiAJCQkJICAgIEFSUkFZX1NJWkUoZWRiOTN4eF9pMmNfYm9hcmRfaW5mbykpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggYTNlYzMzZi4uNDY5ZmQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTE3LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCmluZGV4IGQ4M2I4MDQuLmYzNzU3YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMmIyZTdhMS4uNDg5MTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOCw1ICsyOCw2IEBACiAjZGVmaW5lIEJVU19PRkZTRVQJVUwoMHg4MDAwMDAwMCkKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBCVVNfT0ZGU0VUKQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgLSBCVVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fcGZuX3RvX2J1cyh4KQkJKCgoeCkgPDwgUEFHRV9TSElGVCkgKyBCVVNfT0ZGU0VUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYwppbmRleCAxZGE1ZDFjLi4yZTY5MTY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJc2V0dXBfY3B1X3dpbigwLCBLSVJLV09PRF9QQ0lFX0lPX1BIWVNfQkFTRSwgS0lSS1dPT0RfUENJRV9JT19TSVpFLAogCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX0lPLCBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKTsKIAlzZXR1cF9jcHVfd2luKDEsIEtJUktXT09EX1BDSUVfTUVNX1BIWVNfQkFTRSwgS0lSS1dPT0RfUENJRV9NRU1fU0laRSwKLQkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9NRU0sIC0xKTsKKwkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9NRU0sIEtJUktXT09EX1BDSUVfTUVNX0JVU19CQVNFKTsKIAogCS8qCiAJICogU2V0dXAgd2luZG93IGZvciBOQU5EIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCAwYWNiNjFmLi43MTc3YzRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTg0NSw3ICs4NDUsNyBAQAogCXJldHVybiAxNjY2NjY2Njc7CiB9CiAKLXN0YXRpYyB2b2lkIGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBraXJrd29vZF90aW1lcl9pbml0KHZvaWQpCiB7CiAJa2lya3dvb2RfdGNsayA9IGtpcmt3b29kX2ZpbmRfdGNsaygpOwogCW9yaW9uX3RpbWVfaW5pdChJUlFfS0lSS1dPT0RfQlJJREdFLCBraXJrd29vZF90Y2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGE2NDNhODQuLjQ0ZThiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTUsNyArMTUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKGFkZHIgLSBLSVJLV09PRF9QQ0lFX0lPX1BIWVNfQkFTRSkKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSgoYWRkciAtIEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0UpCiAJCQkJCSsgS0lSS1dPT0RfUENJRV9JT19WSVJUX0JBU0UpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAppbmRleCA1NGMxMzI3Li5hMTVjZjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgS0lSS1dPT0RfUkVHU19TSVpFCQlTWl8xTQogCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX1BIWVNfQkFTRQkweGUwMDAwMDAwCisjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX0JVU19CQVNFCTB4ZTAwMDAwMDAKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9NRU1fU0laRQkJU1pfMTI4TQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCmluZGV4IDk0N2RmYjguLjc3NjE3YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKQEAgLTcwLDggKzcwLDIwIEBACiAJa2lya3dvb2RfZ2UwMF9pbml0KCZvcGVucmRfYmFzZV9nZTAwX2RhdGEpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmb3BlbnJkX2Jhc2Vfc2F0YV9kYXRhKTsKIAlraXJrd29vZF9zZGlvX2luaXQoJm9wZW5yZF9iYXNlX212c2Rpb19kYXRhKTsKKworCWtpcmt3b29kX2kyY19pbml0KCk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IG9wZW5yZF9iYXNlX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfb3BlbnJkX2Jhc2UoKSkKKwkJa2lya3dvb2RfcGNpZV9pbml0KCk7CisKKwlyZXR1cm4gMDsKKyB9CitzdWJzeXNfaW5pdGNhbGwob3BlbnJkX2Jhc2VfcGNpX2luaXQpOworCisKIE1BQ0hJTkVfU1RBUlQoT1BFTlJEX0JBU0UsICJNYXJ2ZWxsIE9wZW5SRCBCYXNlIEJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBEaGF2YWwgVmFzYSA8ZGhhdmFsLnZhc2FAZWluZm9jaGlwcy5jb20+ICovCiAJLnBoeXNfaW8JPSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKaW5kZXggZDkwYjlhYS4uYTYwNGIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKQEAgLTkzLDcgKzkzLDcgQEAKIH07CiAKIAotc3RhdGljIGludCBraXJrd29vZF9wY2llX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQorc3RhdGljIGludCBfX2luaXQga2lya3dvb2RfcGNpZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlleHRlcm4gdW5zaWduZWQgaW50IGtpcmt3b29kX2Nsa19jdHJsOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJICovCiAJcmVzWzBdLm5hbWUgPSAiUENJZSBJL08gU3BhY2UiOwogCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JcmVzWzBdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0U7CisJcmVzWzBdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9JT19CVVNfQkFTRTsKIAlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgS0lSS1dPT0RfUENJRV9JT19TSVpFIC0gMTsKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKSkKIAkJcGFuaWMoIlJlcXVlc3QgUENJZSBJTyByZXNvdXJjZSBmYWlsZWRcbiIpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJICovCiAJcmVzWzFdLm5hbWUgPSAiUENJZSBNZW1vcnkgU3BhY2UiOwogCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCXJlc1sxXS5zdGFydCA9IEtJUktXT09EX1BDSUVfTUVNX1BIWVNfQkFTRTsKKwlyZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRTsKIAlyZXNbMV0uZW5kID0gcmVzWzFdLnN0YXJ0ICsgS0lSS1dPT0RfUENJRV9NRU1fU0laRSAtIDE7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzWzFdKSkKIAkJcGFuaWMoIlJlcXVlc3QgUENJZSBNZW1vcnkgcmVzb3VyY2UgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3JlZ3Mtc3dpdGNoLmgKaW5kZXggNTZkMTJlOC4uOTdlOGFjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3JlZ3Mtc3dpdGNoLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3JlZ3Mtc3dpdGNoLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgS1M4Njk1X1NFQzEJCSgweDA0KQkJLyogU3dpdGNoIEVuZ2luZSBDb250cm9sIDEgKi8KICNkZWZpbmUgS1M4Njk1X1NFQzIJCSgweDA4KQkJLyogU3dpdGNoIEVuZ2luZSBDb250cm9sIDIgKi8KIAotI2RlZmluZSBLUzg2OTVfUCh4KV9DKHopCSgweGMwICsgKCgoeCktMSkqMyArICgoeiktMSkpKjQpCS8qIFBvcnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgS1M4Njk1X1NFUFhDWih4LHopCSgweDBjICsgKCgoeCktMSkqMyArICgoeiktMSkpKjQpCS8qIFBvcnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KIAogI2RlZmluZSBLUzg2OTVfU0VQMTJBTgkJKDB4NDgpCQkvKiBQb3J0IDEgJiAyIEF1dG8tTmVnb3RpYXRpb24gKi8KICNkZWZpbmUgS1M4Njk1X1NFUDM0QU4JCSgweDRjKQkJLyogUG9ydCAzICYgNCBBdXRvLU5lZ290aWF0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMWIyMmU0YS4uMDg0NjVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtODQ1LDYgKzg0NSw4IEBACiAJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKIAkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKIAkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UgaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMSkKKwkJCXJldHVybiAiTVY3ODEwMC1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOwogCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGQ3MTViOTIuLjc4OGJkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogI2RlZmluZSBNVjc4MTAwX0RFVl9JRAkJMHg3ODEwCiAjZGVmaW5lIE1WNzgxMDBfUkVWX0EwCQkxCisjZGVmaW5lIE1WNzgxMDBfUkVWX0ExCQkyCiAKICNkZWZpbmUgTVY3ODIwMF9ERVZfSUQJCTB4NzgyMAogI2RlZmluZSBNVjc4MjAwX1JFVl9BMAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggNDA4OTk1MS4uZmY1ZTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC02MzgsOSArNjM4LDkgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCkBAIC02NjUsNyArNjY1LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwppbmRleCBlZTY1ZGRhLi45MDZkNTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwpAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC03OCw4ICs4Myw2IEBACiAJUEM2X1BGX0kyQzJfU0NMLAogCS8qIFNQSTEgKi8KIAlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI3X1BGX0NTUEkxX1NTMSwKLQlQRDI4X1BGX0NTUEkxX1NTMCwKIAlQRDI5X1BGX0NTUEkxX1NDTEssCiAJUEQzMF9QRl9DU1BJMV9NSVNPLAogCVBEMzFfUEZfQ1NQSTFfTU9TSSwKQEAgLTE5Niw2ICsxOTksODYgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF9zcGlfY3NbXSA9IHtHUElPX1BPUlREICsgMjh9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzOF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0ID0gcGNtMDM4X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjbTAzOF9zcGlfY3MpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZGhjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjMV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHNkaGMxX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gTlVMTCwKKwkJLnN1cHBseQk9ICJpbXhfY2FtX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjYW1fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaW5pdF9kYXRhID0gJnNkaGMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0geworCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCisJLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKKwkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY20wMzhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTAzOF9waW5zLCBBUlJBWV9TSVpFKHBjbTAzOF9waW5zKSwKQEAgLTIxOSw2ICszMDIsMTUgQEAKIAkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYzI2MWY1OS4uM2NiN2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMzksNyArMzksNiBAQAogCVBCN19QRl9TRDJfRDMsCiAJUEI4X1BGX1NEMl9DTUQsCiAJUEI5X1BGX1NEMl9DTEssCi0JR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogY2FyZCBkZXRlY3QgKi8KIAkvKiBkaXNwbGF5ICovCiAJUEE1X1BGX0xTQ0xLLAogCVBBNl9QRl9MRDAsCkBAIC0yMjgsNiArMjI3LDcgQEAKIAkJCSJQQ005NzAiKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwppbmRleCBlYjEyZGUxLi42MzUxMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKQEAgLTEsNCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKaW5kZXggOTJhYTRmZC4uZDIzYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTIzLDE5ICs0MSwxMiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCiB7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCiB7CiAJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCBmZTVjNDIxLi5jNTk1MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDA2YmQ2MTguLmIyYTNiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IDhhNTc3ZjMuLmU2YWJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiAzIGNoYW5uZWxzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzBfcmVzb3VyY2VzW10gPSB7CiAJewogCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCiAJICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00NzEsNyArNDcxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8yX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTNfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTNfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDk1LDI1ICs0OTUsMjUgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTAgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzBfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMzUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA3OWYyYmU0Li5hYjg3NDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IGFkNWExMTIuLmJlZGY1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtODEsNiArODEsNyBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CkBAIC04OSw2ICs5MCw3IEBACiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwppbmRleCA0MjkyMGY5Li44YWQ1Y2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTIxOSw2ICsyMTksMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFtc19kZWx0YV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwogCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOwpAQCAtMjMxLDYgKzIzNSw4IEBACiAKIAlvbWFwX3VzYl9pbml0KCZhbXNfZGVsdGFfdXNiX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW1zX2RlbHRhX2RldmljZXMsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2RldmljZXMpKTsKKworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAweDAwMDQsIEFSTV9SU1RDVDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGFtc19kZWx0YV9tb2RlbV9wb3J0c1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBmYjQ3MjM5Li42YzhhNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtNjQsNiArNjQsMTQgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2MyYWJiYi4uY2Q2YzM5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zNzYsNiArMzc2LDI2IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJdW5zaWduZWQgY2hhciByZWc7CisKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCiAJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE1MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2RldmljZXMpKTsKIAkJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggOTBkZDA0My4uNGRlMjU4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0zNDIsNiArMzQyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggODI1NjEzOS4uZDk3MmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yODksNiArMjg5LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10dF9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdHRfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCA4MWI2YmRlLi45ODZiZDRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMzA3LDYgKzMwNywxNCBAQAogc3RhdGljIHZvaWQgX19pbml0CiBvbWFwX3BhbG16NzFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwYWxtejcxX2dwaW9fc2V0dXAoMSk7CiAJb21hcF9tcHVfd2R0X21vZGUoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDAyYzg1Y2EuLjA1NmFlNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMzc3LDYgKzM3NywxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zeDFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzeDFfZGV2aWNlcywgQVJSQVlfU0laRShzeDFfZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBzeDFfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggYzA2ZTdhNS4uMDdiMDc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0xNTIsNiArMTUyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAkvKiBXYXRjaGRvZyAqLwogCWdwaW9fcmVxdWVzdCgwLCAiV2F0Y2hkb2ciKTsKIAkvKiBzbWM5MXggcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggZWZhZjA1My4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCBlYjM3YzQwLi42MDlhNWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtNTgsNiArNTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXRfaXJxKHZvaWQpCiB7CisJb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxKTsKQEAgLTcwLDggKzcyLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IGQxMTBhN2YuLmQ1N2VjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDcwZGY2YjQuLjA4YjA4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDAgPT0gbGVkQSwgRUhDSSBuRU5fVVNCX1BXUiAob3V0LCBhY3RpdmUgbG93KSAqLwogCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIm5FTl9VU0JfUFdSIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOwogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCiAJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKaW5kZXggZTRlYzBjNS4uNGM0ZDdmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwppbmRleCA3ZjZiZjg3Li43NTE5ZWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgpAQCAtMTM0LDUwICsxMzQsNTAgQEAKIH0KIAogc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKLQkvKiBjb2wsIHJvdywgY29kZSAqLworCS8qIHJvdywgY29sLCBjb2RlICovCiAJS0VZKDAsIDAsIEtFWV85KSwKLQlLRVkoMCwgMSwgS0VZXzApLAotCUtFWSgwLCAyLCBLRVlfQkFDS1NQQUNFKSwKLQlLRVkoMCwgMywgS0VZX08pLAotCUtFWSgwLCA0LCBLRVlfUCksCi0JS0VZKDAsIDUsIEtFWV9LKSwKLQlLRVkoMCwgNiwgS0VZX0wpLAotCUtFWSgwLCA3LCBLRVlfRU5URVIpLAotCUtFWSgxLCAwLCBLRVlfOCksCisJS0VZKDAsIDEsIEtFWV84KSwKKwlLRVkoMCwgMiwgS0VZX0kpLAorCUtFWSgwLCAzLCBLRVlfSiksCisJS0VZKDAsIDQsIEtFWV9OKSwKKwlLRVkoMCwgNSwgS0VZX00pLAorCUtFWSgxLCAwLCBLRVlfMCksCiAJS0VZKDEsIDEsIEtFWV83KSwKLQlLRVkoMSwgMiwgS0VZXzYpLAotCUtFWSgxLCAzLCBLRVlfNSksCi0JS0VZKDEsIDQsIEtFWV80KSwKLQlLRVkoMSwgNSwgS0VZXzMpLAotCUtFWSgxLCA2LCBLRVlfMiksCi0JS0VZKDEsIDcsIEtFWV8xKSwKLQlLRVkoMiwgMCwgS0VZX0kpLAotCUtFWSgyLCAxLCBLRVlfVSksCisJS0VZKDEsIDIsIEtFWV9VKSwKKwlLRVkoMSwgMywgS0VZX0gpLAorCUtFWSgxLCA0LCBLRVlfQiksCisJS0VZKDEsIDUsIEtFWV9TUEFDRSksCisJS0VZKDIsIDAsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgyLCAxLCBLRVlfNiksCiAJS0VZKDIsIDIsIEtFWV9ZKSwKLQlLRVkoMiwgMywgS0VZX1QpLAotCUtFWSgyLCA0LCBLRVlfUiksCi0JS0VZKDIsIDUsIEtFWV9FKSwKLQlLRVkoMiwgNiwgS0VZX1cpLAotCUtFWSgyLCA3LCBLRVlfUSksCi0JS0VZKDMsIDAsIEtFWV9KKSwKLQlLRVkoMywgMSwgS0VZX0gpLAotCUtFWSgzLCAyLCBLRVlfRyksCisJS0VZKDIsIDMsIEtFWV9HKSwKKwlLRVkoMiwgNCwgS0VZX1YpLAorCUtFWSgyLCA1LCBLRVlfRk4pLAorCUtFWSgzLCAwLCBLRVlfTyksCisJS0VZKDMsIDEsIEtFWV81KSwKKwlLRVkoMywgMiwgS0VZX1QpLAogCUtFWSgzLCAzLCBLRVlfRiksCi0JS0VZKDMsIDQsIEtFWV9EKSwKLQlLRVkoMywgNSwgS0VZX1MpLAotCUtFWSgzLCA2LCBLRVlfQSksCi0JS0VZKDMsIDcsIEtFWV9MRUZUU0hJRlQpLAotCUtFWSg0LCAwLCBLRVlfTiksCi0JS0VZKDQsIDEsIEtFWV9CKSwKLQlLRVkoNCwgMiwgS0VZX1YpLAotCUtFWSg0LCAzLCBLRVlfQyksCisJS0VZKDMsIDQsIEtFWV9DKSwKKwlLRVkoNCwgMCwgS0VZX1ApLAorCUtFWSg0LCAxLCBLRVlfNCksCisJS0VZKDQsIDIsIEtFWV9SKSwKKwlLRVkoNCwgMywgS0VZX0QpLAogCUtFWSg0LCA0LCBLRVlfWCksCi0JS0VZKDQsIDUsIEtFWV9aKSwKLQlLRVkoNCwgNiwgS0VZX0RPVCksCi0JS0VZKDQsIDcsIEtFWV9DT01NQSksCi0JS0VZKDUsIDAsIEtFWV9NKSwKLQlLRVkoNSwgMSwgS0VZX1NQQUNFKSwKLQlLRVkoNSwgMiwgS0VZX0ZOKSwKKwlLRVkoNSwgMCwgS0VZX0spLAorCUtFWSg1LCAxLCBLRVlfMyksCisJS0VZKDUsIDIsIEtFWV9FKSwKKwlLRVkoNSwgMywgS0VZX1MpLAorCUtFWSg1LCA0LCBLRVlfWiksCisJS0VZKDYsIDAsIEtFWV9MKSwKKwlLRVkoNiwgMSwgS0VZXzIpLAorCUtFWSg2LCAyLCBLRVlfVyksCisJS0VZKDYsIDMsIEtFWV9BKSwKKwlLRVkoNiwgNCwgS0VZX0RPVCksCisJS0VZKDcsIDAsIEtFWV9FTlRFUiksCisJS0VZKDcsIDEsIEtFWV8xKSwKKwlLRVkoNywgMiwgS0VZX1EpLAorCUtFWSg3LCAzLCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNywgNCwgS0VZX0NPTU1BKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBjMWFmNTMyLi5lMzRkOTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL29uZW5hbmQuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMtc21jOTF4Lmg+CiAKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQlyeDUxX3R3bGRhdGEudmF1eDMgPSAmcng1MV92YXV4M19jYW07CiAJCXJ4NTFfdHdsZGF0YS52bW1jMiA9ICZyeDUxX3ZtbWMyOwogCX0KLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xLAorCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyMjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCiAJCQlBUlJBWV9TSVpFKHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSkpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCAxMDAsIE5VTEwsIDApOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwppbmRleCBmOTE5NmMzLi43ODg2OWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKaW5kZXggYjdiMzIyMC4uZWEwMDQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgpAQCAtMjIsOSArMjMsOSBAQAogCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogCiAvKiBab29tMiBoYXMgUXdlcnR5IGtleWJvYXJkKi8KIHN0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CkBAIC0yMTMsNyArMjE0LDggQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHpvb20yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh6b29tMl9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKaW5kZXggYmM1ZDNhYy4uZTJkYmVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCkBAIC03NjksNiArNzY5LDcgQEAKIAkJaWYgKGMtPmNwdSAmIGNwdV9tYXNrKSB7CiAJCQljbGtkZXZfYWRkKCZjLT5sayk7CiAJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KIAogCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IDRlZjdiNGYuLjU4YWZmODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTEzNyw2ICsxMzcsMzYgQEAKIAl9CiB9CiAKKy8qCisgKiBfb21hcDJfY2xrZG1fc2V0X2h3c3VwIC0gc2V0IHRoZSBod3N1cCBpZGxlIHRyYW5zaXRpb24gYml0CisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKiBAZW5hYmxlOiBpbnQgMCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZQorICoKKyAqIEludGVybmFsIGhlbHBlciBmb3IgYWN0dWFsbHkgc3dpdGNoaW5nIHRoZSBiaXQgdGhhdCBjb250cm9scyBod3N1cAorICogaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0uCisgKi8KK3N0YXRpYyB2b2lkIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgaW50IGVuYWJsZSkKK3sKKwl1MzIgdjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAoZW5hYmxlKQorCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKKwkJZWxzZQorCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAoZW5hYmxlKQorCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKKwkJZWxzZQorCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87CisJfSBlbHNlIHsKKwkJQlVHKCk7CisJfQorCisJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCisJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAorCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKK30KIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqX2Nsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNDU2LDggKzQ4Niw2IEBACiAgKi8KIHZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXUzMiB2OwotCiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuOwogCkBAIC00NzMsMTggKzUwMSw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87Ci0JZWxzZQotCQlCVUcoKTsKLQotCi0JY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCi0JCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCSAgICBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDEpOwogCiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKIH0KQEAgLTUwMCw4ICs1MTcsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXUzMiB2OwotCiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuOwogCkBAIC01MTQsMTYgKzUyOSw3IEBACiAJcHJfZGVidWcoImNsb2NrZG9tYWluOiBkaXNhYmxpbmcgYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgZm9yICVzXG4iLAogCQkgY2xrZG0tPm5hbWUpOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZQotCQlCVUcoKTsKLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKQEAgLTU2OSwxMCArNTc1LDE0IEBACiAJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8Ci0JICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpIHsKKwkJLyogRGlzYWJsZSBIVyB0cmFuc2l0aW9ucyB3aGVuIHdlIGFyZSBjaGFuZ2luZyBkZXBzICovCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCQlfY2xrZG1fYWRkX2F1dG9kZXBzKGNsa2RtKTsKLQllbHNlCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDEpOworCX0gZWxzZSB7CiAJCW9tYXAyX2Nsa2RtX3dha2V1cChjbGtkbSk7CisJfQogCiAJcHdyZG1fd2FpdF90cmFuc2l0aW9uKGNsa2RtLT5wd3JkbS5wdHIpOwogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CkBAIC02MjMsMTAgKzYzMywxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV9zbGVlcChjbGtkbSk7CisJfQogCiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCAxNTg3NjgyLi5mODY1NzU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCWdwbWNfY3NfZW5hYmxlX21lbShjcywgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCSpiYXNlID0gcmVzLT5zdGFydDsKIAlncG1jX2NzX3NldF9yZXNlcnZlZChjcywgMSk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggZTNhM2JhZC4uNTZiZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMzAyLDcgKzMwMiw5IEBACiAJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CiAJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwogCW9tYXAyX2Nsa19pbml0KCk7CisjZW5kaWYKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CiAJb21hcF9od21vZF9sYXRlX2luaXQoKTsKIAlvbWFwX3BtX2lmX2luaXQoKTsKIAlvbWFwMl9zZHJjX2luaXQoc2RyY19jczAsIHNkcmNfY3MxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggYzAzNWFkMy4uZWY1N2IzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG1lbSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJbWJveF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghbWJveF9iYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggMzc4YzJmNi4uODk0NjMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC02MzksMTQgKzYzOSwxNSBAQAogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0lPX0VOIHwgT01BUDM0MzBfV0tVUF9FTiwKIAkJCSAgT0NQX01PRCwgT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKIAotCS8qIEVuYWJsZSBHUElPIHdha2V1cHMgaW4gUEVSICovCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CiAJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAotCQkJICBPTUFQMzQzMF9FTl9HUElPNiwgT01BUDM0MzBfUEVSX01PRCwgUE1fV0tFTik7CisJCQkgIE9NQVAzNDMwX0VOX0dQSU82IHwgT01BUDM0MzBfRU5fVUFSVDMsCisJCQkgIE9NQVAzNDMwX1BFUl9NT0QsIFBNX1dLRU4pOwogCS8qIGFuZCBhbGxvdyB0aGVtIHRvIHdha2UgdXAgTVBVICovCiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfR1JQU0VMX0dQSU8yIHwgT01BUDM0MzBfRU5fR1BJTzMgfAogCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzQgfCBPTUFQMzQzMF9FTl9HUElPNSB8Ci0JCQkgIE9NQVAzNDMwX0dSUFNFTF9HUElPNiwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU82IHwgT01BUDM0MzBfRU5fVUFSVDMsCiAJCQkgIE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAzNDMwX1BNX01QVUdSUFNFTCk7CiAKIAkvKiBEb24ndCBhdHRhY2ggSVZBIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IGFlMjE4NjguLjU0ZGZlYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMTA5LDE2ICsxMDksNiBAQAogCQkucmVnc2hpZnQJPSAyLAogCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCi0JCS5pcnEJCT0gNzAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPTUFQMjRYWF9CQVNFX0JBVUQgKiAxNiwKLQl9LCB7Ci0jZW5kaWYKIAkJLmZsYWdzCQk9IDAKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IGFhYzJjZGEuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsMzQgKzI5MiwzNCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNtX3gzMDBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJTzgyX01NQ19JUlEsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPODVfTU1DX1dQLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAorfTsKKworLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKICAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIGlycV9oYW5kbGVyX3QgY21feDMwMF9kZXRlY3RfaW50LAotCQkJICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCisJdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY21feDMwMF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY21feDMwMF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CQk9IDIwLAotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQkJPSBjbV94MzAwX21jaV9pbml0LAotCS5leGl0CQkJPSBjbV94MzAwX21jaV9leGl0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCi0JLmdwaW9fY2FyZF9ybwkJPSAtMSwKLQkuZ3Bpb19wb3dlcgkJPSAtMSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY21feDMwMF9tY2kyX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmRldGVjdF9kZWxheQkJPSAyMCwKIAkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJTzgyX01NQzJfSVJRLAotCS5ncGlvX2NhcmRfcm8JCT0gR1BJTzg1X01NQzJfV1AsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAogCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBkNjk0Y2UyLi42MTEyYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9JUlFTCTEyOAorCiAjZGVmaW5lIElSUV9CSVQobikJKCgobikgLSBQWEFfSVJRKDApKSAmIDB4MWYpCiAjZGVmaW5lIF9JQ01SKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNNUjIgOiAmSUNNUikpCiAjZGVmaW5lIF9JQ0xSKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNMUjIgOiAmSUNMUikpCkBAIC0xMjIsNiArMTI0LDggQEAKIHsKIAlpbnQgaXJxLCBpOwogCisJQlVHX09OKGlycV9uciA+IE1BWF9JTlRFUk5BTF9JUlFTKTsKKwogCXB4YV9pbnRlcm5hbF9pcnFfbnIgPSBpcnFfbnI7CiAKIAlmb3IgKGlycSA9IFBYQV9JUlEoMCk7IGlycSA8IFBYQV9JUlEoaXJxX25yKTsgaXJxICs9IDMyKSB7CkBAIC0xNDksNyArMTUzLDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfaWNtclsyXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2ljbXJbTUFYX0lOVEVSTkFMX0lSUVMvMzJdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfaXByW01BWF9JTlRFUk5BTF9JUlFTXTsKIAogc3RhdGljIGludCBweGFfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtMTU5LDYgKzE2NCw4IEBACiAJCXNhdmVkX2ljbXJbaV0gPSBfSUNNUihpcnEpOwogCQlfSUNNUihpcnEpID0gMDsKIAl9CisJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKKwkJc2F2ZWRfaXByW2ldID0gSVBSKGkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzEsNiArMTc4LDggQEAKIAkJX0lDTVIoaXJxKSA9IHNhdmVkX2ljbXJbaV07CiAJCV9JQ0xSKGlycSkgPSAwOwogCX0KKwlmb3IgKGkgPSAwOyBpIDwgcHhhX2ludGVybmFsX2lycV9ucjsgaSsrKQorCQlJUFIoaSkgPSBzYXZlZF9pcHJbaV07CiAKIAlJQ0NSID0gMTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKaW5kZXggYmIyY2MwZC4uMGI5MjI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKQEAgLTI5MiwxMCArMjkyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHBhbG10Y19rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKIAkua2V5bWFwX2RhdGEJPSAmcGFsbXRjX2tleW1hcF9kYXRhLAotCS5jb2xfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcywKLQkubnVtX2NvbF9ncGlvcwk9IDEyLAotCS5yb3dfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcywKLQkubnVtX3Jvd19ncGlvcwk9IDQsCisJLnJvd19ncGlvcwk9IHBhbG10Y19rZXlwYWRfcm93X2dwaW9zLAorCS5udW1fcm93X2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcyksCisJLmNvbF9ncGlvcwk9IHBhbG10Y19rZXlwYWRfY29sX2dwaW9zLAorCS5udW1fY29sX2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcyksCiAJLmFjdGl2ZV9sb3cJPSAxLAogCiAJLmRlYm91bmNlX21zCQk9IDIwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggZWU4ZDYwMy4uM2RhNDVkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CkBAIC0zNzUsNiArMzc2LDQzIEBACiB9OwogCiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBzcGl0el9ncGlvX2tleXNbXSA9IHsKKwl7CisJCS50eXBlCT0gRVZfUFdSLAorCQkuY29kZQk9IEtFWV9TVVNQRU5ELAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fT05fS0VZLAorCQkuZGVzYwk9ICJPbi9PZmYiLAorCQkud2FrZXVwCT0gMSwKKwl9LAorCS8qIFR3byBidXR0b25zIGRldGVjdGluZyB0aGUgbGlkIHN0YXRlICovCisJeworCQkudHlwZQk9IEVWX1NXLAorCQkuY29kZQk9IDAsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19TV0EsCisJCS5kZXNjCT0gIu+7v0Rpc3BsYXkgRG93biIsCisJfSwKKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMSwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQiwKKwkJLmRlc2MJPSAi77u/TGlkIENsb3NlZCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBzcGl0el9ncGlvX2tleXMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShzcGl0el9ncGlvX2tleXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpfZ3Bpb19rZXlzX2RldmljZSA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X2dwaW9fa2V5c19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCisKIC8qCiAgKiBTcGl0eiBMRURzCiAgKi8KQEAgLTY4OSw2ICs3MjcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzcGl0enNjb29wX2RldmljZSwKIAkmc3BpdHprYmRfZGV2aWNlLAorCSZzcGl0el9ncGlvX2tleXNfZGV2aWNlLAogCSZzcGl0emxlZF9kZXZpY2UsCiAJJnNoYXJwc2xfbmFuZF9kZXZpY2UsCiAJJnNoYXJwc2xfcm9tX2RldmljZSwKQEAgLTc0MCwxMSArNzc5LDM0IEBACiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQUtJVEEpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQorc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzaGFycHNsX2FraXRhX2JidCA9IHsKKwkub3B0aW9ucyA9IDAsCisJLm9mZnMgPSA0LAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7CisJLmVjY2J5dGVzID0gMjQsCisJLmVjY3BvcyA9IHsKKwkJICAgMHg1LCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywgMHgxNSwgMHgxMSwKKwkJICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkJICAgMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCisJLm9vYmZyZWUgPSB7ezB4MDgsIDB4MDl9fQorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUElUWikgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9CT1JaT0kpCiBzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaW5pdCh2b2lkKQogewogCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IFNQSVRaX0dQSU9fSVJfT047CiAKKwlpZiAobWFjaGluZV9pc19ib3J6b2koKSkgeworCQlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5iYWRibG9ja19wYXR0ZXJuID0gJnNoYXJwc2xfYWtpdGFfYmJ0OworCQlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CisJfQorCiAJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnNwaXR6X3BjbWNpYV9jb25maWc7CiAKIAljb21tb25faW5pdCgpOwpAQCAtNzY5LDIyICs4MzEsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNoYXJwc2xfYWtpdGFfYmJ0ID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDQsCi0JLmxlbiA9IDEsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgYWtpdGFfb29iaW5mbyA9IHsKLQkuZWNjYnl0ZXMgPSAyNCwKLQkuZWNjcG9zID0gewotCQkgICAweDUsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LCAweDE1LCAweDExLAotCQkgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAotCQkgICAweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3fSwKLQkub29iZnJlZSA9IHt7MHgwOCwgMHgwOX19Ci19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgYWtpdGFfaW5pdCh2b2lkKQogewogCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IEFLSVRBX0dQSU9fSVJfT047CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggZGZjOWIwYi4uYzQ4ZTFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtNzAsNiArNzAsOCBAQAogCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEJYIHBsYXRmb3JtIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFISUdIX1BIWVNfT0ZGU0VUCisJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCiAKQEAgLTgyLDYgKzg0LDcgQEAKIAkgIDB4NzAwMDAwMDAsIDI1Nk1CIG9mIHdoaWNoIGJlaW5nIG1pcnJvcmVkIGF0IDB4MDAwMDAwMDAuIElmCiAJICB0aGUgYm9hcmQgc3VwcG9ydHMgNTEyTUIgb2YgUkFNLCB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlCiAJICBtZW1vcnkgdG8gYmUgYWNjZXNzZWQgY29udGlndW91c2x5IGF0IHRoZSBoaWdoIHBoeXNpY2FsCi0JICBvZmZzZXQuCisJICBvZmZzZXQuIE9uIHRoZSBQQlggYm9hcmQsIGRpc2FibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgMUdCIG9mCisJICBSQU0gdG8gYmUgdXNlZCB3aXRoIFNQQVJTRU1FTS4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBhMjA4M2I2Li45ZjI5MzQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtNTksNiArNTksMjUgQEAKIC8qIHVzZWQgYnkgZW50cnktbWFjcm8uUyBhbmQgcGxhdHNtcC5jICovCiB2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwogCisjaWZkZWYgQ09ORklHX1pPTkVfRE1BCisvKgorICogQWRqdXN0IHRoZSB6b25lcyBpZiB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIGZvciBETUEgYWNjZXNzLgorICovCit2b2lkIF9faW5pdCByZWFsdmlld19hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nICpob2xlKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX3NpemUgPSBTWl8yNTZNID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcmVhbHZpZXdfcGJ4KCkgfHwgbm9kZSB8fCAoc2l6ZVswXSA8PSBkbWFfc2l6ZSkpCisJCXJldHVybjsKKworCXNpemVbWk9ORV9OT1JNQUxdID0gc2l6ZVswXSAtIGRtYV9zaXplOworCXNpemVbWk9ORV9ETUFdID0gZG1hX3NpemU7CisJaG9sZVtaT05FX05PUk1BTF0gPSBob2xlWzBdOworCWhvbGVbWk9ORV9ETUFdID0gMDsKK30KKyNlbmRpZgorCiAvKgogICogVGhpcyBpcyB0aGUgUmVhbFZpZXcgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uICBUaGlzIGhhcwogICogYSByZXNvbHV0aW9uIG9mIDQxLjducywgYW5kIGEgbWF4aW11bSB2YWx1ZSBvZiBhYm91dCAxNzlzLgpAQCAtNTQzLDcgKzU2Miw3IEBACiAJZmItPnBhbmVsCQk9IHJlYWx2aWV3X2NsY2RfcGFuZWwoKTsKIAogCWZiLT5mYi5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoJmZiLT5kZXYtPmRldiwgZnJhbWVzaXplLAotCQkJCQkJICAgICZkbWEsIEdGUF9LRVJORUwpOworCQkJCQkJICAgICZkbWEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWZiLT5mYi5zY3JlZW5fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IHVuYWJsZSB0byBtYXAgZnJhbWVidWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc4OCwzICs4MDcsMjQgQEAKIAlyZWFsdmlld19jbG9ja3NvdXJjZV9pbml0KCk7CiAJcmVhbHZpZXdfY2xvY2tldmVudHNfaW5pdCh0aW1lcl9pcnEpOwogfQorCisvKgorICogU2V0dXAgdGhlIG1lbW9yeSBiYW5rcy4KKyAqLwordm9pZCByZWFsdmlld19maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmZyb20sCisJCSAgICBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbykKK3sKKwkvKgorCSAqIE1vc3QgUmVhbFZpZXcgcGxhdGZvcm1zIGhhdmUgNTEyTUIgY29udGlndW91cyBSQU0gYXQgMHg3MDAwMDAwMC4KKwkgKiBIYWxmIG9mIHRoaXMgaXMgbWlycm9yZWQgYXQgMC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAweDcwMDAwMDAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzUxMk07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworI2Vsc2UKKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAppbmRleCA0NmNkNmFjLi43ODFiY2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAKICNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSxidXNpZCxiYXNlLHBsYXQpCQkJXApAQCAtNDQsNiArNDUsOCBAQAogCS8qIC5kbWEJCT0gYmFzZSMjX0RNQSwqLwkJCQlcCiB9CiAKK3N0cnVjdCBtYWNoaW5lX2Rlc2M7CisKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ZsYXNoX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2NmX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2U7CkBAIC02MSw1ICs2NCw4IEBACiBleHRlcm4gaW50IHJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgbnVtKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKK2V4dGVybiB2b2lkIHJlYWx2aWV3X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQkJICAgY2hhciAqKmZyb20sIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKTsKK2V4dGVybiB2b2lkICgqcmVhbHZpZXdfcmVzZXQpKGNoYXIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKaW5kZXggOThmOGU3ZS4uMzRiODBiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKQEAgLTczLDQgKzczLDkgQEAKICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UJCTB4MTAwNDEwMDAgLyogR0lDIGRpc3RyaWJ1dG9yLCBvbiBGUEdBICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9MMjIwX0JBU0UJCTB4MTAxMTAwMDAgLyogTDIyMCByZWdpc3RlcnMgKi8KIAorLyoKKyAqIENvbnRyb2wgcmVnaXN0ZXIgU1lTX1JFU0VUQ1RMIGlzIHNldCB0byAxIHRvIGZvcmNlIGEgc29mdCByZXNldAorICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9TWVNfTE9DS1ZBTF9SU1RDVEwgICAgMHgwMTAwCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCMTE3Nl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCmluZGV4IGYwZDY4ZTAuLjdhYmY5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCkBAIC04MSw0ICs4MSwxNiBAQAogI2RlZmluZSBSRUFMVklFV19UQzExTVBfR0lDX0RJU1RfQkFTRQkJMHgxRjAwMTAwMAkvKiBUZXN0IGNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRQkJMHgxRjAwMjAwMAkvKiBMMjIwIHJlZ2lzdGVycyAqLwogCisgLyoKKyAqIFZhbHVlcyBmb3IgUkVBTFZJRVdfU1lTX1JFU0VUX0NUUkwKKyAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0lOSVQgICAweDAyCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9ETExSRVNFVCAgICAgMHgwMworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX1BPUiAgICAgICAgICAweDA1CisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9Eb0MgICAgICAgICAgMHgwNgorCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQorCiAjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAyOTNjMzAwLi4yNDE3YmJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjksNCArMjksNTMgQEAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfWk9ORV9ETUEpCitleHRlcm4gdm9pZCByZWFsdmlld19hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nICpob2xlKTsKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZSkgXAorCXJlYWx2aWV3X2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArIFNaXzI1Nk0gLSAxKQorI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFNaXzI1Nk0pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKworLyoKKyAqIFNwYXJzZW1lbSBkZWZpbml0aW9ucyBmb3IgUmVhbFZpZXcgUEJYLgorICoKKyAqIFRoZSBSZWFsVmlldyBQQlggYm9hcmQgaGFzIGFub3RoZXIgYmxvY2sgb2YgNTEyTUIgb2YgUkFNIGF0IDB4MjAwMDAwMDAsCisgKiBob3dldmVyIG9ubHkgdGhlIGJsb2NrIGF0IDB4NzAwMDAwMDAgKG9yIHRoZSAyNTZNQiBtaXJyb3IgYXQgMHgwMDAwMDAwMCkKKyAqIG1heSBiZSB1c2VkIGZvciBETUEuCisgKgorICogVGhlIG1hY3JvcyBiZWxvdyBkZWZpbmUgYSBzZWN0aW9uIHNpemUgb2YgMjU2TUIgYW5kIGEgbm9uLWxpbmVhciB2aXJ0dWFsIHRvCisgKiBwaHlzaWNhbCBtYXBwaW5nOgorICoKKyAqIDI1Nk1CIEAgMHgwMDAwMDAwMCAtPiBQQUdFX09GRlNFVAorICogNTEyTUIgQCAweDIwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMAorICogMjU2TUIgQCAweDgwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMAorICovCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKKyNlcnJvciAiU1BBUlNFTUVNIG5vdCBhdmFpbGFibGUgd2l0aCBSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUIgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMgorI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyOAorCisvKiBiYW5rIHBhZ2Ugb2Zmc2V0cyAqLworI2RlZmluZSBQQUdFX09GRlNFVDEJKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKKyNkZWZpbmUgUEFHRV9PRkZTRVQyCShQQUdFX09GRlNFVCArIDB4MzAwMDAwMDApCisKKyNkZWZpbmUgX19waHlzX3RvX3ZpcnQocGh5cykJCQkJCQlcCisJKChwaHlzKSA+PSAweDgwMDAwMDAwID8JKHBoeXMpIC0gMHg4MDAwMDAwMCArIFBBR0VfT0ZGU0VUMiA6CVwKKwkgKHBoeXMpID49IDB4MjAwMDAwMDAgPwkocGh5cykgLSAweDIwMDAwMDAwICsgUEFHRV9PRkZTRVQxIDoJXAorCSAocGh5cykgKyBQQUdFX09GRlNFVCkKKworI2RlZmluZSBfX3ZpcnRfdG9fcGh5cyh2aXJ0KQkJCQkJCVwKKwkgKCh2aXJ0KSA+PSBQQUdFX09GRlNFVDIgPyAodmlydCkgLSBQQUdFX09GRlNFVDIgKyAweDgwMDAwMDAwIDoJXAorCSAgKHZpcnQpID49IFBBR0VfT0ZGU0VUMSA/ICh2aXJ0KSAtIFBBR0VfT0ZGU0VUMSArIDB4MjAwMDAwMDAgOglcCisJICAodmlydCkgLSBQQUdFX09GRlNFVCkKKworI2VuZGlmCS8qIENPTkZJR19TUEFSU0VNRU0gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCBjOGY1MDgzLi40ZjQ2YmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTExOSwxOSArMTE5LDYgQEAKICNkZWZpbmUgUkVBTFZJRVdfU1lTX1RFU1RfT1NDMyAgICAgICAgICAgICAgIChSRUFMVklFV19TWVNfQkFTRSArIFJFQUxWSUVXX1NZU19URVNUX09TQzNfT0ZGU0VUKQogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0M0ICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDNF9PRkZTRVQpCiAKLS8qIAotICogVmFsdWVzIGZvciBSRUFMVklFV19TWVNfUkVTRVRfQ1RSTAotICovCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUiAgICAweDAxCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0lOSVQgICAweDAyCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX1BMTFJFU0VUICAgICAweDA0Ci0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX1BPUiAgICAgICAgICAweDA1Ci0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2Ci0KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfTEVEICAgICAgICAgKDEgPDwgMCkKLQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBSZWFsVmlldyBjb250cm9sIHJlZ2lzdGVycwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTMsNyArMTQwLDcgQEAKICAqICAgICBTWVNfQ0xELCBTWVNfQk9PVENTCiAgKi8KICNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tfTE9DS0VEICAgICgxIDw8IDE2KQotI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4RkZGRgkJLyogd3JpdGUgMHhBMDVGIHRvIGVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KKyNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSwkweEEwNUYJICAgICAgIC8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KIAogLyoKICAqIFJFQUxWSUVXX1NZU19GTEFTSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAxYTE1YTQ0Li5hMzBmMmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAKK3ZvaWQgKCpyZWFsdmlld19yZXNldCkoY2hhciBtb2RlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCS8qCkBAIC0zNiwxNiArMzgsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOwotCXVuc2lnbmVkIGludCB2YWw7Ci0KIAkvKgogCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCiAJICogaW4gdGhlIHN5c3RlbSBGUEdBCiAJICovCi0JdmFsID0gX19yYXdfcmVhZGwoaGRyX2N0cmwpOwotCXZhbCB8PSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFI7Ci0JX19yYXdfd3JpdGVsKHZhbCwgaGRyX2N0cmwpOworCWlmIChyZWFsdmlld19yZXNldCkKKwkJcmVhbHZpZXdfcmVzZXQobW9kZSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBhODg0NThiLi4wMDkyNjU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtMTQ2LDExICsxNDYsOCBAQAogCSAqIHJlZ2lzdGVyLiBUaGUgQm9vdE1vbml0b3Igd2FpdHMgZm9yIHRoaXMgcmVnaXN0ZXIgdG8gYmVjb21lCiAJICogbm9uLXplcm8uCiAJICovCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUIDB4MzAKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQgMHgzNAogCV9fcmF3X3dyaXRlbChCU1lNKHZpcnRfdG9fcGh5cyhyZWFsdmlld19zZWNvbmRhcnlfc3RhcnR1cCkpLAotCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKwotCQkgICAgIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUKTsKKwkJICAgICBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0ZMQUdTU0VUKSk7CiAKIAltYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCmluZGV4IDFkNjVlNjQuLjkxN2Y4Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTQxNSw2ICs0MTUsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfRUJfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19FQl9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X2ViX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19lYl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IDI4MTdmZTAuLjdmYjcyNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMjkwLDYgKzI5MCwyOCBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BiMTE3Nl90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGIxMTc2X3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpyc3RfaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLLCByc3RfaGRyX2N0cmwpOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMLCBoZHJfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywKKwkJCQkgIHN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipmcm9tLAorCQkJCSAgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisJLyoKKwkgKiBSZWFsVmlldyBQQjExNzYgb25seSBoYXMgMTI4TUIgb2YgUkFNIG1hcHBlZCBhdCAwLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzEyOE07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTMxMyw2ICszMzUsNyBAQAogI2lmZGVmIENPTkZJR19MRURTCiAJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CiAjZW5kaWYKKwlyZWFsdmlld19yZXNldCA9IHJlYWx2aWV3X3BiMTE3Nl9yZXNldDsKIH0KIAogTUFDSElORV9TVEFSVChSRUFMVklFV19QQjExNzYsICJBUk0tUmVhbFZpZXcgUEIxMTc2IikKQEAgLTMyMCw2ICszNDMsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BiMTE3Nl9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiMTE3Nl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGIxMTc2X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggOTQ2ODBmYy4uOWJiYmZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKQEAgLTMzMSw2ICszNDcsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMW1wX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExbXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IDk0MWJlYjIuLmZlODYxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCQThfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJhOF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJhOF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCmluZGV4IDdlNGJjNmMuLmVjMzk0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwpAQCAtMzA0LDYgKzMwNCwyNiBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BieF90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGJ4X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQkJICAgICAgIGNoYXIgKipmcm9tLCBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbykKK3sKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisJLyoKKwkgKiBNZW1vcnkgY29uZmlndXJhdGlvbiB3aXRoIFNQQVJTRU1FTSBlbmFibGVkIG9uIFJlYWxWaWV3IFBCWCAoc2VlCisJICogYXNtL21hY2gvbWVtb3J5LmggZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+YmFua1sxXS5zdGFydCA9IDB4MjAwMDAwMDA7CisJbWVtaW5mby0+YmFua1sxXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5iYW5rWzJdLnN0YXJ0ID0gMHg4MDAwMDAwMDsKKwltZW1pbmZvLT5iYW5rWzJdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMzsKKyNlbHNlCisJcmVhbHZpZXdfZml4dXAobWRlc2MsIHRhZ3MsIGZyb20sIG1lbWluZm8pOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzQ1LDYgKzM2NSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQlhfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQlhfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKKwkuZml4dXAJCT0gcmVhbHZpZXdfcGJ4X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJ4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYnhfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwppbmRleCA3OTc0YWZjLi45NjY0ZTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby1mbnMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggYzNhMjYyOS4uOTJlMjY4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0xMTAsNiArMTEwLDggQEAKIAkJCQkJICAgICogd2FpdGluZyBmb3IgcmVsb2FkcyAqLwogI2RlZmluZSBTM0MyNDEwX0RNQUZfQVVUT1NUQVJUICAgICgxPDwxKSAgIC8qIGF1dG8tc3RhcnQgaWYgYnVmZmVyIHF1ZXVlZCAqLwogCisjZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkoMSA8PCAyKQkvKiBubyBjaXJjdWxhciBkbWEgc3VwcG9ydCAqLworCiAvKiBkbWEgYnVmZmVyICovCiAKIHN0cnVjdCBzM2MyNDEwX2RtYV9idWY7CkBAIC0xOTQsNCArMTk2LDkgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGRtYV9kZXZpY2VfdDsKIAorc3RhdGljIGlubGluZSBib29sIHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwppbmRleCBkN2JiYTkxLi5hOGI2OWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwpAQCAtMTAzLDYgKzEwMyw3IEBACiAJc2VsZWN0IExFRFNfVFJJR0dFUl9CQUNLTElHSFQKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1MzQzI0WFhfVURBMTM0WAogCXNlbGVjdCBTM0NfREVWX05BTkQKKwlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHN1cHBvcnQgZm9yIHRoZSBNSU5JMjQ0MC4gSXMgYSAxMGNtIHggMTBjbSBib2FyZAogCSAgYXZhaWxhYmxlIHZpYSB2YXJpb3VzIHNvdXJjZXMuIEl0IGNhbiBjb21lIHdpdGggYSAzLjUiIG9yIDciIHRvdWNoIExDRC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCmluZGV4IGVjNzFhNjkuLjFjMzM4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJLnR5cGUJCT0gKFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUCB8XAogCQkJICAgUzNDMjQxMF9MQ0RDT04xX1RGVCkKIAotc3RydWN0IHMzYzI0MTBmYl9kaXNwbGF5IG1pbmkyNDQwX2xjZF9jZmdbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CS8qIG1pbmkyNDQwICsgMy41IiBURlQgKyB0b3VjaHNjcmVlbiAqLwogCQlfTENEX0RFQ0xBUkUoCiAJCQk3LAkJCS8qIFRoZSAzLjUgaXMgcXVpdGUgZmFzdCAqLwpAQCAtMTkxLDcgKzE5MSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BDQ09OX01BU0soeCkJKDMgPDwgKCh4KSAqIDIpKQogI2RlZmluZSBTM0MyNDEwX0dQRENPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKIAotc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gbWluaTI0NDBfZmJfaW5mbyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKIAkuZGlzcGxheXMJID0gJm1pbmkyNDQwX2xjZF9jZmdbMF0sIC8qIG5vdCBjb25zdGFudCEgc2VlIGluaXQgKi8KIAkubnVtX2Rpc3BsYXlzCSA9IDEsCiAJLmRlZmF1bHRfZGlzcGxheSA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCAxMDY3NjE5Li42NzIzODYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTU4LDEyICs1OCw5IEBACiAJRE1BQ0hfTUFYCQkvKiB0aGUgZW5kICovCiB9OwogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3N0YXRpYyBfX2lubGluZV9fIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKIHsKLQkvKiB3ZSB3aWxsIGJlIHN1cHBvcnRpbmcgY2lydWNsYXIgYnVmZmVycyBhcyBzb29uIGFzIHdlIGhhdmUgRE1BCi0JICogZW5naW5lIHN1cHBvcnQuCi0JICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwppbmRleCA1M2ZjM2ZmLi43MmQ0YjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAogCXNlbGVjdCBSRUdVTEFUT1IKIAlzZWxlY3QgUkVHVUxBVE9SX1dNODM1MAorCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAogCXNlbGVjdCBNRkRfV004MzUwX0kyQwogCXNlbGVjdCBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBlYTUxZGJlLi45ZjFhMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTMyMCw2ICszMjAsOSBAQAogewogCWludCBpOwogCisJLyogQ29uZmlndXJlIHRoZSBJUlEgbGluZSAqLworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUE4oMTIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwogCS8qIEluc3RhbnRpYXRlIHRoZSByZWd1bGF0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod20xMTkwX3JlZ3VsYXRvcnMpOyBpKyspCiAJCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZTk5MzE0MC4uOTI2NGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xMjIsMTAgKzEyMiw3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhlIEFSTTkyMFQgaXMgbGljZW5zZWQgdG8gYmUgcHJvZHVjZWQgYnkgbnVtZXJvdXMgdmVuZG9ycywKLQkgIGFuZCBpcyB1c2VkIGluIHRoZSBNYXZlcmljayBFUDkzMTIgYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCi0KLQkgIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIE1hdmVyaWNrIEVQOTMxMiBhdAotCSAgPGh0dHA6Ly9saW51eGRldmljZXMuY29tL3Byb2R1Y3RzL1BEMjM4Mjg2NjA2OC5odG1sPi4KKwkgIGFuZCBpcyB1c2VkIGluIHRoZSBDaXJydXMgRVA5M3h4IGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgogCiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIwVCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29udGV4dC5jIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCmluZGV4IDZiZGE3NmEuLmE5ZTIyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnRleHQuYworKysgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKQEAgLTUwLDEwICs1MCw3IEBACiAJCWlzYigpOwogCQlmbHVzaF90bGJfYWxsKCk7CiAJCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7Ci0JCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEktY2FjaGVcbiIKLQkJCSAgICAibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgNglAIGZsdXNoIEJUQUMvQlRCXG4iCi0JCQkgICAgOgotCQkJICAgIDogInIiICgwKSk7CisJCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAkJCWRzYigpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggYjMwOTI1Zi4uYjk1OTBhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKCFtYXNrKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCXZpcnQgPSBrbWFsbG9jKHNpemUsIGdmcCk7CiAJaWYgKCF2aXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggYjI3OTQyOS4uN2YyOTRmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xOCwxMCArMTgsNiBAQAogCiAjaW5jbHVkZSAibW0uaCIKIAotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAKICNkZWZpbmUgQUxJQVNfRkxVU0hfU1RBUlQJMHhmZmZmNDAwMApAQCAtMzUsMTYgKzMxLDExIEBACiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKIAogCWFzbSgJIm1jcnIJcDE1LCAwLCAlMSwgJTAsIGMxNFxuIgotCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JIgltY3IJcDE1LCAwLCAlMiwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0IgogCSAgICA6CiAJICAgIDogInIiICh0byksICJyIiAodG8gKyBQQUdFX1NJWkUgLSBMMV9DQUNIRV9CWVRFUyksICJyIiAoemVybykKIAkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIH0KIAogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTU3LDE2ICs0OCwxMSBAQAogCiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewogCQlhc20oCSJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMFxuIgotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0IgogCQkgICAgOgogCQkgICAgOiAiciIgKDApCiAJCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCkBAIC04MSwxNiArNjcsMTEgQEAKIAogCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKIAkJYXNtKAkibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDBcbiIKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIKIAkJICAgIDoKIAkJICAgIDogInIiICgwKQogCQkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDQwOTQwZDcuLjUyYzQwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI3Myw3ICsyNzMsNiBAQAogCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKIAkJaWYgKCFiYW5rLT5oaWdobWVtKQogCQkJZnJlZV9ib290bWVtX25vZGUocGdkYXQsIGJhbmtfcGh5c19zdGFydChiYW5rKSwgYmFua19waHlzX3NpemUoYmFuaykpOwotCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKIAl9CiAKIAkvKgpAQCAtMzcwLDYgKzM2OSwxOSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwZm5fdmFsaWQpOworCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKKwlpbnQgaTsKKwlmb3JfZWFjaF9ub2RlYmFuayhpLCBtaSwgbm9kZSkgeworCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKKwkJbWVtb3J5X3ByZXNlbnQobm9kZSwgYmFua19wZm5fc3RhcnQoYmFuayksIGJhbmtfcGZuX2VuZChiYW5rKSk7CisJfQorfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1lbWluZm9fY21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKQEAgLTQyNyw2ICs0MzksMTIgQEAKIAkJICovCiAJCWlmIChub2RlID09IGluaXRyZF9ub2RlKQogCQkJYm9vdG1lbV9yZXNlcnZlX2luaXRyZChub2RlKTsKKworCQkvKgorCQkgKiBTcGFyc2VtZW0gdHJpZXMgdG8gYWxsb2NhdGUgYm9vdG1lbSBpbiBtZW1vcnlfcHJlc2VudCgpLAorCQkgKiBzbyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpeGVkIHJlc2VydmF0aW9ucworCQkgKi8KKwkJYXJtX21lbW9yeV9wcmVzZW50KG1pLCBub2RlKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCAwMjI0M2VlLi5lYTY3YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTE3LDYgKzExNywxMyBAQAogCX0KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKGNhY2hlX3BvbGljaWVzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBjYWNoZSBwb2xpY3lcbiIpOworCS8qCisJICogVGhpcyByZXN0cmljdGlvbiBpcyBwYXJ0bHkgdG8gZG8gd2l0aCB0aGUgd2F5IHdlIGJvb3Q7IGl0IGlzCisJICogdW5wcmVkaWN0YWJsZSB0byBoYXZlIG1lbW9yeSBtYXBwZWQgdXNpbmcgdHdvIGRpZmZlcmVudCBzZXRzIG9mCisJICogbWVtb3J5IGF0dHJpYnV0ZXMgKHNoYXJlZCwgdHlwZSwgYW5kIGNhY2hlIGF0dHJpYnMpLiAgV2UgY2FuIG5vdAorCSAqIGNoYW5nZSB0aGVzZSBhdHRyaWJ1dGVzIG9uY2UgdGhlIGluaXRpYWwgYXNzZW1ibHkgaGFzIHNldHVwIHRoZQorCSAqIHBhZ2UgdGFibGVzLgorCSAqLwogCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiT25seSBjYWNoZXBvbGljeT13cml0ZWJhY2sgc3VwcG9ydGVkIG9uIEFSTXY2IGFuZCBsYXRlclxuIik7CiAJCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9XUklURUJBQ0s7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggMTk0NzM3ZC4uNzBmNzVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBfFRUQl9TCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQldBfFBNRF9TRUNUX1MKICNlbmRpZgogCiBFTlRSWShjcHVfdjZfcHJvY19pbml0KQpAQCAtMjIyLDEwICsyMjQsOSBAQAogCS5sb25nCTB4MDAwN2IwMDAKIAkubG9uZwkweDAwMDdmMDAwCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAotCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAotCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAotCQlQTURfU0VDVF9BUF9SRUFECisJCVBNRF9TRUNUX0FQX1JFQUQgfCBcCisJCVBNRF9GTEFHUwogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfWE4gfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDIzZWJjZjYuLjNhMjg1MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTMzLDkgKzMzLDExIEBACiAjaWZuZGVmIENPTkZJR19TTVAKIC8qIFBUV3MgY2FjaGVhYmxlLCBpbm5lciBXQiBub3Qgc2hhcmVhYmxlLCBvdXRlciBXQiBub3Qgc2hhcmVhYmxlICovCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfSVJHTl9XQnxUVEJfUkdOX09DX1dCCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQgogI2Vsc2UKIC8qIFBUV3MgY2FjaGVhYmxlLCBpbm5lciBXQldBIHNoYXJlYWJsZSwgb3V0ZXIgV0JXQSBub3Qgc2hhcmVhYmxlICovCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfSVJHTl9XQldBfFRUQl9TfFRUQl9OT1N8VFRCX1JHTl9PQ19XQldBCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQldBfFBNRF9TRUNUX1MKICNlbmRpZgogCiBFTlRSWShjcHVfdjdfcHJvY19pbml0KQpAQCAtMTg0LDkgKzE4NiwxMCBAQAogICovCiBfX3Y3X3NldHVwOgogI2lmZGVmIENPTkZJR19TTVAKLQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIEVuYWJsZSBTTVAvbkFNUCBtb2RlIGFuZAotCW9ycglyMCwgcjAsICMoMSA8PCA2KSB8ICgxIDw8IDApCUAgVExCIG9wcyBicm9hZGNhc3RpbmcKLQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQorCXRzdAlyMCwgIygxIDw8IDYpCQkJQCBTTVAvbkFNUCBtb2RlIGVuYWJsZWQ/CisJb3JyZXEJcjAsIHIwLCAjKDEgPDwgNikgfCAoMSA8PCAwKQlAIEVuYWJsZSBTTVAvbkFNUCBtb2RlIGFuZAorCW1jcmVxCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQkJQCBUTEIgb3BzIGJyb2FkY2FzdGluZwogI2VuZGlmCiAJYWRyCXIxMiwgX192N19zZXR1cF9zdGFjawkJQCB0aGUgbG9jYWwgc3RhY2sKIAlzdG1pYQlyMTIsIHtyMC1yNSwgcjcsIHI5LCByMTEsIGxyfQpAQCAtMzI2LDEwICszMjksOSBAQAogCS5sb25nCTB4MDAwZjAwMDAJCUAgUmVxdWlyZWQgSUQgdmFsdWUKIAkubG9uZwkweDAwMGYwMDAwCQlAIE1hc2sgZm9yIElECiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAotCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAotCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAotCQlQTURfU0VDVF9BUF9SRUFECisJCVBNRF9TRUNUX0FQX1JFQUQgfCBcCisJCVBNRF9GTEFHUwogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfWE4gfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKaW5kZXggZmU1ODEzOC4uZjdkMmVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCkBAIC0zMyw2ICszMyw5IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkzLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfQkNNUklORworCUlSUV9QTVVJUlEsIC8qIGZvciBCQ01SSU5HLCBBUk0gUE1VIGludGVycnVwdCBpcyA0MyAqLworI2VuZGlmCiB9OwogCiBzdGF0aWMgdm9pZCBhcm12Nl9wbXVfc3RvcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwppbmRleCAxODY4YzBkLi4zNDEyMzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJfQogCiAJLyogRklYTUU6IHdoYXQncyB0aGUgYWN0dWFsIHRyYW5zaXRpb24gdGltZT8gKi8KLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAgKiAxMDAwICogMTAwMDsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMzAwICogMTAwMDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IGZkMzE1NGEuLjY4ZWFhZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTY5MSwxMyArNjkxLDE2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfZW5hYmxlX2lycV9sY2goaW50IGxjaCkKIHsKIAl1MzIgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpKQogCQlyZXR1cm47CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CiAJdmFsIHw9IDEgPDwgbGNoOwogCWRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKQEAgLTc5OSwxMCArODAyLDEzIEBACiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJdTMyIHZhbDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAkJdmFsID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKIAkJdmFsICY9IH4oMSA8PCBsY2gpOwogCQlkbWFfd3JpdGUodmFsLCBJUlFFTkFCTEVfTDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAKIAkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLwogCQlkbWFfd3JpdGUoT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLLCBDU1IobGNoKSk7CkBAIC04MjksMTAgKzgzNSwxMCBAQAogICoKICAqIEBwYXJhbSBhcmJfcmF0ZQogICogQHBhcmFtIG1heF9maWZvX2RlcHRoCi0gKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aGVyZWFkcyB0byByZXNlcnZlIDogRE1BX1RIUkVBRF9SRVNFUlZFX05PUk0KLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfT05FVAotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RIUkVFVAorICogQHBhcmFtIHRwYXJhbXMgLSBOdW1iZXIgb2YgdGhyZWFkcyB0byByZXNlcnZlIDogRE1BX1RIUkVBRF9SRVNFUlZFX05PUk0KKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVFdPVAorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RIUkVFVAogICovCiB2b2lkCiBvbWFwX2RtYV9zZXRfZ2xvYmFsX3BhcmFtcyhpbnQgYXJiX3JhdGUsIGludCBtYXhfZmlmb19kZXB0aCwgaW50IHRwYXJhbXMpCkBAIC04NDQsMTEgKzg1MCwxNCBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKG1heF9maWZvX2RlcHRoID09IDApCisJCW1heF9maWZvX2RlcHRoID0gMTsKIAlpZiAoYXJiX3JhdGUgPT0gMCkKIAkJYXJiX3JhdGUgPSAxOwogCi0JcmVnID0gKGFyYl9yYXRlICYgMHhmZikgPDwgMTY7Ci0JcmVnIHw9ICgweGZmICYgbWF4X2ZpZm9fZGVwdGgpOworCXJlZyA9IDB4ZmYgJiBtYXhfZmlmb19kZXB0aDsKKwlyZWcgfD0gKDB4MyAmIHRwYXJhbXMpIDw8IDEyOworCXJlZyB8PSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKIAogCWRtYV93cml0ZShyZWcsIEdDUik7CiB9CkBAIC05NzUsNiArOTg0LDE0IEBACiB7CiAJdTMyIGw7CiAKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlkbWFfd3JpdGUoMCwgQ0lDUihsY2gpKTsKKworCWwgPSBkbWFfcmVhZChDQ1IobGNoKSk7CisJbCAmPSB+T01BUF9ETUFfQ0NSX0VOOworCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7CisKIAlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKIAkJaW50IG5leHRfbGNoLCBjdXJfbGNoID0gbGNoOwogCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CkBAIC05OTIsMTggKzEwMDksOCBAQAogCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKIAkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKIAkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOwotCi0JCXJldHVybjsKIAl9CiAKLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQotCQlkbWFfd3JpdGUoMCwgQ0lDUihsY2gpKTsKLQotCWwgPSBkbWFfcmVhZChDQ1IobGNoKSk7Ci0JbCAmPSB+T01BUF9ETUFfQ0NSX0VOOwotCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7Ci0KIAlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc3RvcF9kbWEpOwpAQCAtMTEwNyw2ICsxMTE0LDE0IEBACiB7CiAJaW50IGxjaDsKIAorCS8qCisJICogT24gT01BUDE1MTAsIGludGVybmFsIExDRCBjb250cm9sbGVyIHdpbGwgc3RhcnQgdGhlIHRyYW5zZmVyCisJICogd2hlbiBpdCBnZXRzIGVuYWJsZWQsIHNvIGFzc3VtZSBETUEgcnVubmluZyBpZiBMQ0QgZW5hYmxlZC4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJCWlmIChvbWFwX3JlYWR3KDB4ZmZmZWMwMDAgKyAweDAwKSAmICgxIDw8IDApKQorCQkJcmV0dXJuIDE7CisKIAkvKiBDaGVjayBpZiBMQ0QgRE1BIGlzIHJ1bm5pbmcgKi8KIAlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCiAJCWlmIChvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIE9NQVBfRE1BX0NDUl9FTikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCmluZGV4IGQ5MWI5YmUuLjNhZTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaApAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9LRVlQQURfSAogI2RlZmluZSBBU01BUk1fQVJDSF9LRVlQQURfSAogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI3dhcm5pbmc6IFBsZWFzZSB1cGRhdGUgdGhlIGJvYXJkIHRvIHVzZSBtYXRyaXhfa2V5cGFkLmggaW5zdGVhZAogCiBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcm93czsKQEAgLTM3LDYgKzM3LDkgQEAKIAogI2RlZmluZSBLRVlfUEVSU0lTVEVOVAkJMHgwMDgwMDAwMAogI2RlZmluZSBLRVlOVU1fTUFTSwkJMHgwMEVGRkZGRgorI2RlZmluZSBLRVkoY29sLCByb3csIHZhbCkgKCgoY29sKSA8PCAyOCkgfCAoKHJvdykgPDwgMjQpIHwgKHZhbCkpCisjZGVmaW5lIFBFUlNJU1RFTlRfS0VZKGNvbCwgcm93KSAoKChjb2wpIDw8IDI4KSB8ICgocm93KSA8PCAyNCkgfCBcCisJCQkJCQlLRVlfUEVSU0lTVEVOVCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNGI2MDEyNy4uOTQ1ODRmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQluZW50ID0gMTsgLyogZm9yIHRoZSBuZXh0IEwxIGVudHJ5ICovCiAJfSBlbHNlIHsKIAkJYnl0ZXMgPSBJT1BHRF9TSVpFOwotCQlpZiAoKmlvcGdkICYgSU9QR0RfU1VQRVIpIHsKKwkJaWYgKCgqaW9wZ2QgJiBJT1BHRF9TVVBFUikgPT0gSU9QR0RfU1VQRVIpIHsKIAkJCW5lbnQgKj0gMTY7CiAJCQkvKiByZXdpbmQgdG8gdGhlIDFzdCBlbnRyeSAqLwogCQkJaW9wZ2QgPSAodTMyICopKCh1MzIpaW9wZ2QgJiBJT1NVUEVSX01BU0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA4OGFjOTc2Li5lNjY0YjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJcnggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKLQkJdyB8PSAodHggPyBSRElTQUJMRSA6IDApOworCQl3IHw9IChyeCA/IFJESVNBQkxFIDogMCk7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CiAJfQogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCmluZGV4IDRkMzZiNzguLmRmNDczMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKQEAgLTE4OSw3ICsxODksNyBAQAogZXJyOgogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX2NvbnZlcnQpOworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19yZWFkKTsKIAogc3RhdGljIHZvaWQgczNjX2FkY19kZWZhdWx0X3NlbGVjdChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKIAkJCQkgICB1bnNpZ25lZCBzZWxlY3QpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggNTQ0N2U2MC4uNGFmOWRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtNjEsNiArNjEsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEyW10gID0gIlMzQzI0MTIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwW10gID0gIlMzQzI0NDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyW10gID0gIlMzQzI0NDIiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyYltdICA9ICJTM0MyNDQyQiI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0NDNbXSAgPSAiUzNDMjQ0MyI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0MTBhW10gPSAiUzNDMjQxMEEiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwYVtdID0gIlMzQzI0NDBBIjsKQEAgLTExMiw2ICsxMTMsMTUgQEAKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyCiAJfSwKIAl7CisJCS5pZGNvZGUJCT0gMHgzMjQ0MGFhYiwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQ0Ml9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0NDJiCisJfSwKKwl7CiAJCS5pZGNvZGUJCT0gMHgzMjQxMjAwMSwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MTJfbWFwX2lvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IDE5NmIxOTEuLmYwNDZmOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTIwOCwxNCArMjA4LDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyByZWxvYWQ7CiAKLQlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAotCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7Ci0KIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJZG1hd2FybigiYnVmZmVyIGlzIE5VTExcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAorCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7CisKIAkvKiBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIGNoYW5uZWwgYmVmb3JlIHdlIGRvIGFueXRoaW5nICovCiAKIAlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKaW5kZXggOTVkZjA1OS4uNTQ2NzQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tZm5zLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKaW5kZXggZWZlYjAyNS4uYzc3NjEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKQEAgLTIyMiw3ICsyMjIsOSBAQAogLyogUzNDMjQxMCBhbmQgY29tcGF0aWJsZSBleHBvcnRlZCBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKIAorI2lmZGVmIENPTkZJR19TM0MyNDEwX0lPVElNSU5HCiBleHRlcm4gaW50IHMzYzI0MTBfaW90aW1pbmdfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwogCkBAIC0yMzEsOCArMjMzLDExIEBACiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfaW90aW1pbmdfc2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKIAkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKKyNlbHNlCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfY2FsYyBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfZ2V0IE5VTEwKKyNkZWZpbmUgczNjMjQxMF9pb3RpbWluZ19zZXQgTlVMTAorI2VuZGlmIC8qIENPTkZJR19TM0MyNDEwX0lPVElNSU5HICovCiAKIC8qIFMzQzI0MTIgY29tcGF0aWJsZSByb3V0aW5lcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCmluZGV4IGI2ZGVlZWYuLjgyYWI0YWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBzM2MyNDEwX2luaXRfdWFydHMgTlVMTAogI2RlZmluZSBzM2MyNDEwX21hcF9pbyBOVUxMCiAjZGVmaW5lIHMzYzI0MTBfaW5pdCBOVUxMCisjZGVmaW5lIHMzYzI0MTBhX2luaXQgTlVMTAogI2VuZGlmCiAKIGV4dGVybiBpbnQgczNjMjQxMF9iYXNlY2xrX2FkZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYwppbmRleCAyNjZhMTA3Li5kNTU0YjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCkBAIC0xNTEsOCArMTUxLDYgQEAKIAkJc3JjID0gY2hhbi0+ZGV2X2FkZHI7CiAJCWRzdCA9IGRhdGE7CiAJCWNvbnRyb2wwID0gUEwwODBfQ09OVFJPTF9TUkNfQUhCMjsKLQkJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKLQkJY29udHJvbDAgfD0gMiA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVDsKIAkJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9EU1RfSU5DUjsKIAkJYnJlYWs7CiAKQEAgLTE2MCw4ICsxNTgsNiBAQAogCQlzcmMgPSBkYXRhOwogCQlkc3QgPSBjaGFuLT5kZXZfYWRkcjsKIAkJY29udHJvbDAgPSBQTDA4MF9DT05UUk9MX0RTVF9BSEIyOwotCQljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOwotCQljb250cm9sMCB8PSAyIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwogCQljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1NSQ19JTkNSOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTczLDYgKzE2OSw4IEBACiAJY29udHJvbDEgPSBzaXplID4+IGNoYW4tPmh3X3dpZHRoOwkvKiBzaXplIGluIG5vIG9mIHhmZXJzICovCiAJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9QUk9UX1NZUzsJLyogYWx3YXlzIGluIHByaXYuIG1vZGUgKi8KIAljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1RDX0lSUV9FTjsJLyogYWx3YXlzIGZpcmUgSVJRICovCisJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVDsKKwljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwogCiAJbGxpLT5zcmNfYWRkciA9IHNyYzsKIAlsbGktPmRzdF9hZGRyID0gZHN0OwpAQCAtMzM5LDYgKzMzNyw3IEBACiAJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKm5leHQ7CiAJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZmY7CiAJc3RydWN0IHBsMDgwc19sbGkgKmxsaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAlXQVJOX09OKCFjaGFuKTsKQEAgLTM2Niw2ICszNjUsOCBAQAogCiAJczNjNjR4eF9kbWFfZmlsbF9sbGkoY2hhbiwgbGxpLCBkYXRhLCBzaXplKTsKIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCWlmICgobmV4dCA9IGNoYW4tPm5leHQpICE9IE5VTEwpIHsKIAkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZCA9IGNoYW4tPmVuZDsKIAkJc3RydWN0IHBsMDgwc19sbGkgKmVuZGxsaSA9IGVuZC0+bGxpOwpAQCAtMzk3LDYgKzM5OCw4IEBACiAJCXMzYzY0eHhfbGxpX3RvX3JlZ3MoY2hhbiwgbGxpKTsKIAl9CiAKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlzaG93X2xsaShsbGkpOwogCiAJZGJnX3Nob3djaGFuKGNoYW4pOwpAQCAtNTYwLDI2ICs1NjMsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKIAotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV90Y2lycShzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjLCBpbnQgb2ZmcykKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKLQotCS8qIG5vdGUsIHdlIGN1cnJlbnRseSBkbyBub3QgYm90aGVyIHRvIHdvcmsgb3V0IHdoaWNoIGJ1ZmZlcgotCSAqIG9yIGJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzaW5jZSB0aGUgbGFzdCB0Yy1pcnEuICovCi0KLQlpZiAoY2hhbi0+Y2FsbGJhY2tfZm4pCi0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgY2hhbi0+Y3Vyci0+cHcsIDAsIFMzQzI0MTBfUkVTX09LKTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfZXJyaXJxKHN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMsIGludCBvZmZzKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmcyAlZFxuIiwgX19mdW5jX18sIG9mZnMpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgczNjNjR4eF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB3KQogewogCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBwdzsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwllbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzOwogCXUzMiB0Y3N0YXQsIGVycnN0YXQ7CiAJdTMyIGJpdDsKIAlpbnQgb2ZmczsKQEAgLTU4OCwxNCArNTc2LDU0IEBACiAJZXJyc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfU1RBVFVTKTsKIAogCWZvciAob2ZmcyA9IDAsIGJpdCA9IDE7IG9mZnMgPCA4OyBvZmZzKyssIGJpdCA8PD0gMSkgeworCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKKworCQlpZiAoIShlcnJzdGF0ICYgYml0KSAmJiAhKHRjc3RhdCAmIGJpdCkpCisJCQljb250aW51ZTsKKworCQljaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOworCQlyZXMgPSBTM0MyNDEwX1JFU19FUlI7CisKIAkJaWYgKHRjc3RhdCAmIGJpdCkgewogCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX1RDX0NMRUFSKTsKLQkJCXMzYzY0eHhfZG1hX3RjaXJxKGRtYWMsIG9mZnMpOworCQkJcmVzID0gUzNDMjQxMF9SRVNfT0s7CiAJCX0KIAotCQlpZiAoZXJyc3RhdCAmIGJpdCkgewotCQkJczNjNjR4eF9kbWFfZXJyaXJxKGRtYWMsIG9mZnMpOworCQlpZiAoZXJyc3RhdCAmIGJpdCkKIAkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfQ0xFQVIpOworCisJCS8qICduZXh0JyBwb2ludHMgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIG5leHQgdG8gdGhlCisJCSAqIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyLgorCQkgKiBGb3IgQ0lSQ1VMQVIgcXVldWVzLCAnbmV4dCcgd2lsbCBiZSBzYW1lIGFzICdjdXJyJworCQkgKiB3aGVuICdlbmQnIGlzIHRoZSBhY3RpdmUgYnVmZmVyLgorCQkgKi8KKwkJYnVmZiA9IGNoYW4tPmN1cnI7CisJCXdoaWxlIChidWZmICYmIGJ1ZmYgIT0gY2hhbi0+bmV4dAorCQkJCSYmIGJ1ZmYtPm5leHQgIT0gY2hhbi0+bmV4dCkKKwkJCWJ1ZmYgPSBidWZmLT5uZXh0OworCisJCWlmICghYnVmZikKKwkJCUJVRygpOworCisJCWlmIChidWZmID09IGNoYW4tPm5leHQpCisJCQlidWZmID0gY2hhbi0+ZW5kOworCisJCXMzYzY0eHhfZG1hX2J1ZmZmZG9uZShjaGFuLCBidWZmLCByZXMpOworCisJCS8qIEZyZWUgdGhlIG5vZGUgYW5kIHVwZGF0ZSBjdXJyLCBpZiBub24tY2lyY3VsYXIgcXVldWUgKi8KKwkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKSB7CisJCQljaGFuLT5jdXJyID0gYnVmZi0+bmV4dDsKKwkJCXMzYzY0eHhfZG1hX2ZyZWVidWZmKGJ1ZmYpOworCQl9CisKKwkJLyogVXBkYXRlICduZXh0JyAqLworCQlidWZmID0gY2hhbi0+bmV4dDsKKwkJaWYgKGNoYW4tPm5leHQgPT0gY2hhbi0+ZW5kKSB7CisJCQljaGFuLT5uZXh0ID0gY2hhbi0+Y3VycjsKKwkJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkKKwkJCQljaGFuLT5lbmQgPSBOVUxMOworCQl9IGVsc2UgeworCQkJY2hhbi0+bmV4dCA9IGJ1ZmYtPm5leHQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKaW5kZXggYTg3NzdhNzUuLmZmNDZlN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCkBAIC01MSw4ICs1MSw4IEBACiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHgzIDw8IDApCi0jZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHhmIDw8IDApCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fU0hJRlQJKDApCiAKIC8qIENMS0RJVjEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCmluZGV4IDk3NDU4NTIuLjZmZmEyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwpAQCAtNjc3LDYgKzY3Nyw5IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7CiAKKwkvKiBGb3Igbm93IGFzc3VtZSB0aGUgbXV4IGFsd2F5cyBzZWxlY3RzIHRoZSBjcnlzdGFsICovCisJY2xrX2V4dF94dGFsX211eC5wYXJlbnQgPSB4dGFsX2NsazsKKwogCWVwbGwgPSBzM2M2NDAwX2dldF9lcGxsKHh0YWwpOwogCW1wbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX01QTExfQ09OKSk7CiAJYXBsbCA9IHMzYzY0MDBfZ2V0X3BsbCh4dGFsLCBfX3Jhd19yZWFkbChTM0NfQVBMTF9DT04pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggNDRkMGJmYS4uOWM5NmExMyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMxLDUgKzMxLDggQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYzKCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXJsKCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMTAoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0NQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNmIwYTJiNi4uMDk3NGMwZSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYwpAQCAtNTI3LDcgKzUyNyw3IEBACiAKIG5vX3NpZ25hbDoKIAkvKiBEaWQgd2UgY29tZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCi0JaWYgKF9fZnJhbWUtPnN5c2NhbGxubyA+PSAwKSB7CisJaWYgKF9fZnJhbWUtPnN5c2NhbGxubyAhPSAtMSkgewogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KIAkJc3dpdGNoIChfX2ZyYW1lLT5ncjgpIHsKIAkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDMwYmI5MzAuLjIzOWVjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yNSw2MSArMjUsODIgQEAKICAqIGJ5IGF0b21pY2FsbHkgbm90aW5nIHRoZSB0YWlsIGFuZCBpbmNyZW1lbnRpbmcgaXQgYnkgb25lICh0aHVzIGFkZGluZwogICogb3Vyc2VsZiB0byB0aGUgcXVldWUgYW5kIG5vdGluZyBvdXIgcG9zaXRpb24pLCB0aGVuIHdhaXRpbmcgdW50aWwgdGhlIGhlYWQKICAqIGJlY29tZXMgZXF1YWwgdG8gdGhlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0YWlsLgorICogVGhlIHBhZCBiaXRzIGluIHRoZSBtaWRkbGUgYXJlIHVzZWQgdG8gcHJldmVudCB0aGUgbmV4dF90aWNrZXQgbnVtYmVyCisgKiBvdmVyZmxvd2luZyBpbnRvIHRoZSBub3dfc2VydmluZyBudW1iZXIuCiAgKgotICogICA2MyAgICAgICAgICAgICAgICAgICAgIDMyICAzMSAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgIDMxICAgICAgICAgICAgIDE3ICAxNiAgICAxNSAgMTQgICAgICAgICAgICAgICAgICAgIDAKICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqICB8ICBuZXh0X3RpY2tldF9udW1iZXIgICAgICB8ICAgICBub3dfc2VydmluZyAgICAgICAgIHwKKyAqICB8ICBub3dfc2VydmluZyAgICAgfCBwYWRkaW5nIHwgICBuZXh0X3RpY2tldCAgICAgICAgIHwKICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqLwogCi0jZGVmaW5lIFRJQ0tFVF9TSElGVAkzMgorI2RlZmluZSBUSUNLRVRfU0hJRlQJMTcKKyNkZWZpbmUgVElDS0VUX0JJVFMJMTUKKyNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JaW50CSpwID0gKGludCAqKSZsb2NrLT5sb2NrLCB0dXJuLCBub3dfc2VydmluZzsKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKLQlub3dfc2VydmluZyA9ICpwOwotCXR1cm4gPSBpYTY0X2ZldGNoYWRkKDEsIHArMSwgYWNxKTsKKwl0aWNrZXQgPSBpYTY0X2ZldGNoYWRkKDEsIHAsIGFjcSk7CiAKLQlpZiAodHVybiA9PSBub3dfc2VydmluZykKKwlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKIAkJcmV0dXJuOwogCi0JZG8geworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIocCkgOiAibWVtb3J5Iik7CisKKwkJaWYgKCEoKChzZXJ2ZSA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJCXJldHVybjsKIAkJY3B1X3JlbGF4KCk7Ci0JfSB3aGlsZSAoQUNDRVNTX09OQ0UoKnApICE9IHR1cm4pOworCX0KIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewotCWxvbmcgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayksIHRyeTsKKwlpbnQgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlpZiAoISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmICgoMUwgPDwgVElDS0VUX1NISUZUKSAtIDEpKSkgewotCQl0cnkgPSB0bXAgKyAoMUwgPDwgVElDS0VUX1NISUZUKTsKLQotCQlyZXR1cm4gaWE2NF9jbXB4Y2hnKGFjcSwgJmxvY2stPmxvY2ssIHRtcCwgdHJ5LCBzaXplb2YgKHRtcCkpID09IHRtcDsKLQl9CisJaWYgKCEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiBUSUNLRVRfTUFTSykpCisJCXJldHVybiBpYTY0X2NtcHhjaGcoYWNxLCAmbG9jay0+bG9jaywgdG1wLCB0bXAgKyAxLCBzaXplb2YgKHRtcCkpID09IHRtcDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewotCWludAkqcCA9IChpbnQgKikmbG9jay0+bG9jazsKKwl1bnNpZ25lZCBzaG9ydAkqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKSZsb2NrLT5sb2NrICsgMSwgdG1wOwogCi0JKHZvaWQpaWE2NF9mZXRjaGFkZCgxLCBwLCByZWwpOworCWFzbSB2b2xhdGlsZSAoImxkMi5iaWFzICUwPVslMV0iIDogIj1yIih0bXApIDogInIiKHApKTsKKwlBQ0NFU1NfT05DRSgqcCkgPSAodG1wICsgMikgJiB+MTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJaW50CSpwID0gKGludCAqKSZsb2NrLT5sb2NrLCB0aWNrZXQ7CisKKwlpYTY0X2ludmFsYSgpOworCisJZm9yICg7OykgeworCQlhc20gdm9sYXRpbGUgKCJsZDQuYy5uYyAlMD1bJTFdIiA6ICI9ciIodGlja2V0KSA6ICJyIihwKSA6ICJtZW1vcnkiKTsKKwkJaWYgKCEoKCh0aWNrZXQgPj4gVElDS0VUX1NISUZUKSBeIHRpY2tldCkgJiBUSUNLRVRfTUFTSykpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJbG9uZyB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotCXJldHVybiAhISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmICgoMUwgPDwgVElDS0VUX1NISUZUKSAtIDEpKTsKKwlyZXR1cm4gISEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiBUSUNLRVRfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWxvbmcgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlyZXR1cm4gKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgLSB0bXApICYgKCgxTCA8PCBUSUNLRVRfU0hJRlQpIC0gMSkpID4gMTsKKwlyZXR1cm4gKCh0bXAgLSAodG1wID4+IFRJQ0tFVF9TSElGVCkpICYgVElDS0VUX01BU0spID4gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCkBAIC0xMTYsOCArMTM3LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0Jd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKQotCQljcHVfcmVsYXgoKTsKKwlfX3RpY2tldF9zcGluX3VubG9ja193YWl0KGxvY2spOwogfQogCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpCQkoKih2b2xhdGlsZSBpbnQgKikocncpID49IDApCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGI2MWQxMzYuLjQ3NGU0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC02LDcgKzYsNyBAQAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvY2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CiB9IHJhd19zcGlubG9ja190OwogCiAjZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggZDI4NzdhNy4uNDk2YWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC04ODcsNiArODg3LDYwIEBACiAJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zLAorCQl1bnNpZ25lZCBsb25nICpuYXQpCit7CisJY29uc3QgdTY0ICpiYW5rOworCisJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQorCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KKwkgKi8KKwlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKKwkJcmVncy0+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+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQuLjMwOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTE5LDcgKzExOSw2IEBACiAgKiBBZGRpdGlvbmFsbHkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciBhbHNvIGhhcyB0byBiZQogICogcmVtb3ZlZCBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oCiAgKi8KLXN0YXRpYyB1OCB3YXJfaW1wbGVtZW50ZWQgPSAwOwogCiBzdGF0aWMgczY0IHNuX2RldmljZV9maXh1cF93YXIodTY0IG5hc2lkLCB1NjQgd2lkZ2V0LCBpbnQgZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfY29tbW9uICpjb21tb24pCkBAIC0xMjgsMTEgKzEyNyw4IEBACiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgKmRldl9lbnRyeTsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnYgPSB7MCwwLDAsMH07CiAKLQlpZiAoIXdhcl9pbXBsZW1lbnRlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgIgotCQkgICAgICAgIlBST00gZmx1c2ggV0FSXG4iKTsKLQkJd2FyX2ltcGxlbWVudGVkID0gMTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCSJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgUFJPTSBmbHVzaCBXQVJcbiIpOwogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighd2FyX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0YzdlNzQ3Li41NWFjM2M0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNzg2LDE3ICs3ODYsMTggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOX0hXUEVSRl9HRVRfT0JKX05PREU6Ci0JCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGEuYXJnIDwgMCkgeworCQlpID0gYS5hcmc7CisJCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGkgPCAwKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKChyID0gc25faHdwZXJmX2VudW1fb2JqZWN0cygmbm9iaiwgJm9ianMpKSA9PSAwKSB7Ci0JCQlpZiAoYS5hcmcgPj0gbm9iaikgeworCQkJaWYgKGkgPj0gbm9iaikgewogCQkJCXIgPSAtRUlOVkFMOwogCQkJCXZmcmVlKG9ianMpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlpZiAob2Jqc1soaSA9IGEuYXJnKV0uaWQgIT0gYS5hcmcpIHsKKwkJCWlmIChvYmpzW2ldLmlkICE9IGEuYXJnKSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5vYmo7IGkrKykgewogCQkJCQlpZiAob2Jqc1tpXS5pZCA9PSBhLmFyZykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBjNDEyMzRmLi4zYTkzMTlmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMTEsNiArMTEsOSBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCiBjb25maWcgU0JVUwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDU2MDQ4NGEuLjE3NzcxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMSBAQAogIwotIyBsaW51eC9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIyBsaW51eC9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCiAjCiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogaGVhZC5vIG1pc2MubyBcCi0JCSAgIHBpZ2d5Lm8gdm1saW51eC5sZHMKK3RhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkJICAgdm1saW51eC5iaW4ubHptYSBoZWFkLm8gbWlzYy5vIHBpZ2d5Lm8gdm1saW51eC5sZHMKIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogCkBAIC0yNyw2ICsyNywxMiBAQAogJChvYmopL3ZtbGludXguYmluLmd6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKworJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCisKIENGTEFHU19taXNjLm8gKz0gLWZwaWMKIAogaWZkZWYgQ09ORklHX01NVQpAQCAtMzcsNSArNDMsOSBAQAogCiBPQkpDT1BZRkxBR1MgKz0gLVIgLmVtcHR5X3plcm9fcGFnZQogCi0kKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi5neiBGT1JDRQorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKQk9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKQk9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKQk9IGx6bWEKKworJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZDM5NDI5Mi4uMzcwZDYwOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTksMTQwICs5LDQ5IEBACiAgKiBBZGFwdGVkIGZvciBTSCBieSBTdHVhcnQgTWVuZWZ5LCBBdWcgMTk5OQogICoKICAqIDIwMDMtMDItMTI6CVN1cHBvcnQgTTMyUiBieSBUYWtlbyBUYWthaGFzaGkKLSAqIAkJVGhpcyBpcyBiYXNlZCBvbiBhcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKICAqLwotCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCiAjZGVmaW5lIFNUQVRJQyBzdGF0aWMKIAogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbWNweQogI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7Ci0KLSNkZWZpbmUgV1NJWkUgMHg4MDAwCQkvKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgKi8KLQkJCQkvKiBhbmQgYSBwb3dlciBvZiB0d28gKi8KLQotc3RhdGljIHVjaCAqaW5idWY7CSAgICAgLyogaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07ICAgIC8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplID0gMDsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHIgPSAwOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQgPSAwOyAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04gMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6aXAgZmlsZSAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIEVOQ1JZUFRFRCAgICAweDIwIC8qIGJpdCA1IHNldDogZmlsZSBpcyBlbmNyeXB0ZWQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4QzAgLyogYml0IDYsNzogICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkgIChpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgIGZpbGxfaW5idWYodm9pZCk7Ci1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCk7CiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmlucHV0X2RhdGE7Ci1zdGF0aWMgaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0ID0gMDsKLXN0YXRpYyB1Y2ggKm91dHB1dF9kYXRhOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb3V0cHV0X3B0ciA9IDA7Ci0KICNpbmNsdWRlICJtMzJyX3Npby5jIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwogCi0jZGVmaW5lIEhFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvaW5mbGF0ZS5jIgotCi12b2lkKiBtZW1zZXQodm9pZCogcywgaW50IGMsIHNpemVfdCBuKQorI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKK3N0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewotCWludCBpOwotCWNoYXIgKnNzID0gKGNoYXIqKXM7CisJY2hhciAqc3MgPSBzOwogCi0JZm9yIChpPTA7aTxuO2krKykgc3NbaV0gPSBjOworCXdoaWxlIChuLS0pCisJICAgICAgIAkqc3MrKyA9IGM7CiAJcmV0dXJuIHM7CiB9CisjZW5kaWYKIAotdm9pZCogbWVtY3B5KHZvaWQqIF9fZGVzdCwgX19jb25zdCB2b2lkKiBfX3NyYywKLQkJCSAgICBzaXplX3QgX19uKQotewotCWludCBpOwotCWNoYXIgKmQgPSAoY2hhciAqKV9fZGVzdCwgKnMgPSAoY2hhciAqKV9fc3JjOworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCiAKLQlmb3IgKGk9MDtpPF9fbjtpKyspIGRbaV0gPSBzW2ldOwotCXJldHVybiBfX2Rlc3Q7Ci19CisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyIKKyNlbmRpZgogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQlpZiAoaW5zaXplICE9IDApIHsKLQkJZXJyb3IoInJhbiBvdXQgb2YgaW5wdXQgZGF0YSIpOwotCX0KLQotCWluYnVmID0gaW5wdXRfZGF0YTsKLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgPSAxOwotCXJldHVybiBpbmJ1ZlswXTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSB0aGUgb3V0cHV0IHdpbmRvdyB3aW5kb3dbMC4ub3V0Y250LTFdIGFuZCB1cGRhdGUgY3JjIGFuZCBieXRlc19vdXQuCi0gKiAoVXNlZCBmb3IgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9ubHkuKQotICovCi1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCkKLXsKLSAgICB1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLSAgICB1bnNpZ25lZCBuOwotICAgIHVjaCAqaW4sICpvdXQsIGNoOwotCi0gICAgaW4gPSB3aW5kb3c7Ci0gICAgb3V0ID0gJm91dHB1dF9kYXRhW291dHB1dF9wdHJdOwotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICpvdXQrKyA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOwotfQorI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCisjZW5kaWYKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKQEAgLTE1MywyMCArNjIsMjAgQEAKIAl3aGlsZSgxKTsJLyogSGFsdCAqLwogfQogCi0vKiByZXR1cm4gZGVjb21wcmVzc2VkIHNpemUgKi8KIHZvaWQKIGRlY29tcHJlc3Nfa2VybmVsKGludCBtbXVfb24sIHVuc2lnbmVkIGNoYXIgKnppbWFnZV9kYXRhLAogCQkgIHVuc2lnbmVkIGludCB6aW1hZ2VfbGVuLCB1bnNpZ25lZCBsb25nIGhlYXApCiB7CisJdW5zaWduZWQgY2hhciAqaW5wdXRfZGF0YSA9IHppbWFnZV9kYXRhOworCWludCBpbnB1dF9sZW4gPSB6aW1hZ2VfbGVuOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhOworCiAJb3V0cHV0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDAKIAkJKyAobW11X29uID8gMHg4MDAwMDAwMCA6IDApOwogCWZyZWVfbWVtX3B0ciA9IGhlYXA7Ci0JZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEhFQVBfU0laRTsKLQlpbnB1dF9kYXRhID0gemltYWdlX2RhdGE7Ci0JaW5wdXRfbGVuID0gemltYWdlX2xlbjsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgQk9PVF9IRUFQX1NJWkU7CiAKLQltYWtlY3JjKCk7Ci0JcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLiAiKTsKLQlndW56aXAoKTsKLQlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcHV0cygiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXRfZGF0YSwgTlVMTCwgZXJyb3IpOworCXB1dHMoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDhhODhmMWYuLjMxY2VmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtODA2LDcgKzgwNiw3IEBACiAKIAlpZiAobWFzayAmIH5waHlzaWRzX2NvZXJjZShwaHlzX2NwdV9wcmVzZW50X21hcCkpCiAJCUJVRygpOwotCWlmIChpcGlfbnVtID49IE5SX0lQSVMpCisJaWYgKGlwaV9udW0gPj0gTlJfSVBJUyB8fCBpcGlfbnVtIDwgMCkKIAkJQlVHKCk7CiAKIAltYXNrIDw8PSBJUElfU0hJRlQ7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IGU3ZmVlMGYxLi45Y2VkY2VmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwpAQCAtNzUsNyArNzUsNyBAQAogCQljb3VudCA9IDA7CiAKIAljb3VudCA9IChsYXRjaCAtIGNvdW50KSAqIFRJQ0tfU0laRTsKLQllbGFwc2VkX3RpbWUgPSAoY291bnQgKyBsYXRjaCAvIDIpIC8gbGF0Y2g7CisJZWxhcHNlZF90aW1lID0gRElWX1JPVU5EX0NMT1NFU1QoY291bnQsIGxhdGNoKTsKIAkvKiBOT1RFOiBMQVRDSCBpcyBlcXVhbCB0byB0aGUgImludGVydmFsIiB2YWx1ZSAoPSByZWxvYWQgY291bnQpLiAqLwogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCkBAIC05Myw3ICs5Myw3IEBACiAJcF9jb3VudCA9IGNvdW50OwogCiAJY291bnQgPSAobGF0Y2ggLSBjb3VudCkgKiBUSUNLX1NJWkU7Ci0JZWxhcHNlZF90aW1lID0gKGNvdW50ICsgbGF0Y2ggLyAyKSAvIGxhdGNoOworCWVsYXBzZWRfdGltZSA9IERJVl9ST1VORF9DTE9TRVNUKGNvdW50LCBsYXRjaCk7CiAJLyogTk9URTogTEFUQ0ggaXMgZXF1YWwgdG8gdGhlICJpbnRlcnZhbCIgdmFsdWUgKD0gcmVsb2FkIGNvdW50KS4gKi8KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjMxMCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJCWJ1c19jbG9jayA9IGJvb3RfY3B1X2RhdGEuYnVzX2Nsb2NrOwogCQlkaXZpZGUgPSBib290X2NwdV9kYXRhLnRpbWVyX2RpdmlkZTsKLQkJbGF0Y2ggPSAoYnVzX2Nsb2NrL2RpdmlkZSArIEhaIC8gMikgLyBIWjsKKwkJbGF0Y2ggPSBESVZfUk9VTkRfQ0xPU0VTVChidXNfY2xvY2svZGl2aWRlLCBIWik7CiAKIAkJcHJpbnRrKCJUaW1lciBzdGFydCA6IGxhdGNoID0gJWxkXG4iLCBsYXRjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4Y2ViNjE4Li43ZGE5NGVhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00Miw2ICs0Miw4IEBACiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCiAgIEVYQ0VQVElPTl9UQUJMRSgxNikKKyAgTk9URVMKKwogICBST0RBVEEKICAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggMjlkZDg0OC4uZWNkYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTU2MSw3ICs1NjEsNyBAQAogCiBjb25maWcgTVZNRTE0N19TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE0NyBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBNVk1FMTQ3CisJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE0NwogCSAgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KQEAgLTU3NiwxNCArNTc2LDE0IEBACiAKIGNvbmZpZyBNVk1FMTYyX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTYyIHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNngKKwlkZXBlbmRzIG9uIE1WTUUxNnggJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTYyIGFuZAogCSAgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBCVk1FNjAwMF9TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgQlZNRTYwMDAgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gQlZNRTYwMDAKKwlkZXBlbmRzIG9uIEJWTUU2MDAwICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgQlZNRTQwMDAgYW5kIEJWTUU2MDAwCiAJICBib2FyZHMgZnJvbSBCVk0gTHRkLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDcwNWE3YTkuLjAzYmQ1NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xMDEyLDkgKzEwMTIsOSBAQAogCiBjb25maWcgTUlQU19MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMgorCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMiB8fCBQTUNfTVNQNDIwMF9FVkFMCisJZGVmYXVsdCAiNiIgaWYgTUlQU19DUFVfU0NBQ0hFCiAJZGVmYXVsdCAiNyIgaWYgU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMjggfHwgU05JX1JNIHx8IENQVV9DQVZJVU1fT0NURU9OCi0JZGVmYXVsdCAiNCIgaWYgUE1DX01TUDQyMDBfRVZBTAogCWRlZmF1bHQgIjUiCiAKIGNvbmZpZyBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IGM4OGM4MjEuLmQ2NzA5MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTM1NCw2ICszNTQsMjggQEAKIAlhdV9zeW5jKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF1MXhfaWMwX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKIHN0YXRpYyBpbnQgYXUxeF9pYzFfc2V0d2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKQEAgLTM3OSwyNSArNDAxLDIxIEBACiAvKgogICogaXJxX2NoaXBzIGZvciBib3RoIElDczsgdGhpcyB3YXkgdGhlIG1hc2sgaGFuZGxlcnMgY2FuIGJlCiAgKiBhcyBzaG9ydCBhcyBwb3NzaWJsZS4KLSAqCi0gKiBOT1RFOiB0aGUgLT5hY2soKSBjYWxsYmFjayBpcyB1c2VkIGJ5IHRoZSBoYW5kbGVfZWRnZV9pcnEKLSAqCSBmbG93aGFuZGxlciBvbmx5LCB0aGUgLT5tYXNrX2FjaygpIG9uZSBieSBoYW5kbGVfbGV2ZWxfaXJxLAotICoJIHNvIG5vIG5lZWQgZm9yIGFuIGlycV9jaGlwIGZvciBlYWNoIHR5cGUgb2YgaXJxIChsZXZlbC9lZGdlKS4KICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMF9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMCIsCi0JLmFjawkJPSBhdTF4X2ljMF9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMF9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzBfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMF9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMF91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMV9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMSIsCi0JLmFjawkJPSBhdTF4X2ljMV9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMV9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzFfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMV9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMV91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogCS5zZXRfd2FrZQk9IGF1MXhfaWMxX3NldHdha2UsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwppbmRleCBjYzMyYzY5Li40NWI2MWM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNlbHNlCiAJYXVfd3JpdGVsKDB4ZiwgQXUxNTAwX1BDSV9DRkcpOwogI2VuZGlmCisJYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7CiAjZW5kaWYKIAogCS8qIEluaXRpYWxpemUgc3lzX3BpbmZ1bmMgKi8KQEAgLTg1LDggKzg2LDYgQEAKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTEsIDEpOwkvKiBncmVlbiBvbiAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMiwgMCk7CS8qIHJlZCBvZmYgKi8KIAotCWJvYXJkX3BjaV9pZHNlbCA9IG10eDFfcGNpX2lkc2VsOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiNEcgU3lzdGVtcyBNVFgtMSBCb2FyZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwppbmRleCBlMjI3OGMwLi44MzVmM2YwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCkBAIC01MDMsNiArNTAzLDcgQEAKIHsKIAl1MTYgY2hpcF9pZDsKIAlpbnQgcmVzOworCXUzMiAqYm9vdGNyLCB2YWw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCiAJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0WzJdOwogCkBAIC01OTUsNyArNTk2LDEzIEBACiAKIAlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7CiAKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOworCWJvb3RjciA9ICh1MzIgKilpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKKwl2YWwgPSAqYm9vdGNyOworCWlvdW5tYXAoYm9vdGNyKTsKKworCS8qIFJlZ2lzdGVyIHdhdGNoZG9nIG9ubHkgaWYgZW5hYmxlZCBpbiBoYXJkd2FyZSAqLworCWlmICh2YWwgJiBBUjdfV0RUX0hXX0VOQSkKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCmluZGV4IGMxNDZkMWUuLjAwMDY0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLXkJCSs9IGNsay5vIGNwdS5vIGNzLm8gZ3Bpby5vIGlycS5vIHByb20ubyBzZXR1cC5vIHRpbWVyLm8gXAotCQkgICBkZXYtZHNwLm8gZGV2LWVuZXQubyBkZXYtcGNtY2lhLm8gZGV2LXVhcnQubworCQkgICBkZXYtZHNwLm8gZGV2LWVuZXQubyBkZXYtcGNtY2lhLm8gZGV2LXVhcnQubyBkZXYtd2R0Lm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIG9iai15CQkrPSBib2FyZHMvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCmluZGV4IDc4ZTE1NWQuLjA1YTM1Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8YmNtNjN4eF9kZXZfZW5ldC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2RzcC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjbWNpYS5oPgotI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3VhcnQuaD4KICNpbmNsdWRlIDxib2FyZF9iY205NjN4eC5oPgogCiAjZGVmaW5lIFBGWAkiYm9hcmRfYmNtOTYzeHg6ICIKQEAgLTc5NCw4ICs3OTMsNiBAQAogewogCXUzMiB2YWw7CiAKLQliY202M3h4X3VhcnRfcmVnaXN0ZXIoKTsKLQogCWlmIChib2FyZC5oYXNfcGNjYXJkKQogCQliY202M3h4X3BjbWNpYV9yZWdpc3RlcigpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYyBiL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCmluZGV4IDZkYzQzZjAuLjcwMzc4YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2NwdS1pbmZvLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KICNpbmNsdWRlIDxiY202M3h4X2lvLmg+CkBAIC0yODQsNiArMjg1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdG1wLCBleHBlY3RlZF9jcHVfaWQ7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBzb2MgcmVnaXN0ZXJzIGxvY2F0aW9uIGRlcGVuZHMgb24gY3B1IHR5cGUgKi8KIAlleHBlY3RlZF9jcHVfaWQgPSAwOwpAQCAtMjkzLDYgKzI5NSw3IEBACiAJICogQkNNNjMzOCBhcyB0aGUgc2FtZSBQcklkIGFzIEJDTTMzMDIgc2VlIGFyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKIAkgKi8KIAljYXNlIENQVV9CQ00zMzAyOgorCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQkNNNjMzOCI7CiAJCWV4cGVjdGVkX2NwdV9pZCA9IEJDTTYzMzhfQ1BVX0lEOwogCQliY202M3h4X3JlZ3NfYmFzZSA9IGJjbTk2MzM4X3JlZ3NfYmFzZTsKIAkJYmNtNjN4eF9pcnFzID0gYmNtOTYzMzhfaXJxczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCmluZGV4IDVmM2Q4OWMuLmIwNTE5NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXVhcnQuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+Ci0jaW5jbHVkZSA8YmNtNjN4eF9kZXZfdWFydC5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnRfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtMzksMyArMzgsNCBAQAogCXVhcnRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gYmNtNjN4eF9nZXRfaXJxX251bWJlcihJUlFfVUFSVDApOwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfdWFydF9kZXZpY2UpOwogfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3VhcnRfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmM3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtd2R0LmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5lbmQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4LXdkdCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfd2R0X3JlZ2lzdGVyKHZvaWQpCit7CisJd2R0X3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9XRFQpOworCXdkdF9yZXNvdXJjZXNbMF0uZW5kID0gd2R0X3Jlc291cmNlc1swXS5zdGFydDsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCArPSBSU0VUX1dEVF9TSVpFIC0gMTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfd2R0X2RldmljZSk7Cit9CithcmNoX2luaXRjYWxsKGJjbTYzeHhfd2R0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMgYi9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCmluZGV4IGIxOGEwY2EuLmQwMDU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwpAQCAtNzUsNyArNzUsOSBAQAogCQliY202MzQ4X2ExX3JlYm9vdCgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAidHJpZ2dlcmluZyB3YXRjaGRvZyBzb2Z0LXJlc2V0Li4uXG4iKTsKLQliY21fcGVyZl93cml0ZWwoU1lTX1BMTF9TT0ZUX1JFU0VULCBQRVJGX1NZU19QTExfQ1RMX1JFRyk7CisJcmVnID0gYmNtX3BlcmZfcmVhZGwoUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyB8PSBTWVNfUExMX1NPRlRfUkVTRVQ7CisJYmNtX3BlcmZfd3JpdGVsKHJlZywgUEVSRl9TWVNfUExMX0NUTF9SRUcpOwogCXdoaWxlICgxKQogCQk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggMzg0ZjE4NC4uNmYyYWNmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMTcsNiArMTcsMTUgQEAKIERFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CiBERUZJTkVfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CiAKK3N0YXRpYyBpbnQgb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKyNlbHNlCisJcmV0dXJuIGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jb3JlX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1NXMDsKQEAgLTE1MiwxMSArMTYxLDEwIEBACiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMDsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7CiAJCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMiksIGVuMCk7CkBAIC0xNjcsMjYgKzE3NSw1NyBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7Ci0JZW4wICY9IH4oMXVsbCA8PCBiaXQpOwotCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgorfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMUMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4wID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQpAQCAtMjAwLDEyICsyMzksNDYgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2soJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2spOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIFNldCBhZmZpbml0eSBmb3IgdGhlIGlycSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIodW5zaWduZWQgaW50IGlycSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCit7CisJaW50IGNwdTsKKwlpbnQgaW5kZXg7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDI7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGVzdCkpCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKKwkJZWxzZQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQorCXJldHVybiAwOworfQogI2VuZGlmCiAKKy8qCisgKiBOZXdlciBvY3Rlb24gY2hpcHMgaGF2ZSBzdXBwb3J0IGZvciBsb2NrbGVzcyBDSVUgb3BlcmF0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3YyID0geworCS5uYW1lID0gIkNJVTAiLAorCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyLAorCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfYWxsX3YyLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTAgPSB7CiAJLm5hbWUgPSAiQ0lVMCIsCiAJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGUsCkBAIC0yNjksMTEgKzM0MiwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMTsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwogCQllbjEgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKQEAgLTI4NCwyNiArMzU2LDU4IEBACiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjdm14X2dldF9jb3JlX251bSgpICogMiArIDEpKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwotCWVuMSAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7Ci0JY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgorfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJaW50IGluZGV4OworCWludCBjcHU7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDIgKyAxOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCitzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwKKwkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAotCXdyaXRlX2xvY2soJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCWludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjEgPQogCQkJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMQogCQkJCShjb3JlaWQgKiAyICsgMSkpOwpAQCAtMzE4LDEyICs0MjIsNDYgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDIgKyAxOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MV92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUxID0gewogCS5uYW1lID0gIkNJVTEiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlLApAQCAtNDIwLDYgKzU1OCw4IEBACiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDE7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogU2V0IHRoZSBkZWZhdWx0IGFmZmluaXR5IHRvIHRoZSBib290IGNwdS4gKi8KQEAgLTQzMCw2ICs1NzAsMTYgQEAKIAlpZiAoTlJfSVJRUyA8IE9DVEVPTl9JUlFfTEFTVCkKIAkJcHJfZXJyKCJvY3Rlb25faXJxX2luaXQ6IE5SX0lSUVMgaXMgc2V0IHRvbyBsb3dcbiIpOwogCisJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041OFhYX1BBU1MyX1gpIHx8CisJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYX1BBU1MyX1gpIHx8CisJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYX1BBU1MyX1gpKSB7CisJCWNoaXAwID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3YyOworCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV92MjsKKwl9IGVsc2UgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTE7CisJfQorCiAJLyogMCAtIDE1IHJlc2VydmVkIGZvciBpODI1OSBtYXN0ZXIgYW5kIHNsYXZlIGNvbnRyb2xsZXIuICovCiAKIAkvKiAxNyAtIDIzIE1pcHMgaW50ZXJuYWwgKi8KQEAgLTQ0MCwxNCArNTkwLDEyIEBACiAKIAkvKiAyNCAtIDg3IENJVV9JTlRfU1VNMCAqLwogCWZvciAoaXJxID0gT0NURU9OX0lSUV9XT1JLUTA7IGlycSA8PSBPQ1RFT05fSVJRX0JPT1RETUE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZvY3Rlb25faXJxX2NoaXBfY2l1MCwKLQkJCQkJIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDAsIGhhbmRsZV9wZXJjcHVfaXJxKTsKIAl9CiAKIAkvKiA4OCAtIDE1MSBDSVVfSU5UX1NVTTEgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV0RPRzA7IGlycSA8PSBPQ1RFT05fSVJRX1JFU0VSVkVEMTUxOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTEsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAxLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKQEAgLTUwNSwxNCArNjUzLDEwIEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgaW50IGlzX2lycV9lbmFibGVkX29uX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgY3B1KQogewotICAgICAgIHVuc2lnbmVkIGludCBpc3NldDsKLSNpZmRlZiBDT05GSUdfU01QCi0gICAgICAgaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLSNlbmRpZgorCXVuc2lnbmVkIGludCBpc3NldDsKKwlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJaW50IGJpdCA9IChpcnEgPCBPQ1RFT05fSVJRX1dET0cwKSA/Ci0JCWlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKKwkJICAgaXJxIC0gT0NURU9OX0lSUV9XT1JLUTAgOiBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwogICAgICAgIGlmIChpcnEgPCA2NCkgewogCQlpc3NldCA9IChjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKSAmCiAJCQkoMXVsbCA8PCBiaXQpKSA+PiBiaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCmluZGV4IDMyZDUxYTMxLi5jMTk4ZWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtNjUsMTEgKzY1LDEyIEBACiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfTUJPWF9TRVRYKGNvcmVpZCksIGFjdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjcHVtYXNrX3QgbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJdW5zaWduZWQgaW50IGFjdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIG1hc2spCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKm1hc2spCiAJCW9jdGVvbl9zZW5kX2lwaV9zaW5nbGUoaSwgYWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGVmZWRkYzguLjBiODliODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTQ4LDkgKzQ4LDkgQEAKICNkZWZpbmUgRklYX05fQ09MT1VSUyA4CiAJRklYX0NNQVBfQkVHSU4sCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTKSwKKwlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUyAqIDIpLAogI2Vsc2UKLQlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIEZJWF9OX0NPTE9VUlMsCisJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIDIpLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaAppbmRleCAzNmZkOTY5Li5jMGNmNzZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaApAQCAtMTksMTUgKzE5LDIwIEBACiAjZGVmaW5lIEdDTVBfR0RCX09GUwkJMHg4MDAwIC8qIEdsb2JhbCBEZWJ1ZyBCbG9jayAqLwogCiAvKiBPZmZzZXRzIHRvIGluZGl2aWR1YWwgR0NNUCByZWdpc3RlcnMgZnJvbSBHQ01QIGJhc2UgKi8KLSNkZWZpbmUgR0NNUE9GUyhibG9jaywgdGFnLCByZWcpCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMpCisjZGVmaW5lIEdDTVBPRlMoYmxvY2ssIHRhZywgcmVnKQlcCisJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUykKKyNkZWZpbmUgR0NNUE9GU24oYmxvY2ssIHRhZywgcmVnLCBuKSBcCisJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUyhuKSkKIAogI2RlZmluZSBHQ01QR0NCT0ZTKHJlZykJCUdDTVBPRlMoR0NCLCBHQ0IsIHJlZykKKyNkZWZpbmUgR0NNUEdDQk9GU24ocmVnLCBuKQlHQ01QT0ZTbihHQ0IsIEdDQiwgcmVnLCBuKQogI2RlZmluZSBHQ01QQ0xDQk9GUyhyZWcpCUdDTVBPRlMoQ0xDQiwgQ0NCLCByZWcpCiAjZGVmaW5lIEdDTVBDT0NCT0ZTKHJlZykJR0NNUE9GUyhDT0NCLCBDQ0IsIHJlZykKICNkZWZpbmUgR0NNUEdEQk9GUyhyZWcpCQlHQ01QT0ZTKEdEQiwgR0RCLCByZWcpCiAKIC8qIEdDTVAgcmVnaXN0ZXIgYWNjZXNzICovCiAjZGVmaW5lIEdDTVBHQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUEdDQk9GUyhyZWcpKQorI2RlZmluZSBHQ01QR0NCbihyZWcsIG4pICAgICAgICAgICAgICAgUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0NCT0ZTbihyZWcsIG4pKQogI2RlZmluZSBHQ01QQ0xDQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QQ0xDQk9GUyhyZWcpKQogI2RlZmluZSBHQ01QQ09DQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QQ09DQk9GUyhyZWcpKQogI2RlZmluZSBHQ01QR0RCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBHREJPRlMocmVnKSkKQEAgLTQ5LDEwICs1NCwxMCBAQAogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfR0NNUEJBU0VfTVNLCUdDTVBHQ0JNU0soR0NNUEJfR0NNUEJBU0UsIDE3KQogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfU0hGCTAKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01TSwlHQ01QR0NCTVNLKEdDTVBCX0NNREVGVEdULCAyKQotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNCTAKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTTEJMQotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEgMgotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTIgMworI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfRElTQUJMRUQJMAorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNCQkxCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMQkJMgorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTIJCTMKICNkZWZpbmUgR0NNUF9HQ0JfQ0NNQ19PRlMJCTB4MDAxMAkvKiBHbG9iYWwgQ00gQ29udHJvbCAqLwogI2RlZmluZSBHQ01QX0dDQl9HQ1NSQVBfT0ZTCQkweDAwMjAJLyogR2xvYmFsIENTUiBBY2Nlc3MgUHJpdmlsZWdlICovCiAjZGVmaW5lICBHQ01QX0dDQl9HQ1NSQVBfQ01BQ0NFU1NfU0hGCTAKQEAgLTExNSw1ICsxMjAsNiBAQAogI2RlZmluZSBHQ01QX0NDQl9EQkdHUk9VUF9PRlMJCTB4MDEwMAkJLyogRGVidWdCcmVhayBHcm91cCAqLwogCiBleHRlcm4gaW50IF9faW5pdCBnY21wX3Byb2JlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotCitleHRlcm4gaW50IF9faW5pdCBnY21wX25pb2N1KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGdjbXBfc2V0cmVnaW9uKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsKICNlbmRpZiAvKiBfQVNNX0dDTVBSRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaAppbmRleCBhOGY1NzM0Li45Yjk0MzZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lIF9BU01fR0lDUkVHU19ICiAKICN1bmRlZglHSUNJU0JZVEVMSVRUTEVFTkRJQU4KLSNkZWZpbmUgR0lDSVNXT1JETElUVExFRU5ESUFOCiAKIC8qIENvbnN0YW50cyAqLwogI2RlZmluZSBHSUNfUE9MX1BPUwkJCTEKQEAgLTIwLDExICsxOSw3IEBACiAjZGVmaW5lIEdJQ19UUklHX0VER0UJCQkxCiAjZGVmaW5lIEdJQ19UUklHX0xFVkVMCQkJMAogCi0jaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBHSUNfTlVNX0lOVFJTCQkJKDI0ICsgTlJfQ1BVUyAqIDIpCi0jZWxzZQotI2RlZmluZSBHSUNfTlVNX0lOVFJTCQkJMzIKLSNlbmRpZgogCiAjZGVmaW5lIE1TSyhuKSAoKDEgPDwgKG4pKSAtIDEpCiAjZGVmaW5lIFJFRzMyKGFkZHIpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKGFkZHIpKQpAQCAtNzAsMTMgKzY1LDEzIEBACiAjZGVmaW5lIFVTTV9WSVNJQkxFX1NFQ1RJT05fU0laRQkweDEwMDAwCiAKIC8qIFJlZ2lzdGVyIE1hcCBmb3IgU2hhcmVkIFNlY3Rpb24gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikgfHwgZGVmaW5lZChHSUNJU1dPUkRMSVRUTEVFTkRJQU4pCiAKICNkZWZpbmUJR0lDX1NIX0NPTkZJR19PRlMJCTB4MDAwMAogCiAvKiBTaGFyZWQgR2xvYmFsIENvdW50ZXIgKi8KICNkZWZpbmUgR0lDX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAxMAogI2RlZmluZSBHSUNfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDE0CisjZGVmaW5lIEdJQ19TSF9SRVZJU0lPTklEX09GUwkJMHgwMDIwCiAKIC8qIEludGVycnVwdCBQb2xhcml0eSAqLwogI2RlZmluZSBHSUNfU0hfUE9MXzMxXzBfT0ZTCQkweDAxMDAKQEAgLTE2NCwyNCArMTU5LDMxIEBACiAJKEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMgKyAoMzIgKiAoaW50cikpICsgKCgodnBlKSAvIDMyKSAqIDQpKQogI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfQklUKHZwZSkJKDEgPDwgKCh2cGUpICUgMzIpKQogCisvKiBDb252ZXJ0IGFuIGludGVycnVwdCBudW1iZXIgdG8gYSBieXRlIG9mZnNldC9iaXQgZm9yIG11bHRpLXdvcmQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdJQ19JTlRSX09GUyhpbnRyKSAoKChpbnRyKSAvIDMyKSo0KQorI2RlZmluZSBHSUNfSU5UUl9CSVQoaW50cikgKChpbnRyKSAlIDMyKQorCiAvKiBQb2xhcml0eSA6IFJlc2V0IFZhbHVlIGlzIGFsd2F5cyAwICovCiAjZGVmaW5lIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTCQkweDAxMDAKICNkZWZpbmUgR0lDX1NFVF9QT0xBUklUWShpbnRyLCBwb2wpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKHBvbCkgPDwgKChpbnRyKSAlIDMyKSkKKwlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIChwb2wpIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogVHJpZ2dlcmluZyA6IFJlc2V0IFZhbHVlIGlzIGFsd2F5cyAwICovCiAjZGVmaW5lIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMJCTB4MDE4MAogI2RlZmluZSBHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZykgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICh0cmlnKSA8PCAoKGludHIpICUgMzIpKQorCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAodHJpZykgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBNYXNrIG1hbmlwdWxhdGlvbiAqLwogI2RlZmluZSBHSUNfU0hfU01BU0tfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KKyNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50cikgXAorCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIDEgPDwgR0lDX0lOVFJfQklUKGludHIpKQogI2RlZmluZSBHSUNfU0hfUk1BU0tfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCisjZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIpIFwKKwlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAxIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogUmVnaXN0ZXIgTWFwIGZvciBMb2NhbCBTZWN0aW9uICovCiAjZGVmaW5lIEdJQ19WUEVfQ1RMX09GUwkJCTB4MDAwMApAQCAtMjE5LDE2MSArMjIxLDYgQEAKICNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMDAKICNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMDQKIAotI2Vsc2UgLyogQ09ORklHX0NQVV9CSUdfRU5ESUFOICovCi0KLSNkZWZpbmUJR0lDX1NIX0NPTkZJR19PRlMJCTB4MDAwMAotCi0vKiBTaGFyZWQgR2xvYmFsIENvdW50ZXIgKi8KLSNkZWZpbmUgR0lDX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAxNAotI2RlZmluZSBHSUNfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDEwCi0KLS8qIEludGVycnVwdCBQb2xhcml0eSAqLwotI2RlZmluZSBHSUNfU0hfUE9MXzMxXzBfT0ZTCQkweDAxMDQKLSNkZWZpbmUgR0lDX1NIX1BPTF82M18zMl9PRlMJCTB4MDEwMAotI2RlZmluZSBHSUNfU0hfUE9MXzk1XzY0X09GUwkJMHgwMTBjCi0jZGVmaW5lIEdJQ19TSF9QT0xfMTI3Xzk2X09GUwkJMHgwMTA4Ci0jZGVmaW5lIEdJQ19TSF9QT0xfMTU5XzEyOF9PRlMJCTB4MDExNAotI2RlZmluZSBHSUNfU0hfUE9MXzE5MV8xNjBfT0ZTCQkweDAxMTAKLSNkZWZpbmUgR0lDX1NIX1BPTF8yMjNfMTkyX09GUwkJMHgwMTFjCi0jZGVmaW5lIEdJQ19TSF9QT0xfMjU1XzIyNF9PRlMJCTB4MDExOAotCi0vKiBFZGdlL0xldmVsIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX1RSSUdfMzFfMF9PRlMJCTB4MDE4NAotI2RlZmluZSBHSUNfU0hfVFJJR182M18zMl9PRlMJCTB4MDE4MAotI2RlZmluZSBHSUNfU0hfVFJJR185NV82NF9PRlMJCTB4MDE4YwotI2RlZmluZSBHSUNfU0hfVFJJR18xMjdfOTZfT0ZTCQkweDAxODgKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTU5XzEyOF9PRlMJCTB4MDE5NAotI2RlZmluZSBHSUNfU0hfVFJJR18xOTFfMTYwX09GUwkJMHgwMTkwCi0jZGVmaW5lIEdJQ19TSF9UUklHXzIyM18xOTJfT0ZTCQkweDAxOWMKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMjU1XzIyNF9PRlMJCTB4MDE5OAotCi0vKiBEdWFsIEVkZ2UgVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfRFVBTF8zMV8wX09GUwkJMHgwMjA0Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzYzXzMyX09GUwkJMHgwMjAwCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzk1XzY0X09GUwkJMHgwMjBjCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzEyN185Nl9PRlMJCTB4MDIwOAotI2RlZmluZSBHSUNfU0hfRFVBTF8xNTlfMTI4X09GUwkJMHgwMjE0Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzE5MV8xNjBfT0ZTCQkweDAyMTAKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMjIzXzE5Ml9PRlMJCTB4MDIxYwotI2RlZmluZSBHSUNfU0hfRFVBTF8yNTVfMjI0X09GUwkJMHgwMjE4Ci0KLS8qIFNldC9DbGVhciBjb3JyZXNwb25kaW5nIGJpdCBpbiBFZGdlIERldGVjdCBSZWdpc3RlciAqLwotI2RlZmluZSBHSUNfU0hfV0VER0VfT0ZTCQkweDAyODAKLQotLyogUmVzZXQgTWFzayAtIERpc2FibGVzIEludGVycnVwdCAqLwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMzFfMF9PRlMJCTB4MDMwNAotI2RlZmluZSBHSUNfU0hfUk1BU0tfNjNfMzJfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzk1XzY0X09GUwkJMHgwMzBjCi0jZGVmaW5lIEdJQ19TSF9STUFTS18xMjdfOTZfT0ZTCQkweDAzMDgKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzE1OV8xMjhfT0ZTCTB4MDMxNAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTkxXzE2MF9PRlMJMHgwMzEwCi0jZGVmaW5lIEdJQ19TSF9STUFTS18yMjNfMTkyX09GUwkweDAzMWMKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzI1NV8yMjRfT0ZTCTB4MDMxOAotCi0vKiBTZXQgTWFzayAoV08pIC0gRW5hYmxlcyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzMxXzBfT0ZTCQkweDAzODQKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzYzXzMyX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TSF9TTUFTS185NV82NF9PRlMJCTB4MDM4YwotI2RlZmluZSBHSUNfU0hfU01BU0tfMTI3Xzk2X09GUwkJMHgwMzg4Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS18xNTlfMTI4X09GUwkweDAzOTQKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzE5MV8xNjBfT0ZTCTB4MDM5MAotI2RlZmluZSBHSUNfU0hfU01BU0tfMjIzXzE5Ml9PRlMJMHgwMzljCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18yNTVfMjI0X09GUwkweDAzOTgKLQotLyogR2xvYmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChSTykgLSBCaXQgU2V0ID09IEludGVycnVwdCBlbmFibGVkICovCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzMxXzBfT0ZTCQkweDA0MDQKLSNkZWZpbmUgR0lDX1NIX01BU0tfNjNfMzJfT0ZTCQkweDA0MDAKLSNkZWZpbmUgR0lDX1NIX01BU0tfOTVfNjRfT0ZTCQkweDA0MGMKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTI3Xzk2X09GUwkJMHgwNDA4Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzE1OV8xMjhfT0ZTCQkweDA0MTQKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTkxXzE2MF9PRlMJCTB4MDQxMAotI2RlZmluZSBHSUNfU0hfTUFTS18yMjNfMTkyX09GUwkJMHgwNDFjCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzI1NV8yMjRfT0ZTCQkweDA0MTgKLQotLyogUGVuZGluZyBHbG9iYWwgSW50ZXJydXB0cyAoUk8pICovCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzMxXzBfT0ZTCQkweDA0ODQKLSNkZWZpbmUgR0lDX1NIX1BFTkRfNjNfMzJfT0ZTCQkweDA0ODAKLSNkZWZpbmUgR0lDX1NIX1BFTkRfOTVfNjRfT0ZTCQkweDA0OGMKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTI3Xzk2X09GUwkJMHgwNDg4Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzE1OV8xMjhfT0ZTCQkweDA0OTQKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTkxXzE2MF9PRlMJCTB4MDQ5MAotI2RlZmluZSBHSUNfU0hfUEVORF8yMjNfMTkyX09GUwkJMHgwNDljCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzI1NV8yMjRfT0ZTCQkweDA0OTgKLQotI2RlZmluZSBHSUNfU0hfSU5UUl9NQVBfVE9fUElOX0JBU0VfT0ZTCTB4MDUwMAotCi0vKiBNYXBzIEludGVycnVwdCBYIHRvIGEgUGluICovCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fUElOKGludHIpIFwKLQkoR0lDX1NIX0lOVFJfTUFQX1RPX1BJTl9CQVNFX09GUyArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUwkweDIwMDQKLQotLyoKLSAqIE1hcHMgSW50ZXJydXB0IFggdG8gYSBWUEUuICBUaGlzIGlzIG1vcmUgY29tcGxleCB0aGFuIHRoZSBMRSBjYXNlLCBhcwotICogb2RkIGFuZCBldmVuIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHRyYW5zcG9zZWQuICBJdCBkb2VzIHdvcmsgLSB0cnVzdCBtZSEKLSAqLwotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfT0ZGKGludHIsIHZwZSkgXAotCShHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTICsgKDMyICogKGludHIpKSArIFwKLQkoKCgoKHZwZSkgLyAzMikgXiAxKSAtIDEpICogNCkpCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19CSVQodnBlKQkoMSA8PCAoKHZwZSkgJSAzMikpCi0KLS8qIFBvbGFyaXR5ICovCi0jZGVmaW5lIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTCQkweDAxMDAKLSNkZWZpbmUgR0lDX1NFVF9QT0xBUklUWShpbnRyLCBwb2wpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksIChwb2wpIDw8ICgoaW50cikgJSAzMikpCi0KLS8qIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX1NFVF9UUklHR0VSX09GUwkJMHgwMTgwCi0jZGVmaW5lIEdJQ19TRVRfVFJJR0dFUihpbnRyLCB0cmlnKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICh0cmlnKSA8PCAoKGludHIpICUgMzIpKQotCi0vKiBNYXNrIG1hbmlwdWxhdGlvbiAqLwotI2RlZmluZSBHSUNfU0hfU01BU0tfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NFVF9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCi0jZGVmaW5lIEdJQ19TSF9STUFTS19PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KLS8qIFJlZ2lzdGVyIE1hcCBmb3IgTG9jYWwgU2VjdGlvbiAqLwotI2RlZmluZSBHSUNfVlBFX0NUTF9PRlMJCQkweDAwMDAKLSNkZWZpbmUgR0lDX1ZQRV9QRU5EX09GUwkJMHgwMDA0Ci0jZGVmaW5lIEdJQ19WUEVfTUFTS19PRlMJCTB4MDAwOAotI2RlZmluZSBHSUNfVlBFX1JNQVNLX09GUwkJMHgwMDBjCi0jZGVmaW5lIEdJQ19WUEVfU01BU0tfT0ZTCQkweDAwMTAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9NQVBfT0ZTCQkweDAwNDAKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX01BUF9PRlMJCTB4MDA0NAotI2RlZmluZSBHSUNfVlBFX1RJTUVSX01BUF9PRlMJCTB4MDA0OAotI2RlZmluZSBHSUNfVlBFX1BFUkZDVFJfTUFQX09GUwkJMHgwMDUwCi0jZGVmaW5lIEdJQ19WUEVfU1dJTlQwX01BUF9PRlMJCTB4MDA1NAotI2RlZmluZSBHSUNfVlBFX1NXSU5UMV9NQVBfT0ZTCQkweDAwNTgKLSNkZWZpbmUgR0lDX1ZQRV9PVEhFUl9BRERSX09GUwkJMHgwMDgwCi0jZGVmaW5lIEdJQ19WUEVfV0RfQ09ORklHMF9PRlMJCTB4MDA5MAotI2RlZmluZSBHSUNfVlBFX1dEX0NPVU5UMF9PRlMJCTB4MDA5NAotI2RlZmluZSBHSUNfVlBFX1dEX0lOSVRJQUwwX09GUwkJMHgwMDk4Ci0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9MT19PRlMJCTB4MDBhNAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfSElfT0ZTCQkweDAwYTAKLQotI2RlZmluZSBHSUNfVlBFX0VJQ19TSEFET1dfU0VUX0JBU0UJMHgwMTAwCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1NTKGludHIpIFwKLQkoR0lDX0VJQ19TSEFET1dfU0VUX0JBU0UgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1ZFQ19CQVNFCQkweDA4MDAKLSNkZWZpbmUgR0lDX1ZQRV9FSUNfVkVDKGludHIpIFwKLQkoR0lDX1ZQRV9FSUNfVkVDX0JBU0UgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9OTUlfT0ZTCQkweDEwMDAKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX1lRX09GUwkJMHgxMDA0Ci0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9JTlRfMzFfMF9PRlMJMHgxMDgwCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9JTlRfNjNfMzJfT0ZTCTB4MTA4NAotCi0vKiBVc2VyIE1vZGUgVmlzaWJsZSBTZWN0aW9uIFJlZ2lzdGVyIE1hcCAqLwotI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAwNAotI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAwMAotCi0jZW5kaWYgLyogIUxFICovCi0KIC8qIE1hc2tzICovCiAjZGVmaW5lIEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX1NIRgkyOAogI2RlZmluZSBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9NU0sJKE1TSygxKSA8PCBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9TSEYpCkBAIC00NzMsMTIgKzMyMCwxMyBAQAogICogaW4gYnVpbGRpbmcgaXBpX21hcC4KICAqLwogc3RydWN0IGdpY19pbnRyX21hcCB7Ci0JdW5zaWduZWQgaW50IGludHJudW07IAkvKiBFeHQgSW50ciBOdW0gCSovCiAJdW5zaWduZWQgaW50IGNwdW51bTsJLyogRGlyZWN0ZWQgdG8gdGhpcyBDUFUgKi8KIAl1bnNpZ25lZCBpbnQgcGluOwkvKiBEaXJlY3RlZCB0byB0aGlzIFBpbiAqLwogCXVuc2lnbmVkIGludCBwb2xhcml0eTsJLyogUG9sYXJpdHkgOiArLy0JKi8KIAl1bnNpZ25lZCBpbnQgdHJpZ3R5cGU7CS8qIFRyaWdnZXIgIDogRWRnZS9MZXZsICovCi0JdW5zaWduZWQgaW50IGlwaWZsYWc7CS8qIElzIHVzZWQgZm9yIElQSSA/CSovCisJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBNaXNjIGZsYWdzCSovCisjZGVmaW5lIEdJQ19GTEFHX0lQSSAgICAgICAgICAgMHgwMQorI2RlZmluZSBHSUNfRkxBR19UUkFOU1BBUkVOVCAgIDB4MDIKIH07CiAKIGV4dGVybiB2b2lkIGdpY19pbml0KHVuc2lnbmVkIGxvbmcgZ2ljX2Jhc2VfYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAppbmRleCBkZTcxNjk0Li4yMWNiYmM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCkBAIC03OCw2ICs3OCw5IEBACiAjZGVmaW5lIEFSN19SRUZfQ0xPQ0sJMjUwMDAwMDAKICNkZWZpbmUgQVI3X1hUQUxfQ0xPQ0sJMjQwMDAwMDAKIAorLyogRENMICovCisjZGVmaW5lIEFSN19XRFRfSFdfRU5BCTB4MTAKKwogc3RydWN0IHBsYXRfY3BtYWNfZGF0YSB7CiAJaW50IHJlc2V0X2JpdDsKIAlpbnQgcG93ZXJfYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAppbmRleCBmZWVhMDAxLi45MTU5NWZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaApAQCAtMTA0LDYgKzEwNCw4IEBACiAKIAlpZiAoKGdwaW8gPj0gOCkgJiYgKGdwaW8gPD0gMTUpKQogCQlyZXR1cm4gTUFLRV9JUlEoMCwgMjkpOwkJLyogc2hhcmVkIEdQSU8yMDhfMjE1ICovCisKKwlyZXR1cm4gLUVOWElPOwogfQogCiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfdWFydC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl91YXJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzQ4ZjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl91YXJ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgQkNNNjNYWF9ERVZfVUFSVF9IXwotI2RlZmluZSBCQ002M1hYX0RFVl9VQVJUX0hfCi0KLWludCBiY202M3h4X3VhcnRfcmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZiAvKiBCQ002M1hYX0RFVl9VQVJUX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKaW5kZXggZjY4Mzc0Mi4uMDlhNTliYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtNDQsOCArNDQsOCBAQAogCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCiAJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKIAkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UgfAlcCisJCQkJICBTRF9CQUxBTkNFX0VYRUMsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKIAkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggY2U1YjZlMjcuLjk5NDdlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKICNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKLSNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTEKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCShQQUdFX1NJWkUgPCAweDQwMDApCiAjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKICNkZWZpbmUgY3B1X2hhc19kc3AJCTAKICNkZWZpbmUgY3B1X2hhc19lanRhZwkJMApAQCAtNTQsNiArNTQsNSBAQAogI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAogI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKICNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQotI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMQogCiAjZW5kaWYgLyogX19BU01fTUFDSF9MT09OR1NPTl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBkOTc0MzUzLi42MDgzZGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CkBAIC0zNiwxMSArMzcsMTMgQEAKICNpZmRlZiBDT05GSUdfMzJCSVQKICNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQKCkJCQkJCQlcCiAJd3JpdGVfYzBfY29udGV4dCgodW5zaWduZWQgbG9uZykgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDI1KTsJXAorCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsJCQkJCVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQogI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNik7CVwKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CQkJCQlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgogCkBAIC0xNjUsMTIgKzE2OCwxMiBAQAogCSAqIGhhdmluZyBBU0lEX01BU0sgc21hbGxlciB0aGFuIHRoZSBoYXJkd2FyZSBtYXhpbXVtLAogCSAqIG1ha2Ugc3VyZSBubyAic29mdCIgYml0cyBiZWNvbWUgImhhcmQiLi4uCiAJICovCi0Jd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQotCQkJfCAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAorCQkJIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCkBAIC0yMjYsMTEgKzIyOSwxMSBAQAogCX0KIAkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLwogCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAotCSAgICAgICAgICAgICAgICAgKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkgJiBBU0lEX01BU0spKTsKKwkgICAgICAgICAgICAgICAgIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGU2MDBjZWQuLjUwNTExYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfTUlQU19TRVRVUF9ICiAjZGVmaW5lIF9NSVBTX1NFVFVQX0gKIAotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQkyNTYKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNDA5NgogCiAjaWZkZWYgIF9fS0VSTkVMX18KIGV4dGVybiB2b2lkIHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXRjX2lwaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKaW5kZXggOGNlNTE3NS4uMTUyNzhkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHNtdGNfaXBpICp0YWlsOwogCWludCBkZXB0aDsKKwlpbnQgcmVzY2hlZF9mbGFnOwkvKiByZXNjaGVkdWxlIGFscmVhZHkgcXVldWVkICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc210Y19pcGlfbnEoc3RydWN0IHNtdGNfaXBpX3EgKnEsIHN0cnVjdCBzbXRjX2lwaSAqcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4OTAwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX01JUFNfU1BSQU1fSAorI2RlZmluZSBfTUlQU19TUFJBTV9ICisKKyNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorZXh0ZXJuIF9faW5pdCB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHsgfTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMiAqLworCisjZW5kaWYgLyogX01JUFNfU1BSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwMWNjMTYzLi44NDVkYTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODYsMTQgKzg2LDcgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0ga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQkJXAotCQkJCQkJCQlcCi0JcmV0OwkJCQkJCQlcCi19KQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGt6YWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZWxzZQogI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2lycS5jIGIvYXJjaC9taXBzL2phenovaXJxLmMKaW5kZXggN2ZkMTcwZC4uN2JkMzJkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovaXJxLmMKKysrIGIvYXJjaC9taXBzL2phenovaXJxLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiByNDAzMF90aW1lcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSByNDAzMF90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJSNDAzMCB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwppbmRleCBlMDJmNzliLi5iZmVhMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWJjbTE0ODBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKaW5kZXggNjk5NmRhNC4uMDBhNGRhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGRzMTI4N19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBkczEyODdfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImRzMTI4NyIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwppbmRleCA5MjM1MWUwLi5mNWQyNjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBndDY0MXh4X3RpbWVyMF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBndDY0MXh4X3RpbWVyMF9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiZ3Q2NDF4eF90aW1lcjAiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCmluZGV4IDI2NTIzNjIuLmI0NjlhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogc3RydWN0IGlycWFjdGlvbiBjMF9jb21wYXJlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGMwX2NvbXBhcmVfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwppbmRleCBhYzU5MDNkLi5kYTc4ZWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlzYjEyNTBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwppbmRleCAwMDM3ZjIxLi4yMThlZTZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0eHg5dG1yX2lycSA9IHsKIAkuaGFuZGxlcgk9IHR4eDl0bXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInR4eDl0bXIiLAogCS5kZXZfaWQJCT0gJnR4eDlfY2xvY2tfZXZlbnRfZGV2aWNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGY3MDk2NTcuLjdhNTE4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vd2F0Y2guaD4KLQorI2luY2x1ZGUgPGFzbS9zcHJhbS5oPgogLyoKICAqIE5vdCBhbGwgb2YgdGhlIE1JUFMgQ1BVcyBoYXZlIHRoZSAid2FpdCIgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlLiBNb3Jlb3ZlciwKICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgIndhaXQiIGZlYXR1cmUgZGlmZmVycyBiZXR3ZWVuIENQVSBmYW1pbGllcy4gVGhpcwpAQCAtNzExLDEyICs3MTEsNiBAQAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQogCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKLWV4dGVybiB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHt9Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9taXBzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMsIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJZGVjb2RlX2NvbmZpZ3MoYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IDUzMWNlN2IuLmVhNjk1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0xOTEsNiArMTkxLDcgQEAKIAkvKiBTZXQgdGhlIFNQIGFmdGVyIGFuIGVtcHR5IHB0X3JlZ3MuICAqLwogCVBUUl9MSQkJc3AsIF9USFJFQURfU0laRSAtIDMyIC0gUFRfU0laRQogCVBUUl9BRERVCXNwLCAkMjgKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCiAJc2V0X3NhdmVkX3NwCXNwLCB0MCwgdDEKIAlQVFJfU1VCVQlzcCwgNCAqIFNaUkVHCQkjIGluaXQgc3RhY2sgcG9pbnRlcgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKaW5kZXggZjdkOGQ1ZC4uZWQ1YzQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCmluZGV4IGQyMDcyY2QuLmIxODFmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCkBAIC0xNCwzOCArMTQsMjMgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZ2ljX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlLCBfbWFwc2l6ZSwgbnVtdnBlcywgbnVtaW50cnM7Ci1zdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCAqX2ludHJtYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlOworc3RhdGljIHVuc2lnbmVkIGludCBnaWNfaXJxX2ZsYWdzW0dJQ19OVU1fSU5UUlNdOworI2RlZmluZSBHSUNfSVJRX0ZMQUdfRURHRSAgICAgIDB4MDAwMQogCi1zdGF0aWMgc3RydWN0IGdpY19wY3B1X21hc2sgcGNwdV9tYXNrc1tOUl9DUFVTXTsKK3N0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IGdpY19wZW5kaW5nX3JlZ3MgcGVuZGluZ19yZWdzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfaW50cm1hc2tfcmVncyBpbnRybWFza19yZWdzW05SX0NQVVNdOwogCi0jZGVmaW5lIGdpY193ZWRnZWIyYm9rIDAJLyoKLQkJCQkgKiBDYW4gR0lDIGhhbmRsZSBiMmIgd3JpdGVzIHRvIHdlZGdlIHJlZ2lzdGVyPwotCQkJCSAqLwotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2ljX3dlZGdlYjJiX2xvY2spOwotI2VuZGlmCi0KIHZvaWQgZ2ljX3NlbmRfaXBpKHVuc2lnbmVkIGludCBpbnRyKQogewotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJcHJfZGVidWcoIkNQVSVkOiAlcyBzdGF0dXMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywKIAkJIHJlYWRfYzBfc3RhdHVzKCkpOwotCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwogCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCAweDgwMDAwMDAwIHwgaW50cik7Ci0JaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwotCX0KIH0KIAogLyogVGhpcyBpcyBNYWx0YSBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgKi8KLXN0YXRpYyB2b2lkIHZwZV9sb2NhbF9zZXR1cCh1bnNpZ25lZCBpbnQgbnVtdnBlcykKK3N0YXRpYyB2b2lkIF9faW5pdCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyB0aW1lcl9pbnRlcnJ1cHQgPSA1LCBwZXJmX2ludGVycnVwdCA9IDU7CkBAIC0xMDUsNDQgKzkwLDM0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiAKLQlpZiAoX2ludHJtYXBbaXJxXS50cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKSB7Ci0JCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKKwlpZiAoZ2ljX2lycV9mbGFnc1tpcnFdICYgR0lDX0lSUV9GTEFHX0VER0UpCiAJCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCBpcnEpOwotCQlpZiAoIWdpY193ZWRnZWIyYm9rKSB7Ci0JCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgZ2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19DTFJfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX0NMUl9JTlRSX01BU0soaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX1NFVF9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfU0VUX0lOVFJfTUFTSyhpcnEpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTU1LDkgKzEzMCw4IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCWk7CiAKLQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0KKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyglZCkgY2FsbGVkXG4iLCBfX2Z1bmNfXywgaXJxKTsKIAljcHVtYXNrX2FuZCgmdG1wLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybiAtMTsKQEAgLTE2OCwxMyArMTQyLDYgQEAKIAkJLyogUmUtcm91dGUgdGhpcyBJUlEgKi8KIAkJR0lDX1NIX01BUF9UT19WUEVfU01BU0soaXJxLCBmaXJzdF9jcHUodG1wKSk7CiAKLQkJLyoKLQkJICogRklYTUU6IGFzc3VtcHRpb24gdGhhdCBfaW50cm1hcCBpcyBvcmRlcmVkIGFuZCBoYXMgbm8gaG9sZXMKLQkJICovCi0KLQkJLyogVXBkYXRlIHRoZSBpbnRyX21hcCAqLwotCQlfaW50cm1hcFtpcnFdLmNwdW51bSA9IGZpcnN0X2NwdSh0bXApOwotCiAJCS8qIFVwZGF0ZSB0aGUgcGNwdV9tYXNrcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQkJY2xlYXJfYml0KGlycSwgcGNwdV9tYXNrc1tpXS5wY3B1X21hc2spOwpAQCAtMjAxLDggKzE2OCw5IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAotCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19zZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAorCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlLAorCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAkvKiBTZXR1cCBJbnRyIHRvIFBpbiBtYXBwaW5nICovCiAJaWYgKHBpbiAmIEdJQ19NQVBfVE9fTk1JX01TSykgewpAQCAtMjI3LDM4ICsxOTUsNDMgQEAKIAlHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZ3R5cGUpOwogCiAJLyogSW5pdCBJbnRyIE1hc2tzICovCi0JR0lDX1NFVF9JTlRSX01BU0soaW50ciwgMCk7CisJR0lDX0NMUl9JTlRSX01BU0soaW50cik7CisJLyogSW5pdGlhbGlzZSBwZXItY3B1IEludGVycnVwdCBzb2Z0d2FyZSBtYXNrcyAqLworCWlmIChmbGFncyAmIEdJQ19GTEFHX0lQSSkKKwkJc2V0X2JpdChpbnRyLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19UUkFOU1BBUkVOVCkKKwkJR0lDX1NFVF9JTlRSX01BU0soaW50cik7CisJaWYgKHRyaWd0eXBlID09IEdJQ19UUklHX0VER0UpCisJCWdpY19pcnFfZmxhZ3NbaW50cl0gfD0gR0lDX0lSUV9GTEFHX0VER0U7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19iYXNpY19pbml0KGludCBudW1pbnRycywgaW50IG51bXZwZXMsCisJCQlzdHJ1Y3QgZ2ljX2ludHJfbWFwICppbnRybWFwLCBpbnQgbWFwc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3B1OwogCiAJLyogU2V0dXAgZGVmYXVsdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0lDX05VTV9JTlRSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bWludHJzOyBpKyspIHsKIAkJR0lDX1NFVF9QT0xBUklUWShpLCBHSUNfUE9MX1BPUyk7CiAJCUdJQ19TRVRfVFJJR0dFUihpLCBHSUNfVFJJR19MRVZFTCk7Ci0JCUdJQ19TRVRfSU5UUl9NQVNLKGksIDApOworCQlHSUNfQ0xSX0lOVFJfTUFTSyhpKTsKKwkJaWYgKGkgPCBHSUNfTlVNX0lOVFJTKQorCQkJZ2ljX2lycV9mbGFnc1tpXSA9IDA7CiAJfQogCiAJLyogU2V0dXAgc3BlY2lmaWNzICovCi0JZm9yIChpID0gMDsgaSA8IF9tYXBzaXplOyBpKyspIHsKLQkJY3B1ID0gX2ludHJtYXBbaV0uY3B1bnVtOworCWZvciAoaSA9IDA7IGkgPCBtYXBzaXplOyBpKyspIHsKKwkJY3B1ID0gaW50cm1hcFtpXS5jcHVudW07CiAJCWlmIChjcHUgPT0gWCkKIAkJCWNvbnRpbnVlOwotCi0JCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgX2ludHJtYXBbaV0uaW50cm51bSA9PSAwICYmCi0JCQkJCV9pbnRybWFwW2ldLmlwaWZsYWcgPT0gMCkKKwkJaWYgKGNwdSA9PSAwICYmIGkgIT0gMCAmJiBpbnRybWFwW2ldLmZsYWdzID09IDApCiAJCQljb250aW51ZTsKLQotCQlzZXR1cF9pbnRyKF9pbnRybWFwW2ldLmludHJudW0sCi0JCQkJX2ludHJtYXBbaV0uY3B1bnVtLAotCQkJCV9pbnRybWFwW2ldLnBpbiwKLQkJCQlfaW50cm1hcFtpXS5wb2xhcml0eSwKLQkJCQlfaW50cm1hcFtpXS50cmlndHlwZSk7Ci0JCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KLQkJaWYgKF9pbnRybWFwW2ldLmlwaWZsYWcpCi0JCQlzZXRfYml0KF9pbnRybWFwW2ldLmludHJudW0sIHBjcHVfbWFza3NbY3B1XS5wY3B1X21hc2spOworCQlnaWNfc2V0dXBfaW50cihpLAorCQkJaW50cm1hcFtpXS5jcHVudW0sCisJCQlpbnRybWFwW2ldLnBpbiwKKwkJCWludHJtYXBbaV0ucG9sYXJpdHksCisJCQlpbnRybWFwW2ldLnRyaWd0eXBlLAorCQkJaW50cm1hcFtpXS5mbGFncyk7CiAJfQogCiAJdnBlX2xvY2FsX3NldHVwKG51bXZwZXMpOwpAQCAtMjczLDEyICsyNDYsMTEgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgaXJxYmFzZSkKIHsKIAl1bnNpZ25lZCBpbnQgZ2ljY29uZmlnOworCWludCBudW12cGVzLCBudW1pbnRyczsKIAogCV9naWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoZ2ljX2Jhc2VfYWRkciwKIAkJCQkJCSAgICBnaWNfYWRkcnNwYWNlX3NpemUpOwogCV9pcnFiYXNlID0gaXJxYmFzZTsKLQlfaW50cm1hcCA9IGludHJfbWFwOwotCV9tYXBzaXplID0gaW50cl9tYXBfc2l6ZTsKIAogCUdJQ1JFQUQoR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpLCBnaWNjb25maWcpOwogCW51bWludHJzID0gKGdpY2NvbmZpZyAmIEdJQ19TSF9DT05GSUdfTlVNSU5UUlNfTVNLKSA+PgpAQCAtMjkwLDUgKzI2Miw1IEBACiAKIAlwcl9kZWJ1ZygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQlnaWNfYmFzaWNfaW5pdCgpOworCWdpY19iYXNpY19pbml0KG51bWludHJzLCBudW12cGVzLCBpbnRyX21hcCwgaW50cl9tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDYyNDJiYzYuLmI3N2ZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00MjgsMyArNDI4LDkgQEAKIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsICZyZWdzLCAwLAogCSAgICAgICAgICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9sb29rdXBfZGNvb2tpZSh1MzIgYTAsIHUzMiBhMSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwlzaXplX3QgbGVuKQoreworCXJldHVybiBzeXNfbG9va3VwX2Rjb29raWUobWVyZ2VfNjQoYTAsIGExKSwgYnVmLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDliYmY5NzcuLjE0ZGRlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCVBUUglzeXNfaW9fc3VibWl0CiAJUFRSCXN5c19pb19jYW5jZWwJCQkvKiA0MjQ1ICovCiAJUFRSCXN5c19leGl0X2dyb3VwCi0JUFRSCXN5c19sb29rdXBfZGNvb2tpZQorCVBUUglzeXMzMl9sb29rdXBfZGNvb2tpZQogCVBUUglzeXNfZXBvbGxfY3JlYXRlCiAJUFRSCXN5c19lcG9sbF9jdGwKIAlQVFIJc3lzX2Vwb2xsX3dhaXQJCQkvKiA0MjUwICovCkBAIC01MDUsNyArNTA1LDcgQEAKIAlQVFIJc3lzX2ZjaG1vZGF0CiAJUFRSCXN5c19mYWNjZXNzYXQJCQkvKiA0MzAwICovCiAJUFRSCWNvbXBhdF9zeXNfcHNlbGVjdDYKLQlQVFIJc3lzX3Bwb2xsCisJUFRSCWNvbXBhdF9zeXNfcHBvbGwKIAlQVFIJc3lzX3Vuc2hhcmUKIAlQVFIJc3lzX3NwbGljZQogCVBUUglzeXMzMl9zeW5jX2ZpbGVfcmFuZ2UJCS8qIDQzMDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKaW5kZXggNGQxODFkZjQuLjI0NjMwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC03NSw3ICs3NSw2IEBACiAKIGFzaWR1c2Ugc210Y19saXZlX2FzaWRbTUFYX1NNVENfVExCU11bTUFYX1NNVENfQVNJRFNdOwogCi0KIC8qCiAgKiBOdW1iZXIgb2YgSW50ZXJQcm9jZXNzb3IgSW50ZXJydXB0IChJUEkpIG1lc3NhZ2UgYnVmZmVycyB0byBhbGxvY2F0ZQogICovCkBAIC0zODgsNiArMzg3LDcgQEAKIAkJSVBJUVtpXS5oZWFkID0gSVBJUVtpXS50YWlsID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2luaXQoJklQSVFbaV0ubG9jayk7CiAJCUlQSVFbaV0uZGVwdGggPSAwOworCQlJUElRW2ldLnJlc2NoZWRfZmxhZyA9IDA7IC8qIE5vIHJlc2NoZWR1bGVzIHF1ZXVlZCBpbml0aWFsbHkgKi8KIAl9CiAKIAkvKiBjcHVfZGF0YSBpbmRleCBzdGFydHMgYXQgemVybyAqLwpAQCAtNzQxLDExICs3NDEsMjQgQEAKIHN0YXRpYyB2b2lkIHNtdGNfaXBpX3FkdW1wKHZvaWQpCiB7CiAJaW50IGk7CisJc3RydWN0IHNtdGNfaXBpICp0ZW1wOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVMgO2krKykgewotCQlwcmludGsoIklQSVFbJWRdOiBoZWFkID0gMHgleCwgdGFpbCA9IDB4JXgsIGRlcHRoID0gJWRcbiIsCisJCXByX2luZm8oIklQSVFbJWRdOiBoZWFkID0gMHgleCwgdGFpbCA9IDB4JXgsIGRlcHRoID0gJWRcbiIsCiAJCQlpLCAodW5zaWduZWQpSVBJUVtpXS5oZWFkLCAodW5zaWduZWQpSVBJUVtpXS50YWlsLAogCQkJSVBJUVtpXS5kZXB0aCk7CisJCXRlbXAgPSBJUElRW2ldLmhlYWQ7CisKKwkJd2hpbGUgKHRlbXAgIT0gSVBJUVtpXS50YWlsKSB7CisJCQlwcl9kZWJ1ZygiJWQgJWQgJWQ6ICIsIHRlbXAtPnR5cGUsIHRlbXAtPmRlc3QsCisJCQkgICAgICAgKGludCl0ZW1wLT5hcmcpOworI2lmZGVmCVNNVENfSVBJX0RFQlVHCisJCSAgICBwcl9kZWJ1ZygiJXUgJWx1XG4iLCB0ZW1wLT5zZW5kZXIsIHRlbXAtPnN0YW1wKTsKKyNlbHNlCisJCSAgICBwcl9kZWJ1ZygiXG4iKTsKKyNlbmRpZgorCQkgICAgdGVtcCA9IHRlbXAtPmZsaW5rOworCQl9CiAJfQogfQogCkBAIC03ODQsMTEgKzc5NywxNiBAQAogCWludCBtdGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGNyZXN0YXJ0OwogCWV4dGVybiB2b2lkIHI0a193YWl0X2lycW9mZih2b2lkKSwgX19wYXN0d2FpdCh2b2lkKTsKKwlpbnQgc2V0X3Jlc2NoZWRfZmxhZyA9ICh0eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCQlhY3Rpb24gPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpOwogCiAJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJcHJpbnRrKCJDYW5ub3QgU2VuZCBJUEkgdG8gc2VsZiFcbiIpOwogCQlyZXR1cm47CiAJfQorCWlmIChzZXRfcmVzY2hlZF9mbGFnICYmIElQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgIT0gMCkKKwkJcmV0dXJuOyAvKiBUaGVyZSBpcyBhIHJlc2NoZWR1bGUgcXVldWVkIGFscmVhZHkgKi8KKwogCS8qIFNldCB1cCBhIGRlc2NyaXB0b3IsIHRvIGJlIGRlbGl2ZXJlZCBlaXRoZXIgcHJvbXB0bHkgb3IgcXVldWVkICovCiAJcGlwaSA9IHNtdGNfaXBpX2RxKCZmcmVlSVBJcSk7CiAJaWYgKHBpcGkgPT0gTlVMTCkgewpAQCAtODAxLDYgKzgxOSw3IEBACiAJcGlwaS0+ZGVzdCA9IGNwdTsKIAlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgIT0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS52cGVfaWQpIHsKIAkJLyogSWYgbm90IG9uIHNhbWUgVlBFLCBlbnF1ZXVlIGFuZCBzZW5kIGNyb3NzLVZQRSBpbnRlcnJ1cHQgKi8KKwkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyB8PSBzZXRfcmVzY2hlZF9mbGFnOwogCQlzbXRjX2lwaV9ucSgmSVBJUVtjcHVdLCBwaXBpKTsKIAkJTE9DS19DT1JFX1BSQSgpOwogCQlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKQEAgLTg0Nyw2ICs4NjYsNyBAQAogCQkJICovCiAJCQl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CiAJCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgfD0gc2V0X3Jlc2NoZWRfZmxhZzsKIAkJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOwogCQl9IGVsc2UgewogcG9zdGRpcmVjdDoKQEAgLTk5NiwxMiArMTAxNiwxNSBAQAogCQkgKiBhbHJlYWR5IGVuYWJsZWQuCiAJCSAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KIAkJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKIAkJcGlwaSA9IF9fc210Y19pcGlfZHEocSk7CiAJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKLQkJaWYgKHBpcGkgIT0gTlVMTCkKKwkJaWYgKHBpcGkgIT0gTlVMTCkgeworCQkJaWYgKHBpcGktPnR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJICAgIChpbnQpcGlwaS0+YXJnID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgPSAwOwogCQkJaXBpX2RlY29kZShwaXBpKTsKKwkJfQogCQkvKgogCQkgKiBUaGUgdXNlIG9mIHRoZSBfX3Jhd19sb2NhbCByZXN0b3JlIGlzbid0CiAJCSAqIGFzIG9idmlvdXNseSBuZWNlc3NhcnkgaGVyZSBhcyBpbiBzbXRjX2lwaV9yZXBsYXkoKSwKQEAgLTEwODIsNiArMTEwNSw5IEBACiAJCQkJICogd2l0aCBpbnRlcnJ1cHRzIG9mZgogCQkJCSAqLwogCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQlpZiAocGlwaS0+dHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkJICAgIChpbnQpcGlwaS0+YXJnID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQkJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnID0gMDsKIAkJCQlpcGlfZGVjb2RlKHBpcGkpOwogCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYwppbmRleCA2ZGRiNTA3Li4xODIxZDEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKLSNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTE5OCw4ICsxOTcsNyBAQAogCQlvZmZzZXQgKz0gMiAqIFNQUkFNX1RBR19TVFJJREU7CiAJfQogfQotCi1fX2NwdWluaXQgdm9pZCBzcHJhbV9jb25maWcodm9pZCkKK3ZvaWQgX19jcHVpbml0IHNwcmFtX2NvbmZpZyh2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY29uZmlnMDsKQEAgLTIwOCw2ICsyMDYsNyBAQAogCWNhc2UgQ1BVXzI0SzoKIAljYXNlIENQVV8zNEs6CiAJY2FzZSBDUFVfNzRLOgorCWNhc2UgQ1BVXzEwMDRLOgogCQljb25maWcwID0gcmVhZF9jMF9jb25maWcoKTsKIAkJLyogRklYTUU6IGFkZHJlc3NlcyBhcmUgTWFsdGEgc3BlY2lmaWMgKi8KIAkJaWYgKGNvbmZpZzAgJiAoMTw8MjQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCAwMzA5MmFiLi42MDQ3NzUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTExMTYsOCArMTExNiw2IEBACiAJdi0+c2hhcmVkX3B0ciA9IE5VTEw7CiAJdi0+X19zdGFydCA9IDA7CiAKLQl1bmxvY2tfa2VybmVsKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKaW5kZXggZjM2OGM3My4uYjMyYjRhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCkBAIC01NSw3ICs1NSw2IEBACiAJICogaW50LWhhbmRsZXIgaXMgbm90IG9uIGJvb3RzdHJhcAogCSAqLwogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0gfCBTVDBfQkVWKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJLyogc2V0dGluZyBpcnEgdHJpZ2dlciBtb2RlICovCiAJc2V0X2lycV90cmlnZ2VyX21vZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYwppbmRleCAxYzU1NWU2Li5kOWFlMWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCkBAIC02Miw4ICs2Miw2IEBACiAJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh5LCAibmVnIik7CiAJfQogCi0JaWYgKGllZWU3NTRkcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeCwgIm5lZyIsIHgpOwogCXJldHVybiB4OwogfQogCkBAIC03NiwxNSArNzQsMTIgQEAKIAlDTEVBUkNYOwogCUZMVVNIWERQOwogCisJLyogQ2xlYXIgc2lnbiBBTFdBWVMsIGlycmVzcGVjdGl2ZSBvZiBOYU4gKi8KKwlEUFNJR04oeCkgPSAwOworCiAJaWYgKHhjID09IElFRUU3NTRfQ0xBU1NfU05BTikgewotCQlTRVRDWChJRUVFNzU0X0lOVkFMSURfT1BFUkFUSU9OKTsKLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KGllZWU3NTRkcF9pbmRlZigpLCAibmVnIik7CisJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdChpZWVlNzU0ZHBfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0ZHBfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCURQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKaW5kZXggNzcwZjBmNC4uMzE3NTQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYwpAQCAtNjIsOCArNjIsNiBAQAogCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoeSwgIm5lZyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJuZWciLCB4KTsKIAlyZXR1cm4geDsKIH0KIApAQCAtNzYsMTUgKzc0LDEyIEBACiAJQ0xFQVJDWDsKIAlGTFVTSFhTUDsKIAorCS8qIENsZWFyIHNpZ24gQUxXQVlTLCBpcnJlc3BlY3RpdmUgb2YgTmFOICovCisJU1BTSUdOKHgpID0gMDsKKwogCWlmICh4YyA9PSBJRUVFNzU0X0NMQVNTX1NOQU4pIHsKLQkJU0VUQ1goSUVFRTc1NF9JTlZBTElEX09QRVJBVElPTik7CiAJCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdChpZWVlNzU0c3BfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCVNQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxNWFhMTkwLi44ZDFmNGYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgpAQCAtMTMyLDcgKzEzMywxMCBAQAogCWluY19wcmVlbXB0X2NvdW50KCk7CiAJaWR4ID0gKGFkZHIgPj4gUEFHRV9TSElGVCkgJiAoRklYX05fQ09MT1VSUyAtIDEpOwogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlpZHggKz0gRklYX05fQ09MT1VSUyAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZHggKz0gRklYX05fQ09MT1VSUyAqIHNtcF9wcm9jZXNzb3JfaWQoKSArCisJCShpbl9pbnRlcnJ1cHQoKSA/IChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUykgOiAwKTsKKyNlbHNlCisJaWR4ICs9IGluX2ludGVycnVwdCgpID8gRklYX05fQ09MT1VSUyA6IDA7CiAjZW5kaWYKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0NNQVBfRU5EIC0gaWR4KTsKIAlwdGUgPSBta19wdGUocGFnZSwgUEFHRV9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwppbmRleCBkZjllNTI2Li40NjlkOWIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwpAQCAtNzAsMTEgKzcwLDEyIEBACiAJbGF1bmNoLT5zcCA9IHNwOwogCWxhdW5jaC0+YTAgPSBhMDsKIAotCS8qIE1ha2Ugc3VyZSB0YXJnZXQgc2VlcyBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgZ28gYml0ICovCi0Jc21wX21iKCk7Ci0KKwlzbXBfd21iKCk7ICAgICAgICAgICAgICAvKiBUYXJnZXQgbXVzdCBzZWUgcGFyYW1ldGVycyBiZWZvcmUgZ28gKi8KIAlsYXVuY2gtPmZsYWdzIHw9IExBVU5DSF9GR087CisJc21wX3dtYigpOyAgICAgICAgICAgICAgLyogVGFyZ2V0IG11c3Qgc2VlIGdvIGJlZm9yZSB3ZSBwb2xsICAqLworCiAJd2hpbGUgKChsYXVuY2gtPmZsYWdzICYgTEFVTkNIX0ZHT05FKSA9PSAwKQogCQk7CisJc21wX3JtYigpOyAgICAgIC8qIFRhcmdldCB3aWxsIGJlIHVwZGF0aW5nIGZsYWdzIHNvb24gKi8KIAlwcl9kZWJ1ZygibGF1bmNoOiBjcHUlZCBnb25lIVxuIiwgY3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDNlMGE5YjMuLjRjM2ZjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtODcsNyArODcsNyBAQAogCQlkdW1teSA9IEJPTklUT19QQ0lNQVBfQ0ZHOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCi0JCWlycSA9IHJlYWRsKCh1MzIgKilfcGNpY3RybF9ib25pdG9fcGNpY2ZnKTsKKwkJaXJxID0gX19yYXdfcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCQlpcnEgJj0gMHhmZjsKIAkJQk9OSVRPX1BDSU1BUF9DRkcgPSAwOwpAQCAtMzc5LDM4ICszNzksNDMgQEAKIAogc3RhdGljIGludCBfX2luaXRkYXRhIG1zY19ucl9laWNpcnFzID0gQVJSQVlfU0laRShtc2NfZWljaXJxbWFwKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogLyoKICAqIFRoaXMgR0lDIHNwZWNpZmljIHRhYnVsYXIgYXJyYXkgZGVmaW5lcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBFeHRlcm5hbAogICogSW50ZXJydXB0cyBhbmQgQ1BVcy9Db3JlIEludGVycnVwdHMuIFRoZSBuYXR1cmUgb2YgdGhlIEV4dGVybmFsCiAgKiBJbnRlcnJ1cHRzIGlzIGFsc28gZGVmaW5lZCBoZXJlIC0gcG9sYXJpdHkvdHJpZ2dlci4KICAqLworCisjZGVmaW5lIEdJQ19DUFVfTk1JIEdJQ19NQVBfVE9fTk1JX01TSwogc3RhdGljIHN0cnVjdCBnaWNfaW50cl9tYXAgZ2ljX2ludHJfbWFwW0dJQ19OVU1fSU5UUlNdID0gewotCXsgR0lDX0VYVF9JTlRSKDApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMiksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDMpLCAJMCwJR0lDX0NQVV9JTlQwLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNCksIAkwLAlHSUNfQ1BVX0lOVDEsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig1KSwgCTAsCUdJQ19DUFVfSU5UMiwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDYpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNyksIAkwLAlHSUNfQ1BVX0lOVDQsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig4KSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDkpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEyKSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEzKSwgCTAsCUdJQ19NQVBfVE9fTk1JX01TSywJR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTQpLCAJMCwJR0lDX01BUF9UT19OTUlfTVNLLAlHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxNSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotLyogVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBnZW5lcmFsIGludGVycnVwdHMgbm93IHdlIGRvIElQSSBvbmVzICovCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJIAlYLAkJMCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgMCwgR0lDX0NQVV9JTlQwLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDEsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMiwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDQsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfTk1JLCAgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9OTUksICBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCSAgICAgICAgMCB9LAorCS8qIFRoZSByZW1haW5kZXIgb2YgdGhpcyB0YWJsZSBpcyBpbml0aWFsaXNlZCBieSBmaWxsX2lwaV9tYXAgKi8KIH07Ci0jZW5kaWYKIAogLyoKICAqIEdDTVAgbmVlZHMgdG8gYmUgZGV0ZWN0ZWQgYmVmb3JlIGFueSBTTVAgaW5pdGlhbGlzYXRpb24KICAqLwogaW50IF9faW5pdCBnY21wX3Byb2JlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogeworCWlmIChtaXBzX3JldmlzaW9uX3Njb25pZCAhPSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQpIHsKKwkJZ2NtcF9wcmVzZW50ID0gMDsKKwkJcmV0dXJuIGdjbXBfcHJlc2VudDsKKwl9CisKIAlpZiAoZ2NtcF9wcmVzZW50ID49IDApCiAJCXJldHVybiBnY21wX3ByZXNlbnQ7CiAKQEAgLTQxOSwyMCArNDI0LDM1IEBACiAJZ2NtcF9wcmVzZW50ID0gKEdDTVBHQ0IoR0NNUEIpICYgR0NNUF9HQ0JfR0NNUEJfR0NNUEJBU0VfTVNLKSA9PSBHQ01QX0JBU0VfQUREUjsKIAogCWlmIChnY21wX3ByZXNlbnQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJHQ01QIHByZXNlbnRcbiIpOworCQlwcl9kZWJ1ZygiR0NNUCBwcmVzZW50XG4iKTsKIAlyZXR1cm4gZ2NtcF9wcmVzZW50OwogfQogCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBJT0NVJ3MgcHJlc2VudCAqLworaW50IF9faW5pdCBnY21wX25pb2N1KHZvaWQpCit7CisgIHJldHVybiBnY21wX3ByZXNlbnQgPworICAgIChHQ01QR0NCKEdDKSAmIEdDTVBfR0NCX0dDX05VTUlPQ1VfTVNLKSA+PiBHQ01QX0dDQl9HQ19OVU1JT0NVX1NIRiA6CisgICAgMDsKK30KKworLyogU2V0IEdDTVAgcmVnaW9uIGF0dHJpYnV0ZXMgKi8KK3ZvaWQgX19pbml0IGdjbXBfc2V0cmVnaW9uKGludCByZWdpb24sIHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHR5cGUpCit7CisJR0NNUEdDQm4oQ014QkFTRSwgcmVnaW9uKSA9IGJhc2U7CisJR0NNUEdDQm4oQ014TUFTSywgcmVnaW9uKSA9IG1hc2sgfCB0eXBlOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiBzdGF0aWMgdm9pZCBfX2luaXQgZmlsbF9pcGlfbWFwMShpbnQgYmFzZWludHIsIGludCBjcHUsIGludCBjcHVwaW4pCiB7CiAJaW50IGludHIgPSBiYXNlaW50ciArIGNwdTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaW50cm51bSA9IEdJQ19FWFRfSU5UUihpbnRyKTsKIAlnaWNfaW50cl9tYXBbaW50cl0uY3B1bnVtID0gY3B1OwogCWdpY19pbnRyX21hcFtpbnRyXS5waW4gPSBjcHVwaW47CiAJZ2ljX2ludHJfbWFwW2ludHJdLnBvbGFyaXR5ID0gR0lDX1BPTF9QT1M7CiAJZ2ljX2ludHJfbWFwW2ludHJdLnRyaWd0eXBlID0gR0lDX1RSSUdfRURHRTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaXBpZmxhZyA9IDE7CisJZ2ljX2ludHJfbWFwW2ludHJdLmZsYWdzID0gR0lDX0ZMQUdfSVBJOwogCWlwaV9tYXBbY3B1XSB8PSAoMSA8PCAoY3B1cGluICsgMikpOwogfQogCkBAIC00NDcsNiArNDY3LDEyIEBACiB9CiAjZW5kaWYKIAordm9pZCBfX2luaXQgYXJjaF9pbml0X2lwaWlycShpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCit7CisJc2V0dXBfaXJxKGlycSwgYWN0aW9uKTsKKwlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAlpbml0X2k4MjU5X2lycXMoKTsKQEAgLTQ1OCwxMiArNDg0LDE3IEBACiAJCUdDTVBHQ0IoR0lDQkEpID0gR0lDX0JBU0VfQUREUiB8IEdDTVBfR0NCX0dJQ0JBX0VOX01TSzsKIAkJZ2ljX3ByZXNlbnQgPSAxOwogCX0gZWxzZSB7Ci0JCV9tc2MwMV9iaXVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoTVNDMDFfQklVX1JFR19CQVNFLCBNU0MwMV9CSVVfQUREUlNQQUNFX1NaKTsKLQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCi0JCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4gTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQlpZiAobWlwc19yZXZpc2lvbl9zY29uaWQgPT0gTUlQU19SRVZJU0lPTl9TQ09OX1JPQ0lUKSB7CisJCQlfbXNjMDFfYml1X2Jhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJaW9yZW1hcF9ub2NhY2hlKE1TQzAxX0JJVV9SRUdfQkFTRSwKKwkJCQkJCU1TQzAxX0JJVV9BRERSU1BBQ0VfU1opOworCQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCisJCQkJCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4KKwkJCQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQl9CiAJfQogCWlmIChnaWNfcHJlc2VudCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdJQyBwcmVzZW50XG4iKTsKKwkJcHJfZGVidWcoIkdJQyBwcmVzZW50XG4iKTsKIAogCXN3aXRjaCAobWlwc19yZXZpc2lvbl9zY29uaWQpIHsKIAljYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVDoKQEAgLTUyNiwxNiArNTU3LDE2IEBACiAJCQkJCQkmY29yZWhpX2lycWFjdGlvbik7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJaWYgKGdpY19wcmVzZW50KSB7CiAJCS8qIEZJWE1FICovCiAJCWludCBpOwotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCWdpY19jYWxsX2ludF9iYXNlID0gR0lDX05VTV9JTlRSUyAtIE5SX0NQVVM7CiAJCWdpY19yZXNjaGVkX2ludF9iYXNlID0gZ2ljX2NhbGxfaW50X2Jhc2UgLSBOUl9DUFVTOwotCiAJCWZpbGxfaXBpX21hcCgpOwotCQlnaWNfaW5pdChHSUNfQkFTRV9BRERSLCBHSUNfQUREUlNQQUNFX1NaLCBnaWNfaW50cl9tYXAsIEFSUkFZX1NJWkUoZ2ljX2ludHJfbWFwKSwgTUlQU19HSUNfSVJRX0JBU0UpOworI2VuZGlmCisJCWdpY19pbml0KEdJQ19CQVNFX0FERFIsIEdJQ19BRERSU1BBQ0VfU1osIGdpY19pbnRyX21hcCwKKwkJCQlBUlJBWV9TSVpFKGdpY19pbnRyX21hcCksIE1JUFNfR0lDX0lSUV9CQVNFKTsKIAkJaWYgKCFnY21wX3ByZXNlbnQpIHsKIAkJCS8qIEVuYWJsZSB0aGUgR0lDICovCiAJCQlpID0gUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKTsKQEAgLTU0Myw3ICs1NzQsNyBAQAogCQkJCShpIHwgKDB4MSA8PCBNU0MwMV9TQ19DRkdfR0lDRU5BX1NIRikpOwogCQkJcHJfZGVidWcoIkdJQyBFbmFibGVkXG4iKTsKIAkJfQotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCQlpZiAoY3B1X2hhc192aW50KSB7CiAJCQlzZXRfdmlfaGFuZGxlcihNSVBTQ1BVX0lOVF9JUEkwLCBtYWx0YV9pcGlfaXJxZGlzcGF0Y2gpOwpAQCAtNTU2LDE2ICs1ODcsMTQgQEAKIAkJd3JpdGVfYzBfc3RhdHVzKDB4MTEwMGRjMDApOwogCQlwcmludGsoIkNQVSVkOiBzdGF0dXMgcmVnaXN0ZXIgZnJjICUwOHhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmVhZF9jMF9zdGF0dXMoKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19DQUxMX0lOVChpKSwgJmlycV9jYWxsKTsKLQkJCXNldF9pcnFfaGFuZGxlcihNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCQkJc2V0X2lycV9oYW5kbGVyKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX0NBTExfSU5UKGkpLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlhcmNoX2luaXRfaXBpaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKKwkJCQkJIEdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKKwkJCWFyY2hfaW5pdF9pcGlpcnEoTUlQU19HSUNfSVJRX0JBU0UgKworCQkJCQkgR0lDX0NBTExfSU5UKGkpLCAmaXJxX2NhbGwpOwogCQl9CisjZW5kaWYKIAl9IGVsc2UgeworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCQkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMgKi8KIAkJaWYgKGNwdV9oYXNfdmVpYykgewogCQkJc2V0X3ZpX2hhbmRsZXIgKE1TQzAxRV9JTlRfU1cwLCBpcGlfcmVzY2hlZF9kaXNwYXRjaCk7CkBAIC01ODAsMTQgKzYwOSwxMCBAQAogCQkJY3B1X2lwaV9yZXNjaGVkX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJROwogCQkJY3B1X2lwaV9jYWxsX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX0NBTExfSVJROwogCQl9Ci0KLQkJc2V0dXBfaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7Ci0JCXNldHVwX2lycShjcHVfaXBpX2NhbGxfaXJxLCAmaXJxX2NhbGwpOwotCi0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX3Jlc2NoZWRfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX2NhbGxfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JfQorCQlhcmNoX2luaXRfaXBpaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7CisJCWFyY2hfaW5pdF9pcGlpcnEoY3B1X2lwaV9jYWxsX2lycSwgJmlycV9jYWxsKTsKICNlbmRpZgorCX0KIH0KIAogdm9pZCBtYWx0YV9iZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwppbmRleCBiOTc0MzE5MDYuLjJmYmZhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+Ci0KKyNpbmNsdWRlIDxhc20vZ2NtcHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaD4KQEAgLTIwMSw3ICsyMDEsMTEgQEAKIAkJbXNjX21lbV9yZXNvdXJjZS5zdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJbXNjX21lbV9yZXNvdXJjZS5lbmQgPSAoc3RhcnQgJiBtYXNrKSB8IH5tYXNrOwogCQltc2NfY29udHJvbGxlci5tZW1fb2Zmc2V0ID0gKHN0YXJ0ICYgbWFzaykgLSAobWFwICYgbWFzayk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19DTVAKKwkJaWYgKGdjbXBfbmlvY3UoKSkKKwkJCWdjbXBfc2V0cmVnaW9uKDAsIHN0YXJ0LCBtYXNrLAorCQkJCUdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxKTsKKyNlbmRpZgogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPQkFTTCwgc3RhcnQpOwogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPTVNLTCwgbWFzayk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NQVBMLCBtYXApOwpAQCAtMjA5LDcgKzIxMywxMSBAQAogCQltc2NfaW9fcmVzb3VyY2UuZW5kID0gKG1hcCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLmlvX29mZnNldCA9IDA7CiAJCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSB+bWFzazsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMSwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCS8qIElmIHJhbmdlcyBvdmVybGFwIEkvTyB0YWtlcyBwcmVjZWRlbmNlLiAgKi8KIAkJc3RhcnQgPSBzdGFydCAmIG1hc2s7CiAJCWVuZCA9IHN0YXJ0IHwgfm1hc2s7CkBAIC0yNDEsMyArMjQ5LDE2IEBACiAKIAlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjb250cm9sbGVyKTsKIH0KKworLyogRW5hYmxlIFBDSSAyLjEgY29tcGF0aWJpbGl0eSBpbiBQSUlYNCAqLworc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX2RsY3NldHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggb2RsYywgbmRsYzsKKwkodm9pZCkgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgyLCAmb2RsYyk7CisJLyogRW5hYmxlIHBhc3NpdmUgcmVsZWFzZXMgYW5kIGRlbGF5ZWQgdHJhbnNhY3Rpb24gKi8KKwluZGxjID0gb2RsYyB8IDc7CisJKHZvaWQpIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODIsIG5kbGMpOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMCwKKwlxdWlya19kbGNzZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwppbmRleCBmMDgwZjExLi43YWNhN2Q1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9hY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlub19hY3Rpb24sCi0JLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9CQkiVGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwppbmRleCAxOGIxOTI3Li44ODM2YzYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwpAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwbng4eHh4X3RpbWVyX2lycSA9IHsKIAkuaGFuZGxlcgk9IHBueDh4eHhfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInBueDh4eHhfdGltZXIiLAogfTsKIApAQCAtNzIsNyArNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtb25vdG9uaWNfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gbW9ub3RvbmljX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gIk1vbm90b25pYyB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKaW5kZXggZGVlZDFkNS4uNTc1Y2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwpAQCAtMjIsNyArMjIsNyBAQAogICogb3RoZXJ3aXNlLCB0aGUgb3Byb2ZpbGUgdG9vbCB3aWxsIG5vdCByZWNvZ25pemUgdGhpcyBhbmQgY29tcGxhaW4gYWJvdXQKICAqICJjcHVfdHlwZSAndW5zZXQnIGlzIG5vdCB2YWxpZCIuCiAgKi8KLSNkZWZpbmUgTE9PTkdTT04yX0NQVV9UWVBFCSJtaXBzL2dvZHNvbjIiCisjZGVmaW5lIExPT05HU09OMl9DUFVfVFlQRQkibWlwcy9sb29uZ3NvbjIiCiAKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIxX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgNSkKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIyX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgOSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IDZkMGU1OWYuLmQ2ODAyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gaHViX3J0X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGh1Yl9ydF9jb3VudGVyX2hhbmRsZXIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiaHViLXJ0IiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggNjJkZjZhNS4uZjNiNjBlNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYTIwcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBhMjByX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJhMjByLXRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBjODYwODEwLi5lMTAxODRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC04NSw3ICs4NSw3IEBACiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJaWYgKCFzdHJjbXAoaWQsICJzcGktYmFzZWNsayIpKQotCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDQpOworCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDIpOwogCWlmICghc3RyY21wKGlkLCAiaW1idXNfY2xrIikpCiAJCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyKTsKIAlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTgxNyw3ICs4MTcsOCBAQAogb3V0X3BkZXY6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIG91dF9ncGlvOgotCWdwaW9fcmVtb3ZlKCZpb2NsZWQtPmNoaXApOworCWlmIChncGlvY2hpcF9yZW1vdmUoJmlvY2xlZC0+Y2hpcCkpCisJCXJldHVybjsKIG91dF91bm1hcDoKIAlpb3VubWFwKGlvY2xlZC0+bW1pb2FkZHIpOwogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDEwYTBhNTQuLjJiYTE0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC00MTQsNiArNDE0LDEwIEBACiBjb25maWcgQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTCisgICAgICAgZGVmX2Jvb2wgeQorICAgICAgIGRlcGVuZHMgb24gUFBDX0JPT0szU182NAorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwppbmRleCAzYjEwMDUxLi5iZjMzODJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwpAQCAtNDYsNyArNDYsNyBAQAogCiBjb25maWcgSENBTExfU1RBVFMKIAlib29sICJIeXBlcnZpc29yIGNhbGwgaW5zdHJ1bWVudGF0aW9uIgotCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgREVCVUdfRlMKKwlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIERFQlVHX0ZTICYmIFRSQUNFUE9JTlRTCiAJaGVscAogCSAgQWRkcyBjb2RlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBoeXBlcnZpc29yIGNhbGxzIG1hZGUgYW5kCiAJICB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gaHlwZXJ2aXNvciBjYWxscy4gIFdhbGwgdGltZSBzcGVudCBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCBjZWU4MDgwLi5kZDM4NjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMjEwLDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCmluZGV4IDRjMzYxODYuLjhlOWJlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0xOTksNyArMTk5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A1MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCBkZTMwYjNmOS4uODJmZjJiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCkBAIC0yNDcsNyArMjQ3LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+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+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3MDAwMDAgeworCQkJCWxhYmVsID0gIlUtQm9vdCI7CisJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc0MDAwMCB7CisJCQkJbGFiZWwgPSAiRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc0MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzUwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZWQuIEVudiI7CisJCQkJcmVnID0gPDB4MDA3NTAwMDAgMHgwMDAxMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc2MDAwMCB7CisJCQkJbGFiZWwgPSAicmVzZXJ2ZSI7CisJCQkJcmVnID0gPDB4MDA3NjAwMDAgMHgwMDBhMDAwMD47CisJCQl9OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKaW5kZXggMzgzOGI3Ny4uMDM5NmNlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ3OjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQwLDcgKzE1OCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjE5LDExICsyMzcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzOSw5ICsyNTksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjczLDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMjgsNiArMzUwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDIsNiArMzY1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjcsNiArMzkxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NTcsNiArNDgyLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00OTUsMTAgKzUyMSw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTksNyArNTQxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU1OCwxNCArNTc5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MzYsNiArNjU3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY0Niw2ICs2NjgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NjYsMjMgKzY4OSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTcxMywyNSArNzM2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzc1LDExICs3ODUsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC04NjYsNiArODc3LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg4NSwxMCArOTAwLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTU5LDEyICs5NzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDY0LDYgKzEwODIsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDczLDYgKzEwOTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA5MCwxMCArMTExMCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTExMDUsMTEgKzExMjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTExOCwyMyArMTE0MywyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExNTksNyArMTE4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIwMCwxMSArMTIyNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCmluZGV4IDI5YjBmMzQuLmY1YzA3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDEyICs1NiwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzgsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDYsNyArMTEzLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE5LDYgKzEyNSwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjcsMTQgKzE0MCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ3LDcgKzE2NSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjgsMTEgKzI0NiwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ4LDkgKzI2OCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI2NCw2ICsyODUsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zNDgsNiArMzcwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjIsNiArMzg1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODcsNiArNDExLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDIyLDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQzMSw3ICs0NTcsOSBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDU0LDEwICs0ODIsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC00NzUsNiArNDk5LDggQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTA5LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTUwMiw3ICs1MjksNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTE0LDExICs1NDAsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NDAsNiArNTY5LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjgsNiArNTk4LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTg2LDE0ICs2MTcsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjQwLDkgKzY3NCwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5OCw4IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjg2LDEwICs3MjUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTksNiArNzk1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03ODcsNiArODI0LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODEyLDIzICs4NTAsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODQ3LDMwICs4ODUsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05MTMsNiArOTM5LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMiwxMCArOTYyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTkyLDEyICsxMDI1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA0MSw2ICsxMDc0LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA1MCw2ICsxMDg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjcsMTAgKzExMDIsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMDgyLDExICsxMTIxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTEwOTUsMjMgKzExMzUsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTM2LDcgKzExNzgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNzgsMTEgKzEyMTksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwppbmRleCAwN2I2YjI2Li40Zjc3YTFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjAsMTEgKzIzOCwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQwLDkgKzI2MCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Myw2ICsyNzQsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOSw2ICszNTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICszNjYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2OCw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0ODMsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTA2LDEwICs1MzMsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTMyLDYgKzU1NSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTU0MCw3ICs1NjQsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc5LDE0ICs2MDIsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0Nyw2ICs2NzAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU3LDYgKzY4MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY3NiwyMiArNzAxLDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzM4LDYgKzc2OSw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzQ3LDkgKzc4MCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc3NSwyNSArODA2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTgxNyw3ICs4MzUsNyBAQAogIwogIyBMRUQgZHJpdmVycwogIwotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtODY2LDYgKzg4NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtODkzLDYgKzkxMiwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MTIsMTAgKzkzNSwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk4NiwxMiArMTAxMiwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwOTEsNiArMTExNyw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTExMDAsNiArMTEyNyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE3LDEwICsxMTQ1LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEzMiwxMSArMTE2NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTQ1LDIzICsxMTc4LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE4Niw3ICsxMjIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjI3LDExICsxMjYxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggYWZiMWEzZC4uZjkxNjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjQyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzksMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMDUsNyArMTEyLDYgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDcgKzEzOCw2IEBACiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzMsNyArMTQ1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDYsNyArMTY0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyNywxMSArMjQ1LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDcsOSArMjY3LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMzM2LDYgKzM1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzUwLDYgKzM3Miw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc1LDYgKzM5OCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzgyLDkgKzQwNiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0OTEsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CkBAIC00OTIsMTAgKzUxNyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxNSw2ICs1MzYsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTM2LDYgKzU1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTY0LDYgKzU4Nyw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTU4MiwxNCArNjA2LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYzNiwxNiArNjYzLDE2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MjIsNiArNzQ5LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTAsNiArNzc4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzc2LDIzICs4MDUsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODExLDMwICs4NDAsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTg3MSwxNSArODg4LDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC05OTUsNiArMTAxNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTAyMiw2ICsxMDQyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDEsMTIgKzEwNjUsMTYgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldApAQCAtMTExNCw3ICsxMTQyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMSw2ICsxMjI4LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIxMCw2ICsxMjM4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjMsMjMgKzEyNTIsMTIgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IDg1ODVjN2MuLjc1YzgzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ1LDcgKzE2Myw3IEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI1LDExICsyNDMsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0NSw5ICsyNjUsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMjc5LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMzQsNiArMzU2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzcxLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzMsNiArMzk3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0ODksNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMiwxMCArNTI4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUyOSw2ICs1NTEsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01MzgsNyArNTYxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3NywxNCArNTk5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NTQsNiArNjc2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY2NCw2ICs2ODcsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02ODUsMjIgKzcwOSwyOCBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc0Nyw2ICs3NzcsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTc1Niw5ICs3ODgsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03ODksMjUgKzgxOSwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg1MSwxMSArODY4LDEyIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtOTY5LDYgKzk4Nyw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTk2LDYgKzEwMTUsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNSwxMCArMTAzOCwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEwODksMTIgKzExMTUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMTk0LDYgKzEyMjAsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjAzLDYgKzEyMzAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMCwxMCArMTI0OCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEyMzUsMTEgKzEyNjcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTI0OCwyMyArMTI4MSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTEyODksNyArMTMyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTMzMSwxMSArMTM2NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggYTJkZjA2My4uNDY2ZjA5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU3LDYgKzI2MCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjUsOSArNDMyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQpAQCAtNjI4LDcgKzYzNSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjU4LDEwICs2NjcsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjAsNiArNzY2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MTQsOSArODIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzQsNiArODM4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg4Myw2ICs4OTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04OTQsNyArOTA0LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC05MzQsNiArOTQzLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTQ0LDYgKzk1NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MCw2ICsxMDAxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTA1Nyw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTQ2LDYgKzExNTksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxNSw3ICsxMjI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTMyNyw2ICsxMzQwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNDQsNiArMTM1OCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzY1LDcgKzEzODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0MDcsMTEgKzE0MjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCmluZGV4IDkzZWJkNDQuLjY2OTRmYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODYsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTExOSwyMCArMTIxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQwLDYgKzE0MSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUwLDYgKzI1Myw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjcsNiArMjcxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzUzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtMzk2LDkgKzQwMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNTY1LDE4ICs1NzEsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjYzLDYgKzY2Nyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02OTMsOSArNjk4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03MTMsNyArNzE1LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTczMiw2ICs3MzMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03ODQsNiArNzg2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODU0LDcgKzg1Nyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTkyNiw2ICs5MjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICs5NDUsNyBAQAogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IGZmMzNhN2QuLjg2ZGYxOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDg4LDYgKzQ5NSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjEzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDMsNyArNjUyLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTc0MSw5ICs3NTIsMTEgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03OTEsMTAgKzgwNCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg5Niw2ICs5MDYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1MCw5ICs5NjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk4NCw2ICs5OTIsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwMzYsNiArMTA0OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNDgsOSArMTA2Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA4OCw4ICsxMTAwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMDk5LDYgKzExMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTEyLDcgKzExMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNjQsNiArMTE3OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzAsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEyNzMsNiArMTI4OSw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzg0LDYgKzE0MDIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ1Myw3ICsxNDcyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU2OSw2ICsxNTg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1ODYsNiArMTYwNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjA0LDEwICsxNjI0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzAsMTAgKzE2NTIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjYwLDcgKzE2ODIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MDIsMTEgKzE3MjMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggNzYyMzdkNC4uN2JmNzFkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4OCw2ICs0OTUsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjA1LDYgKzYxMyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ0LDExICs2NTMsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzEsNiArNjgzLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTgsNiArNzExLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODAyLDkgKzgxNiwxMSBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg1MiwxMCArODY4LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTU3LDYgKzk3MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAxMSw5ICsxMDI1LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwNTYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwOTcsNiArMTExMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMDksOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE0OSw4ICsxMTY0LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExNzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTczLDcgKzExOTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjUsNiArMTI0Miw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE2LDYgKzEzMzQsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1Myw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzOTUsNiArMTQxNSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xNDQ1LDYgKzE0NjYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTUxNCw3ICsxNTM2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYzMCw2ICsxNjUxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDcsNiArMTY2OSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjY1LDEwICsxNjg4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2OTEsMTAgKzE3MTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzIxLDcgKzE3NDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3NjMsMTEgKzE3ODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggZTBlMzZhMS4uN2RlZjgzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MTEsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0Miw3ICs1NTAsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjEyLDcgKzYyMiw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjM1LDcgKzY0Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTY2MywxMCArNjc0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzU5LDYgKzc2Nyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODEyLDkgKzgyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODMyLDYgKzgzOCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04ODEsNiArODkyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODkyLDkgKzkwNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkyNyw2ICs5MzcsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MzcsNiArOTQ4LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTUwLDcgKzk2Miw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDcwLDYgKzEwODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEyOCw3ICsxMTQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMiw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMTksNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyODIsMTEgKzEyOTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNGYyN2Q0NS4uYjM5OGI5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNyw2ICs1MTQsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0NSw3ICs1NTMsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjE3LDcgKzYyNyw5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NDAsNyArNjUyLDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjY4LDEwICs2NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NzYsNiArNzg0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MzAsOSArODM5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODY5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05MTUsNiArOTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTI3LDkgKzkzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTY3LDggKzk3NywxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTc4LDYgKzk5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MSw3ICsxMDA0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzEwNTUsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTE0Niw2ICsxMTU5LDggQEAKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKQEAgLTExODYsNiArMTIwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjQ3LDcgKzEyNjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzY1LDYgKzEzODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM4Miw2ICsxMzk4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE0MDMsNyArMTQyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ0NSwxMSArMTQ2MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwppbmRleCA2NDhkYWMwLi5mNjczMTdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI0LDkgKzQzMSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDgzLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzcsNiArNjQ1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzYsMTEgKzY4NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwMyw2ICs3MTUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTczMCw2ICs3NDMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NDUsMTAgKzg1OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzMCw2ICs5NDEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4NCw5ICs5OTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDE3LDcgKzEwMjYsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDU1LDggKzEwNjMsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwNjYsNiArMTA3Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExMTEsNiArMTEyMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyODgsNiArMTMwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzUwLDcgKzEzNjQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDY1LDYgKzE0NzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ4Miw2ICsxNDk2LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1MDMsNyArMTUxOCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTU0NSwxMSArMTU1OSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggYmY2ZGViOC4uYTY2ODExMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjQsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00ODMsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs1OTcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyNyw3ICs2MzYsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzI1LDEwICs3MzYsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTAsNiArODE4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjQsOSArODczLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU3ND15Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk3LDcgKzkwMyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkzNSw4ICs5NDAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTk0Niw2ICs5NTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05OTEsNiArOTk5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMDU5LDYgKzEwNjgsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTExNjcsNiArMTE3OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjI5LDcgKzEyNDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzQ0LDYgKzEzNTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2MSw2ICsxMzczLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzODIsNyArMTM5NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQyNCwxMSArMTQzNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCAzMjM2YzQ3Li5jNGU5MmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTU2LDkgKzU2MywxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjA2LDEwICs2MTUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTksNiArNzA1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTIsOSArNzU5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03NzIsNiArNzc2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTgyMSw2ICs4MzAsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04MzIsOSArODQyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODY3LDYgKzg3NSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs4ODYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04OTAsNyArOTAwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMTAsNiArMTAxOSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDY4LDcgKzEwNzgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNDksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE1Nyw2ICsxMTY3LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExNzgsNyArMTE4OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyMCwxMSArMTIzMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCA4YzUyOTlkLi40ZjQzNGIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NSw2ICsyNTgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcyLDYgKzI3Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIzLDkgKzQzMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU4NSw2ICs1OTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyMyw3ICs2MzEsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjkzLDcgKzcwMyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzE2LDcgKzcyOCw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTc0NCwxMCArNzU1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDYgKzg0OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODkzLDkgKzkwMiw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTEzLDYgKzkxOSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NjIsNiArOTczLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTczLDkgKzk4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwMDgsNiArMTAxOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMTgsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMzEsNyArMTA0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTUxLDYgKzExNjIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxMCw3ICsxMjIyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTI4NCw2ICsxMjk1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMDEsNiArMTMxMyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzIyLDcgKzEzMzUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzNjQsMTEgKzEzNzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggZmYzMTY2Ny4uYjUyZWMwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTUsNiArMjU4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Miw2ICsyNzYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDkzLDYgKzUwMCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzksNyArNjQ3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjQ5LDEwICs2NTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTAsNiArNzU0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MDQsOSArODA5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NTMsMTcgKzg1NSwyMiBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODk3LDggKzkwNCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTA4LDYgKzkxNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTkyLDcgKzEwMDIsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTAzOCw2ICsxMDQ3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMDcsNyArMTExNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExODMsNiArMTE5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjAwLDYgKzEyMTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzMiw3ICsxMjQzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc0LDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IGUyODVlYzAuLjczMDA2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjExIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MDMsNiArNTEwLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01NDIsMTEgKzU1MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2OSw2ICs1ODAsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5Niw2ICs2MDgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NzIsNyArNjg1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MjAsMTAgKzczNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxNiw2ICs4MjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2OSw5ICs4ODIsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg4OSw2ICs4OTksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTM4LDYgKzk1Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk0OSw5ICs5NjUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05ODQsNiArOTk4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk0LDYgKzEwMDksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDA3LDcgKzEwMjMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA3Miw2ICsxMDg3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzAsNyArMTE0Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDYsNiArMTIyMSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIxLDYgKzEyMzcsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI0Miw3ICsxMjU5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjg0LDExICsxMzAwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCmluZGV4IDFhYjNlNGMuLjllOTE1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTIsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5OSw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTgsNiArNTA1LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTM3LDExICs1NDUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTc1LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjAzLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjEwLDYgKzYyMyw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTY3OCw3ICs2OTIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcwOCwxMCArNzI0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg4MSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDYgKzg5OCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTUyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk2NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk4Nyw2ICsxMDAyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk3LDYgKzEwMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDEwLDcgKzEwMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzMsNiArMTA0OSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEwODUsNiArMTEwMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNjAsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE4OCw2ICsxMjA3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNDYsNyArMTI2Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNjEsNiArMTM4MCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNzYsNiArMTM5Niw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzk2LDEyICsxNDE3LDEzIEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0NDMsMTEgKzE0NjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCmluZGV4IDNhNjhmODYuLjZiMzk5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgVHVlIEF1ZyAxMSAxOTo1Nzo1MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjcgKzEyNiwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NCw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcxLDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY2LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk1LDYgKzQwMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDIsNyArNDA5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE1LDYgKzQyMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIyLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjUxLDcgKzY1OCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjgxLDEwICs2OTAsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03ODYsNiArNzkyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NDAsOSArODQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjAsNiArODY0LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MjAsOSArOTMwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTYwLDYgKzk2OCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk3MCw2ICs5NzksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk4Myw3ICs5OTMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzUsNiArMTA0NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNTgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIwNyw3ICsxMjE4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTMwNiw2ICsxMzE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMjEsNiArMTMzMiw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzQyLDcgKzEzNTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzODQsMTEgKzEzOTUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCmluZGV4IGZmMDRlMTAuLmE1YmRlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMjMsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiBDT05GSUdfS1NJODU2MD15CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Nyw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg0LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1OTEsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNTkxLDEwICs2MDIsNyBAQAogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MDQsMTAgKzcxMiwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzE5LDkgKzczNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NTUsNyArNzcwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTgxOCw2ICs4MzIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODc3LDcgKzg5Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTYyLDYgKzk3Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODEsMTAgKzk5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDA4LDEwICsxMDI2LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwMzksNyArMTA1Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcwLDExICsxMDg3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggZmIxMGNjOC4uYzEwZTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNyArMTI5LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg5LDYgKzE5Myw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDQsNiArMjQ5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MSw2ICsyNjcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MywxNSArNDkyLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg4LDYgKzU5NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTgsOSArNjExLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzNCw3ICs2NDUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNjk2LDYgKzcwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NTQsNyArNzY1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04MjIsNiArODMyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgzOSw2ICs4NTAsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtODU3LDEwICs4NjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtODgzLDEwICs4OTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC05MTIsNyArOTI2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0MywxMSArOTU2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKaW5kZXggNWM4Y2U2OS4uOGQ5ZjBhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyOSArMTMwLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ3LDYgKzI1Miw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjQsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjEsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MzAsNyArNTM5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTU4MiwxMCArNTkzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk4LDE0ICs3MDYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNzIxLDkgKzczOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NDYsNiArNzYyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU5LDcgKzc3Niw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04MjQsNiArODQwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTg4Miw3ICs4OTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTk1MCw2ICs5NjYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY3LDYgKzk4NCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODUsMTAgKzEwMDMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAxMSwxMCArMTAzMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwNDAsNyArMTA2MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcxLDExICsxMDkwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKaW5kZXggMTU4ZTYzZS4uOWI2M2UyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyOCArMTI5LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDUsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Miw2ICsyNjgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OSw2ICszNjYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OCw2ICszOTYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk1LDcgKzQwNCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw3ICs1OTEsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYzMCwxMCArNjQxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzM3LDYgKzc0NSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC03NTEsOSArNzY0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc3Niw2ICs3ODcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03ODksNyArODAxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4NjUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTEyLDcgKzkyNCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTgwLDYgKzk5MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTAwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDE1LDEwICsxMDI4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwNDEsMTAgKzEwNTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDcwLDcgKzEwODUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTEwMSwxMSArMTExNSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwppbmRleCAyNzI2ZmNhMS4uMWIyMzU2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjcgKzEyOCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQyLDYgKzI0Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTksNiArMjY1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTUsNiArMzYyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODQsNiArMzkyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MSw3ICs0MDAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDEyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MjEsNyArNTMwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NjksMTAgKzU4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3Niw2ICs2ODQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNjkwLDkgKzcwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTUsNiArNzI2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU4LDYgKzc3MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MTYsNyArODI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NzIsNiArODg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Nyw2ICs5MDAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtOTA3LDcgKzkyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwppbmRleCBiMGM0Njk4Li45NTlkMDI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNiArMTI5LDI3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDIsNiArMjQ3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OSw2ICsyNjUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0Nyw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Niw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgzLDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MSwxNSArNDkwLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg0LDYgKzU5MiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTQsOSArNjA3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzMCw3ICs2NDEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzIxLDYgKzczMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NzksNyArNzkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NDcsNiArODU3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODc0LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC04ODEsMTAgKzg5MywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC05MDcsMTAgKzkyMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTk0Nyw3ICs5NjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTc4LDExICs5OTEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwppbmRleCAwNGM4NWRhLi43ZjVlYzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTMsNiArMTk3LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiBDT05GSUdfU09DUkFURVM9eQogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUyLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2NCw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICszNjUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDIxLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDgyLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02NjgsNyArNjc3LDkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY5OCwxMCArNzA5LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzY1LDYgKzc3Myw3IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs3ODMsNiBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtODM0LDYgKzg0Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg4LDkgKzg5Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDYgKzkyNywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05NzMsNiArOTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTg1LDkgKzk5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDA2LDggKzEwMTYsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwMTcsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTExMiw3ICsxMTI1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTM1LDYgKzExNDcsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTExODQsNiArMTE5Nyw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE5LDYgKzEzMzMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM2OSw2ICsxMzg0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MzgsNyArMTQ1NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NTIsNiArMTU2Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTY5LDYgKzE1ODUsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTU4OSw3ICsxNjA2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjEsMTEgKzE2MzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKaW5kZXggZTdlODFkNi4uYzgzMjdlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjcsMjIgKzEzMCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MCw3ICsxNTIsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTcsNiArMjAxLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDI2LDYgKzQzMyw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU1LDYgKzQ2Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NjIsNyArNDcxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDc1LDYgKzQ4Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjIyLDYgKzYzMSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjYyLDcgKzY3Miw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03MzIsOCArNzQ0LDEwIEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03ODIsMTAgKzc5Niw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyNywxMSArODM4LDE1IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtODQyLDYgKzg1Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTA5LDYgKzkyNSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD1tCkBAIC05NjcsOSArOTg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDAzLDE0ICsxMDE3LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNjEsNiArMTA4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNzIsOSArMTA5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDkyLDYgKzExMTUsNyBAQAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTAyLDYgKzExMjYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfQUdQPW0KK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09bQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTEyNSw3ICsxMTUwLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExOTAsNiArMTIxNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjU0LDcgKzEyNzksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzUyLDYgKzEzNzYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2OSw2ICsxMzk0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEzODgsMTAgKzE0MTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTQxNCwxMCArMTQ0MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE0NDMsNyArMTQ3MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNDc1LDExICsxNTAyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCmluZGV4IDJjNDA3NTIuLjgyNTYzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1NCw2ICszNjEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Myw2ICszOTEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkwLDcgKzM5OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY3Nyw5ICs2ODUsMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcyNywxMCArNzM3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODI0LDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODc2LDkgKzg4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk2LDYgKzkwMSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk1Niw5ICs5NjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk3Nyw2ICs5ODYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05ODcsNiArOTk3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDAwLDcgKzEwMTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA2NSw2ICsxMDc1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzQsNyArMTE0NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIwMyw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjAsNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI3MSwxMSArMTI4MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwppbmRleCA4NDU3MzFkLi45MWQ4NWQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCmluZGV4IDRmMjI4YTkuLmRlYmUyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDIyICsxMjksMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUxLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTYsNiArMjAwLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzcxLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIwLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTYzMCw3ICs2MzksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY3OCwxMCArNjg5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzcyLDYgKzc4MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODI1LDkgKzgzNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODQ1LDYgKzg1MSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04OTQsNiArOTA1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTA1LDkgKzkxNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MjYsNiArOTM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTM2LDYgKzk0Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTk0OSw3ICs5NjEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA0Miw2ICsxMDUzLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMTEsNyArMTEyMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTE4MCw2ICsxMTkxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExOTcsNiArMTIwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjE2LDEwICsxMjI5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEyNDIsMTAgKzEyNTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMjcxLDcgKzEyODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwMywxMSArMTMxNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwppbmRleCA5MTk2NzI0Li43NDUxNTUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKaW5kZXggMmU0OWE2ZS4uNjMxZDkyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKaW5kZXggMTAyNWRhMi4uNTJhY2JhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjgsMjIgKzEzMSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MSw3ICsxNTMsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMDEsNiArMjA1LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKIENPTkZJR19YRVNfTVBDODV4eD15CkBAIC0yNTYsNiArMjYxLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNSw2ICs0MTIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Niw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NTcsOSArNDY2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjQ0LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjc0LDExICs2ODQsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzAxLDYgKzcxNCw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3NDIsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MDQsNyArODE5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MzQsMTAgKzg1MSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk1MSw2ICs5NjUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMDYsOCArMTAyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQxLDE0ICsxMDU0LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwOTksNiArMTEyMiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTAsOSArMTEzNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNTEsNiArMTE3Myw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE4NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExODEsNyArMTIwNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwNCw2ICsxMjI3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMjQ5LDYgKzEyNzMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTE0NjYsNiArMTQ5MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTQxLDcgKzE1NjcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjU4LDYgKzE2ODMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY3NSw2ICsxNzAxLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2OTQsMTAgKzE3MjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzIwLDEwICsxNzQ5LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTc0OSw3ICsxNzc4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzkwLDExICsxODE4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCmluZGV4IDUyN2FkMWEuLjI4OTgwNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTIgKzE1MywxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTYsNiArMjU5LDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ2NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ2Nyw5ICs0NzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjgwLDYgKzY4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcxOSwxMiArNzI3LDE1IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzc1LDYgKzc4Nyw3IEBACiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODUxLDcgKzg2NCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODgxLDEwICs4OTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDE2LDYgKzEwMjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwNzEsOSArMTA4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTExMDYsMTQgKzExMTYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2NCw2ICsxMTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3NSw5ICsxMTk2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTIxNyw2ICsxMjM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTI0Nyw3ICsxMjY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcwLDYgKzEyOTAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMzIyLDYgKzEzNDMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzk3LDYgKzE0MTksNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTUwMSw2ICsxNTI0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NzYsNyArMTYwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2ODIsNiArMTcwNSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY5Nyw2ICsxNzIxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE3MTgsNyArMTc0Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNzYxLDExICsxNzg1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGNkMzM4ZDQuLmUxOTlkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Niw2ICsyNTksNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDY0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDY3LDkgKzQ3NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02ODAsNiArNjg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzE5LDEyICs3MjcsMTUgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNzk2LDcgKzgwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODI2LDEwICs4MzksNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NjEsNiArOTcxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDE2LDkgKzEwMjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDUxLDE0ICsxMDU5LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDksNiArMTEyNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMjAsOSArMTEzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNjIsNiArMTE3OSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNzIsNiArMTE5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTIsNyArMTIxMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTI2Nyw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTM0Miw2ICsxMzYyLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTE0NDYsNiArMTQ2Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTIxLDcgKzE1NDMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjI3LDYgKzE2NDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDIsNiArMTY2NCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNjYzLDcgKzE2ODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTcwNiwxMSArMTcyOCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPW0KICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCBiYTQ3ODgzLi4zYjBmYmZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIxICsxMzMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsMTIgKzE1NCwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTcsNiArMjYwLDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNTAzLDYgKzUwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQogIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1ODgsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC01ODksNyArNTk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjAyLDYgKzYwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjExLDkgKzYxOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTc4MCw2ICs3ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC04MTksMTEgKzgyNywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTg0Niw2ICs4NTcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTg3Myw2ICs4ODUsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC05NDksNyArOTYyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05NzksMTAgKzk5NCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTExMjAsNiArMTEzMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTE3NSw5ICsxMTg4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTIxMSwxNCArMTIyMSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMjY5LDYgKzEyODksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMjgwLDkgKzEzMDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMzIyLDYgKzEzNDEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzMyLDYgKzEzNTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMzUyLDcgKzEzNzMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzUsNiArMTM5NSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTE0MjcsNiArMTQ0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDIsNiArMTUyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CkBAIC0xNjA3LDYgKzE2MzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OSw3ICsxNjkzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3NSw2ICsxNzk4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzkxLDYgKzE4MTUsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE4MTAsMTAgKzE4MzUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTgzNywxMCArMTg2NCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE4NzIsNyArMTg5OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTE1LDExICsxOTQxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IGE2MWYxODMuLmRlNGQ1MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTI2LDIyICsxMjgsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUwLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTEsNiArMjU0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2OCw2ICsyNzIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM4NSw2ICszOTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0MjAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDIxLDcgKzQyOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0NDAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NDUsOSArNDUyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNjYyLDYgKzY2OSw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcwMSwxMSArNzA5LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3MzksNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03NTUsNiArNzY3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODE4LDE0ICs4MzEsMTMgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05MjksNiArOTQxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4Miw5ICs5OTUsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMDIsNyArMTAxMiw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIxLDYgKzEwMzAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNDEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTA3LDYgKzExMTgsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTIwOSw3ICsxMjIxLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEzMjksNiArMTM0MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTEzODgsNyArMTQwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MDUsNiArMTUxNiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTIyLDYgKzE1MzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU0MSwxMCArMTU1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTY3LDEwICsxNTgyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTU5Nyw3ICsxNjEyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjksMTEgKzE2NDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCmluZGV4IDcwMTZjZTcuLjc1NGE3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg3LDExICs4OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIyICsxMzIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsNyArMTU0LDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUxLDEzICsyNTQsMTMgQEAKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc1LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA0LDYgKzQwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0MzksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDEsNyArNDQ3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDU0LDYgKzQ1OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0Niw2ICs1NTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4NSwxMSArNTkyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2MjIsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzE1LDcgKzcyNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzYzLDEwICs3NzcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04ODAsNiArODkxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTkzNCw5ICs5NDYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5NjMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTczLDYgKzk4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk4Myw2ICs5OTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDAyLDYgKzEwMTIsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExMDUsNyArMTExNiw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjgsNiArMTEzOCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExODAsNiArMTE5MSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTM1OCw2ICsxMzcwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MjgsNyArMTQ0MSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTQ2LDYgKzE1NTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU2Myw2ICsxNTc2LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE1ODIsMTAgKzE1OTYsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYwOCwxMCArMTYyNCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2MzgsNyArMTY1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY4MCwxMSArMTY5NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCmluZGV4IGY1Y2EyZTAuLjg5OTkxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NywxMSArODgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEzICsxNTMsMTUgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU3LDYgKzI2MCw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTUwMiw2ICs1MDcsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKIENPTkZJR19USVBDPW0KICMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAogIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC01ODEsNiArNTg3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTg4LDcgKzU5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTYwMSw2ICs2MDcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYxMCw5ICs2MTcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC04MzMsNyArODQwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NjMsMTAgKzg3Miw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk5Niw2ICsxMDAyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDQ5LDkgKzEwNTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA3MywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTE4LDYgKzExMjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTI5LDkgKzExMzksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTY0LDYgKzExNzIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzExODMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTk0LDcgKzEyMDQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTI3NCw2ICsxMjgzLDcgQEAKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxMzUzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0NTEsNiArMTQ2MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjcsNiArMTQ3Nyw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTQ4NiwxMCArMTQ5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTE0LDEwICsxNTI3LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE1NTAsNyArMTU2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNTkzLDExICsxNjA1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCmluZGV4IGFlY2U2YmIuLjA1MmNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzgsMTEgKzgwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTYsMjggKzExOSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNSwxMCArMjM5LDEwIEBACiAjIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1Niw2ICsyNjAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICszNDMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszNzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc0LDcgKzM4MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Nyw2ICszOTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUzMCwxNiArNTM3LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTgwLDYgKzU4Niw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTkwLDYgKzU5Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNzE2LDYgKzcyNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc3NSw3ICs3ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NDcsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODY0LDYgKzg3Myw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODgwLDEwICs4OTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtOTA2LDEwICs5MTgsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggODEwNTM2MC4uMGZiNjVhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEzNSwyMyArMTM4LDI0IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xNjEsMTIgKzE2NSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKICMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI3NSwxMiArMjgxLDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI5OCw2ICszMDQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwOSw2ICszMTYsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTY3NCwxMCArNjgyLDEyIEBACiAjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAogQ09ORklHX0JUX0hDSUJGVVNCPW0KIENPTkZJR19CVF9IQ0lWSENJPW0KKyMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02ODYsNyArNjk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjk5LDYgKzcwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTcxMCw5ICs3MjAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD1tCiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNzYzLDYgKzc3Myw3IEBACiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC04NTcsNiArODY4LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEPW0KIENPTkZJR19TQ1NJXzNXXzlYWFg9bQogQ09ORklHX1NDU0lfQUNBUkQ9bQpAQCAtOTEyLDcgKzkyNCw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC05ODIsNyArOTk2LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC0xMDEwLDEwICsxMDI2LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTE0NSw2ICsxMTU4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMjAwLDkgKzEyMTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMjIwLDYgKzEyMzEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049bQogQ09ORklHX0hXTU9OX1ZJRD1tCisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCkBAIC0xMjY5LDYgKzEyODUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTI4MCw3ICsxMjk3LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldApAQCAtMTMxNyw2ICsxMzMzLDcgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzI3LDYgKzEzNDQsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEzNzgsNiArMTM5Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNTg4LDYgKzE2MDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OCw3ICsxNjg4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3MCw3ICsxNzg5LDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQ19UMTBESUY9bQogQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTc5Nyw2ICsxODE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTgxNCw2ICsxODM0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CkBAIC0xODM0LDExICsxODU1LDEzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xODUyLDYgKzE4NzUsNyBAQAogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE4NjksNiArMTg5Myw3IEBACiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xODk5LDYgKzE5MjQsNyBAQAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTEKQEAgLTE5MTMsNyArMTkzOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTU2LDExICsxOTgxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwppbmRleCAwYWE1YjQzLi5lZjVlZGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTYsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTAsNiArMTUzLDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzMsNiArMjM3LDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTQsNiArNDAwLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMSw3ICs0MDgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDEzLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjAwLDcgKzYwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02NDgsMTAgKzY1Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTczNiwxNSArNzQyLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NjcsNiArNzc3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjgsNiArOTc5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTgsMTAgKzEwMTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAyNCw2ICsxMDM4LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTA1Miw3ICsxMDY3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMDk0LDYgKzExMDgsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCmluZGV4IDJjMjkyZTIuLjczZWY5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NywxMSArNzksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNSwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM0LDEwICsyMzgsMTAgQEAKIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NSw2ICsyNTksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzNyw2ICszNDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Niw2ICszNzIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzczLDcgKzM4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUyOSwxNiArNTM2LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjExLDcgKzYxNyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02NzIsNiArNjc3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzMxLDcgKzczNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTgwMyw2ICs4MDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgyMCw2ICs4MjYsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTgzNiwxMCArODQzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTg2MSwxMCArODcwLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDQ1NjcxZTcuLjYzYzNlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIyICsxMzMsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCwxMSArMTU1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU4LDYgKzI2MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzUsNiArMjc5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00ODIsNiArNDg3LDcgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MTcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNTE5LDcgKzUyNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDMsOSArNTUwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC03MTEsNiArNzE4LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03NTAsMTEgKzc1OCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTc3Nyw2ICs3ODgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTgwNCw2ICs4MTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NzAsNyArODgzLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05MTgsMTAgKzkzMyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTEwNDMsNiArMTA1NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA5Nyw5ICsxMTEwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzExMjcsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2Niw2ICsxMTgxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3Nyw5ICsxMTkzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTExOTgsNiArMTIxMiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEyMjcsNyArMTI0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD1tCi0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3MSw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDAsNiArMTUxNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTY3LDcgKzE1ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjgxLDYgKzE2OTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2OTgsNiArMTcxNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzE2LDEwICsxNzM0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE3NDIsNiArMTc2Miw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNzcxLDcgKzE3OTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE4MTMsMTEgKzE4MzMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCmluZGV4IDMwYjY4YmYuLjUyMGIwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgRnJpIEF1ZyAgNyAwODoxOToxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjMsMjggKzEyNSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDcsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNjAsNiArMjY0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk1LDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDA5LDYgKzQxNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjA4LDcgKzYxNCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNjE2LDEwICs2MjQsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4NSw2ICs2OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc0MCw3ICs3NDYsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03NzEsMTUgKzc3NiwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzk5LDYgKzgwOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTgwOSw2ICs4MTksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzMyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNTIsMTAgKzEwNjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA3OSw2ICsxMDkzLDcgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMDksNyArMTEyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE1MSw2ICsxMTY1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwppbmRleCAxYWU4NWEzLi40M2MzYzRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzYsMTEgKzc4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTcsMjcgKzEyMCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNywxMCArMjQxLDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTgsNiArMjYyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01NTMsMTYgKzU1OSwxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiAjIENPTkZJR19GU19FTkVUX0hBU19GRUMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjM1LDcgKzY0MCw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MDcsNiArNzExLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc3Niw3ICs3ODEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NTEsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjUsNiArODcwLDcgQEAKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MTgsMTEgKzkyMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IGFhYTQ0MTYuLjUyM2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIE1vbiBBcHIgMjAgMTE6MDY6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CkBAIC01MywxMiArNTcsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMDMsNyArMTEwLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE2LDYgKzEyMiwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjQsMTQgKzEzNywxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ0LDcgKzE2Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMDUsNyArMjIzLDcgQEAKIENPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQogQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NJTVBMRV9HUElPPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI5LDExICsyNDcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OSw5ICsyNjksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjUsNiArMjg2LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ5LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYzLDYgKzM4Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg4LDYgKzQxMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDkgKzQyMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTE5LDcgQEAKIENPTkZJR19PRl9HUElPPXkKIENPTkZJR19PRl9JMkM9eQogQ09ORklHX09GX1NQST15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTI5LDcgKzU1Niw5IEBACiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTUyLDEwICs1ODEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTcyLDYgKzU5Nyw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4MCw2ICs2MDcsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTk5LDcgKzYyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MTEsMTEgKzYzOCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2OTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODQsMTQgKzcxNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03MzksMTYgKzc3NCwxNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQpAQCAtODgzLDYgKzkyMCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MTAsMTAgKzk0OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjksMTEgQEAKICMKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtOTU3LDE2ICs5OTYsMjcgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDE5LDYgKzEwNjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAzMSw5ICsxMDgzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDczLDMxICsxMTIzLDIwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTE2Nyw2ICsxMjA2LDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAogIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0CkBAIC0xMTk4LDcgKzEyMzgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsMTAgKzEyNTYsMTEgQEAKIENPTkZJR19ISURfQ0hFUlJZPXkKICMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTIzMSwxMCArMTI3MSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMjYxLDE1ICsxMzAyLDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTE0MDAsNiArMTQ0Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQxMSw2ICsxNDU1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0MzQsNiArMTQ3OSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xNDUzLDEwICsxNTAyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUzMywxMiArMTU4NSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE2MjQsNiArMTY3Niw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE2MzMsNiArMTY4Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjUwLDEwICsxNzA0LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTY2NSwxMSArMTcyMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xNjc4LDIzICsxNzM3LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTcxOSw3ICsxNzgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzYxLDExICsxODIxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBmMjM0MjhjLi5kOGIzNjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTIzLDI4ICsxMjUsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsNiArMjQ0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg2LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3OCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUxNywxMSArNTI1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQzLDYgKzU1NCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTcwLDYgKzU4Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY2Niw5ICs2NzksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxNSwxMCArNzMwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODIyLDYgKzgzNCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MzYsOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2MSw2ICs4NzYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC04NzQsNyArODkwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTkzOSw2ICs5NTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTk3LDcgKzEwMTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDg2LDYgKzExMDIsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwNyw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExMzgsMTEgKzExNTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDAyNzE2ZjcuLjAwZmFkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjExIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTE2LDI5ICsxMTgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTUxLDYgKzE1NCw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM2LDYgKzI0MCw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjQ5LDYgKzI1NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQxNiw2ICs0MjIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3Nyw3ICs0ODQsNiBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9TQkM4MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02MDQsNyArNjEwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY1MiwxMCArNjYwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA0LDYgKzcwOSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03OTMsMTUgKzgwMCwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI0LDYgKzgzNSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzMiw2ICsxMDQ0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMDgwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwOTMsNiArMTEwOCw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMjEsNyArMTEzNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2Myw2ICsxMTc4LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IDRhOTZjYjYuLjY0ZGZmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMSArMTI5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjYzLDYgKzI2Niw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDMsNyArMzQ4LDggQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM1OCw3ICszNjQsNyBAQAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNzcsNiArMzgzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMyw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MzMsOSArNDQxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjA4LDYgKzYxNiw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NTYsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzQsNiArNjg2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzc3LDcgKzc5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODAwLDcgKzgxNiw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC04MjgsMTAgKzg0Myw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzNSw2ICs5NDcsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk5MCw5ICsxMDAzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDI1LDE0ICsxMDM1LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTEwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwOTQsOSArMTExNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExMzUsNiArMTE1NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNDUsNiArMTE2NSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNTgsNyArMTE3OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4MSw2ICsxMjAxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzMyw2ICsxMjU0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldApAQCAtMTI5MSw2ICsxMzEzLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzgsNiArMTM2MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzk3LDcgKzE0MjEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTE0LDYgKzE1MzcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyOSw2ICsxNTUzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1NTAsNyArMTU3NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNTkxLDEzICsxNjE1LDE1IEBACiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjA1LDE2ICsxNjMxLDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZWU2YWNjNi4uYTEyZTdiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI1OjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTM0LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1Niw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OSw2ICsxOTMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsNyArMjExLDcgQEAKIENPTkZJR19NUEM4NXh4X1JEQj15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAorQ09ORklHX1hFU19NUEM4NXh4PXkKIENPTkZJR19TVFhfR1AzPXkKIENPTkZJR19UUU04NTQwPXkKIENPTkZJR19UUU04NTQxPXkKQEAgLTI1OSwxMCArMjY0LDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4MCw2ICsyODUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwNyw3ICszMTMsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxNSw3ICszMjEsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDUsNyArMzUyLDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM2OSwxMiArMzc2LDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDExLDYgKzQxOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0MSw2ICs0NDksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDgsNyArNDU3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYxLDYgKzQ2OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1NCw2ICs1NjMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5MywxMSArNjAzLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2MzMsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDcsNiArNjYxLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzIzLDcgKzczOCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUwLDcgKzc2Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03NzgsMTAgKzc5NCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc5OCw2ICs4MTEsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTg5OCw2ICs5MTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU1LDkgKzk3MCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTkxLDE1ICsxMDAzLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIwLDYgKzEwMzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMwLDYgKzEwNDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDQ5LDYgKzEwNjcsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTIsNyArMTE3MSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzUsNiArMTE5Myw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMjcsNiArMTI0Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0MSw3ICsxMjYxLDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQyOSw2ICsxNDQ4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0OTksNyArMTUxOSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIwLDYgKzE2MzksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MzcsNiArMTY1Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU2LDEwICsxNjc3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODMsMTAgKzE3MDYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNCw3ICsxNzM3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NTcsMTEgKzE3NzksMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc2OSwxNiArMTc5MywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCmluZGV4IGRiMDgyY2UuLmNkNzBiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI2OjAxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzIsMjIgKzEzNSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NSw4ICsxNTcsMTAgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsOSArMjExLDEwIEBACiBDT05GSUdfTVBDODV4eF9NRFM9eQogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQorQ09ORklHX01QQzg1eHhfUkRCPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CitDT05GSUdfWEVTX01QQzg1eHg9eQogQ09ORklHX1NUWF9HUDM9eQogQ09ORklHX1RRTTg1NDA9eQogQ09ORklHX1RRTTg1NDE9eQpAQCAtMjYxLDExICsyNjcsMTEgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4Myw2ICsyODksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMxMCw3ICszMTcsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxOCw3ICszMjUsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDgsNyArMzU2LDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM3MiwxMiArMzgwLDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDE0LDYgKzQyMiw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0NCw2ICs0NTMsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NTEsNyArNDYxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ3Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1Nyw2ICs1NjcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NiwxMSArNjA3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMyw2ICs2MzcsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NTAsNiArNjY1LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzI2LDcgKzc0Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUzLDcgKzc3MSw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03ODEsMTAgKzc5OCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgwMSw2ICs4MTUsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTkwMSw2ICs5MTYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU4LDkgKzk3NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTk0LDE1ICsxMDA3LDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIzLDYgKzEwNDAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMzLDYgKzEwNTEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDUyLDYgKzEwNzEsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTUsNyArMTE3NSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzgsNiArMTE5Nyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzAsNiArMTI1MCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0NCw3ICsxMjY1LDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQzMiw2ICsxNDUyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MDIsNyArMTUyMyw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIzLDYgKzE2NDMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDAsNiArMTY2MSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU5LDEwICsxNjgxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODYsMTAgKzE3MTAsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNyw3ICsxNzQxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NjAsMTEgKzE3ODMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc3MiwxNiArMTc5NywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCA2ODA5YjYxLi40MGQ2ZjA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NiwxMSArNzgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExMywyOCArMTE2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjMzLDEwICsyMzcsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NCw2ICsyNTgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICszNDUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc2LDcgKzM4Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0NzMsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKQEAgLTQ3NiwxMCArNDg0LDcgQEAKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01MjAsNiArNTI1LDcgQEAKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01MzAsNiArNTM2LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjAyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTYwNSw5ICs2MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjQxLDcgKzY1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03MDUsNiArNzE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc2Myw3ICs3NzMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MzYsNiArODQ1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4NjEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODcxLDcgKzg4Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MDIsMTEgKzkxMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IDBlODY4NGEuLjViM2FiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTMzLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1NSw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MywxMyArMjU2LDEzIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Nyw2ICsyODAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MTAsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzYsNiArNDQxLDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQzLDcgKzQ0OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ1Niw2ICs0NjEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDksNiArNTU1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODgsMTEgKzU5NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTUsNiArNjI1LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjQyLDYgKzY1Myw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcxOCw3ICs3MzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc2NiwxMCArNzgwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODgzLDYgKzg5NCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05MzgsOSArOTUwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05NzQsMTUgKzk4MywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAwMyw2ICsxMDE2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAxMyw2ICsxMDI3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTAzMiw2ICsxMDQ3LDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTM1LDcgKzExNTEsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTU4LDYgKzExNzMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjEwLDYgKzEyMjYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEzODksNiArMTQwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDU5LDcgKzE0NzcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU3Nyw2ICsxNTk0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1OTQsNiArMTYxMiw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjEzLDEwICsxNjMyLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzksMTAgKzE2NjAsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjY5LDcgKzE2OTAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MTEsMTEgKzE3MzEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwppbmRleCBkYmU4ZTg2OS4uMWRhMzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzcsMTEgKzc5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTUsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0MSwxMCArMjQ1LDEwIEBACiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjIsNiArMjY2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTMsNiArMzk5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NDAsMTYgKzU0NywxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQogQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYyMiw3ICs2MjgsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjgzLDYgKzY4OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc0Miw3ICs3NDgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MTQsNiArODE5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MzEsNiArODM3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04NDcsMTAgKzg1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC04NzIsMTAgKzg4MSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCmluZGV4IDRmODY4MWMuLjIwYmEwY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwpAQCAtMSw0OSArMSw1OCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMwotIyBUdWUgTWF5IDI3IDE2OjA4OjA2IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzMKKyMgVHVlIE9jdCAgNiAxMDoyNzoxOCAyMDA5CiAjCiBDT05GSUdfUFBDNjQ9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCitDT05GSUdfUFBDX0JPT0szU182ND15CisjIENPTkZJR19QUENfQk9PSzNFXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNTPXkKIENPTkZJR19QT1dFUjRfT05MWT15CiBDT05GSUdfUE9XRVI0PXkKICMgQ09ORklHX1RVTkVfQ0VMTCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CisjIENPTkZJR19WU1ggaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV82ND15CiBDT05GSUdfUFBDX01NX1NMSUNFUz15CiAjIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKIENPTkZJR182NEJJVD15CiBDT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX09GPXkKQEAgLTUxLDExICs2MCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MiwxMCArODQsMjAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC04NCwxMyArMTA2LDE3IEBACiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTk4LDMyICsxMjQsNTIgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTMxLDExICsxNzcsMTAgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwpAQCAtMTUwLDE5ICsxOTUsMTQgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19QQVNFTUk9eQpAQCAtMTc4LDggKzIxOCwxMCBAQAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX1FQQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CiAjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldApAQCAtMjEzLDYgKzI1NSw3IEBACiAjCiBDT05GSUdfUFBDX1BBU0VNSV9DUFVGUkVRPXkKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI2LDE2ICsyNjksMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19DT01QQVRfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKIENPTkZJR19JT01NVV9WTUVSR0U9eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQpAQCAtMjQzLDYgKzI4OSw3IEBACiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjUzLDIwICszMDAsMjggQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CisjIENPTkZJR19QUENfNEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzY0S19QQUdFUz15CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05CiAjIENPTkZJR19QUENfU1VCUEFHRV9QUk9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQpAQCAtMjg1LDYgKzM0MCw4IEBACiBDT05GSUdfUENJX01TST15CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKIENPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1BDTUNJQT15CkBAIC0zMDEsMTMgKzM1OCwxMCBAQAogQ09ORklHX0VMRUNUUkFfQ0Y9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTM1Niw5ICs0MTAsMTEgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzY4LDI1ICs0MjQsMzIgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5OCwxNSArNDYxLDE5IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAogCkBAIC00NzgsMTEgKzU0NSwxNyBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMSwyOSArNTc0LDQxIEBACiAjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CiBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNTQyLDE0ICs2MjcsMTMgQEAKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CkBAIC01NjMsOCArNjQ3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTU4NiwxMCArNjY4LDYgQEAKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9eQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKQEAgLTYwNiw2ICs2ODQsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYxNCwxMSArNjk0LDE2IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CkBAIC02MjYsNyArNzExLDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYzNywxMCArNzIxLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC02NjIsNiArNzUwLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTAsNiArNzc5LDcgQEAKIENPTkZJR19QQVRBX1BDTUNJQT15CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzAzLDEyICs3OTMsMTUgQEAKICMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD15CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci1DT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CisjIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTcyNSwxMiArODE4LDE5IEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NTMsNiArODUzLDkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzYxLDE5ICs4NjQsMjMgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldApAQCAtNzgzLDE5ICs4OTAsMjIgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtODA2LDMwICs5MTYsNDAgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODc0LDE3ICs5OTQsMjMgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC05MDAsNiArMTAyNiw3IEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CkBAIC05MjYsMTAgKzEwNTMsMTMgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD00CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NX1BBU0VNST15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC05NDgsNTcgKzEwNzgsODUgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BBU0VNST15Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QQVNFTUk9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKQEAgLTEwMDYsMTQgKzExNjQsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC0xMDI4LDEwICsxMTg5LDE0IEBACiBDT05GSUdfU0VOU09SU19MTTkwPXkKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtMTAzOSw2ICsxMjA0LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNTAsNDQgKzEyMTcsNDAgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQorQ09ORklHX0RSTV9LTVNfSEVMUEVSPXkKK0NPTkZJR19EUk1fVFRNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKIENPTkZJR19EUk1fUkFERU9OPXkKQEAgLTEwOTksNiArMTI2Miw3IEBACiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTE0MCw2ICsxMzA0LDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDEyICsxMzEzLDE2IEBACiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTExNzcsMTUgKzEzNDYsOSBAQAogQ09ORklHX0xPR09fTElOVVhfTU9OTz15CiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExOTgsMjQgKzEzNjEsMjQgQEAKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKQEAgLTEyMzQsNiArMTM5Nyw3IEBACiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CkBAIC0xMjQ2LDYgKzE0MTAsOCBAQAogIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldApAQCAtMTI2Miw2ICsxNDI4LDcgQEAKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKQEAgLTEyNzcsNTcgKzE0NDQsNjQgQEAKICMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCi0jCi0KLSMKLSMgQUxTQSBQb3dlclBDIGRldmljZXMKLSMKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfVVNYMlk9eQogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENNQ0lBPXkKICMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMzQzLDE4ICsxNTE3LDI2IEBACiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMzYzLDYgKzE1NDUsOCBAQAogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEzNzAsMjAgKzE1NTQsMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTM5OSw3ICsxNTgzLDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTE0MTIsNyArMTU5NSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTE0MjAsNyArMTYwMyw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTQyOSw3ICsxNjExLDE1IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xNDQzLDYgKzE2MzMsNyBAQAogIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xNDcyLDYgKzE2NjMsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDgxLDIxICsxNjc1LDMxIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xNTA0LDExICsxNzA4LDEzIEBACiAjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApAQCAtMTUxNiw2ICsxNzIyLDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNTI1LDYgKzE3MzUsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0lTTzk2NjBfRlM9eQpAQCAtMTU0OSwxNiArMTc2NCwxNCBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NzgsOCArMTc5MSwxMCBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTU5MCwxOCArMTgwNSwxNyBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NzIsMjUgKzE4ODYsMzAgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE3MDAsMTggKzE5MTksMjUgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzIxLDI2ICsxOTQ3LDcxIEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTE3NDksMjMgKzIwMjAsMzQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfWE9SX0JMT0NLUz15CiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE3OTMsMTQgKzIwNzUsMjAgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQpAQCAtMTgzMCw3ICsyMTE4LDEzIEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWY0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjE5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBGcmkgT2N0IDE2IDExOjM3OjE1IDIwMDkKKyMKK0NPTkZJR19QUEM2ND15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19CT09LM1NfNjQgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM0VfNjQ9eQorQ09ORklHX1BQQ19CT09LM0U9eQorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfNjQ9eQorQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKK0NPTkZJR182NEJJVD15CitDT05GSUdfV09SRF9TSVpFPTY0CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CisjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCisjCisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCisjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUdfUENJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKK0NPTkZJR19CTEtfREVWX0ZEPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0FNRDc0WFg9eQorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTkVUTElOSz15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQorQ09ORklHX1NDU0lfSVBSPXkKK0NPTkZJR19TQ1NJX0lQUl9UUkFDRT15CitDT05GSUdfU0NTSV9JUFJfRFVNUD15CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xQRkM9bQorIyBDT05GSUdfU0NTSV9MUEZDX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfU0FUQV9TVlc9eQorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorQ09ORklHX01EX1JBSUQ0NTY9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTQ9eQorQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PXkKKyMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTRfUk9NX0VOVFJZPXkKK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz15CitDT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQorIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKK0NPTkZJR19XSU5ERkFSTT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPW0KKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1VOR0VNPXkKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj15CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorQ09ORklHX1RJR09OMz15CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0I9bQorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAorQ09ORklHX1RSPXkKK0NPTkZJR19JQk1PTD15CisjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9eQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FNRDgxMTE9eQorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT0Y9eQorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorQ09ORklHX0ZCX01BVFJPWD15CitDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CitDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKK0NPTkZJR19GQl9NQVRST1hfRz15CitDT05GSUdfRkJfTUFUUk9YX0kyQz1tCitDT05GSUdfRkJfTUFUUk9YX01BVkVOPW0KK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9JQk1fR1hUNDUwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDTUNJQT15CisjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EPW0KKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKK0NPTkZJR19JTkZJTklCQU5EX01USENBPW0KK0NPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCitDT05GSUdfRURBQz15CisKKyMKKyMgUmVwb3J0aW5nIHN1YnN5c3RlbXMKKyMKKyMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0VEQUNfTU1fRURBQz15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CitDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQyPXkKKyMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CitDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTEFURU5DWVRPUD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CitDT05GSUdfWE1PTj15CisjIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz15CitDT05GSUdfQVNZTkNfQ09SRT15CitDT05GSUdfQVNZTkNfTUVNQ1BZPXkKK0NPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGZmOTZiYjQuLmI3OTExMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyMCwyOSArMTIyLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1NSw2ICsxNTgsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzOSw2ICsyNDMsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwMSw2ICs0MDcsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA4LDcgKzQxNSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MjAsNiArNDI2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODEsNyArNDg4LDYgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfU0JDODI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNjY0LDcgKzY3MCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC03MTIsMTAgKzcyMCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2NCw2ICs3NjksNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNzc0LDYgKzc4MCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtODU1LDE1ICs4NjIsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4Niw2ICs4OTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC05MDUsNyArOTE3LDYgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKQEAgLTkyMiw2ICs5MzMsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTk0MCw2ICs5NTIsNyBAQAogIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPXkKIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNjEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExODMsMTAgKzExOTcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTIwOSw2ICsxMjI1LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzNyw3ICsxMjU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc5LDYgKzEyOTUsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCmluZGV4IDEyOTNjNDYuLmVmNTBjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMzEsMjggKzEzMywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0NCwxMiArMjQ3LDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Nyw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2MCw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk2LDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOSw2ICs0MTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02MzMsNiArNjM5LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzIsMTEgKzY3OSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3MDgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3MzYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MjMsOSArODM1LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NzEsMTAgKzg4NSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk3Nyw2ICs5ODgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMzEsOSArMTA0Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA1MSw2ICsxMDYwLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDAsNiArMTExNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTEsOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMTMyLDYgKzExNDUsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNTYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTYyLDcgKzExNzcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODYsNiArMTIwMCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzksNiArMTI1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE0MDQsNiArMTQyMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDYzLDcgKzE0ODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTE1NzYsNiArMTU5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTkzLDYgKzE2MTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTYxNCw3ICsxNjMyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2NDUsMTEgKzE2NjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBmMTg4OWFiLi5jNTY4MzI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMTY4Myw3ICsxNjgzLDcgQEAKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSENBTExfU1RBVFM9eQorIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnCmluZGV4IDI4Mzg0ZGMuLjUyNDI2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExOCwyOCArMTIwLDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjQzLDYgKzI0Niw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjAsNiArMjY0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDksNiArMzU0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzgsNiArMzg0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4NSw3ICszOTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MDUsOSArNDEyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTYxOSw2ICs2MjYsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NTcsNyArNjY1LDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTY3MCw2ICs2ODAsNyBAQAogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENDU2PXkKIENPTkZJR19NRF9SQUlENl9QUT15CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0CkBAIC03MjksMTAgKzc0MCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxMyw2ICs4MjEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2Nyw5ICs4NzYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg4Nyw3ICs4OTMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTA2LDYgKzkxMSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTkxNiw2ICs5MjIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk2MSw2ICs5NjgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMTQxLDYgKzExNDksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxMCw3ICsxMjE5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIENPTkZJR19FWFBPUlRGUz1tCiAKQEAgLTEzMDcsNiArMTMxNSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMjQsNiArMTMzMyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzQ0LDYgKzEzNTQsOCBAQAogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmgKaW5kZXggOTE1NGU4NS4uZjBmYjRmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VtdWxhdGVkX29wcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfRU1VTEFURURfT1BTX0gKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKIAogI2lmZGVmIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMKQEAgLTU3LDcgKzU4LDcgQEAKIAogZXh0ZXJuIHZvaWQgcHBjX3dhcm5fZW11bGF0ZWRfcHJpbnQoY29uc3QgY2hhciAqdHlwZSk7CiAKLSNkZWZpbmUgUFBDX1dBUk5fRU1VTEFURUQodHlwZSkJCQkJCQkgXAorI2RlZmluZSBfX1BQQ19XQVJOX0VNVUxBVEVEKHR5cGUpCQkJCQkgXAogCWRvIHsJCQkJCQkJCSBcCiAJCWF0b21pY19pbmMoJnBwY19lbXVsYXRlZC50eXBlLnZhbCk7CQkJIFwKIAkJaWYgKHBwY193YXJuX2VtdWxhdGVkKQkJCQkJIFwKQEAgLTY2LDggKzY3LDIyIEBACiAKICNlbHNlIC8qICFDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTICovCiAKLSNkZWZpbmUgUFBDX1dBUk5fRU1VTEFURUQodHlwZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX1BQQ19XQVJOX0VNVUxBVEVEKHR5cGUpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qICFDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTICovCiAKKyNkZWZpbmUgUFBDX1dBUk5fRU1VTEFURUQodHlwZSwgcmVncykJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLAkJXAorCQkJMSwgMCwgcmVncywgMCk7CQkJCQlcCisJCV9fUFBDX1dBUk5fRU1VTEFURUQodHlwZSk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFBQQ19XQVJOX0FMSUdOTUVOVCh0eXBlLCByZWdzKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMsCQlcCisJCQkxLCAwLCByZWdzLCByZWdzLT5kYXIpOwkJCQlcCisJCV9fUFBDX1dBUk5fRU1VTEFURUQodHlwZSk7CQkJCVwKKwl9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0VNVUxBVEVEX09QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDNhMTc5ODIuLjIwNzc4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfVklPCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA0MDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1JETUEJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDgwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfTExBTgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAxMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX0JVTEtfUkVNT1ZFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfWERBQlIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA0MDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9NVUxUSVRDRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDgwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1NQTFBBUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQpAQCAtNDUsOCArNDUsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0xQQVIJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA0MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUFMzX0xWMQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwODAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC01OCw4ICs1Nyw5IEBACiAJCUZXX0ZFQVRVUkVfUEVSRiB8IEZXX0ZFQVRVUkVfRFVNUCB8IEZXX0ZFQVRVUkVfSU5URVJSVVBUIHwKIAkJRldfRkVBVFVSRV9NSUdSQVRFIHwgRldfRkVBVFVSRV9QRVJGTU9OIHwgRldfRkVBVFVSRV9DUlEgfAogCQlGV19GRUFUVVJFX1ZJTyB8IEZXX0ZFQVRVUkVfUkRNQSB8IEZXX0ZFQVRVUkVfTExBTiB8Ci0JCUZXX0ZFQVRVUkVfQlVMSyB8IEZXX0ZFQVRVUkVfWERBQlIgfCBGV19GRUFUVVJFX01VTFRJVENFIHwKLQkJRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfCBGV19GRUFUVVJFX0NNTywKKwkJRldfRkVBVFVSRV9CVUxLX1JFTU9WRSB8IEZXX0ZFQVRVUkVfWERBQlIgfAorCQlGV19GRUFUVVJFX01VTFRJVENFIHwgRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfAorCQlGV19GRUFUVVJFX0NNTywKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAppbmRleCA2MjUxYTRiLi5jMjdjYWFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCkBAIC0yNzQsNiArMjc0LDggQEAKIAl1bnNpZ25lZCBsb25nCW51bV9jYWxsczsJLyogbnVtYmVyIG9mIGNhbGxzIChvbiB0aGlzIENQVSkgKi8KIAl1bnNpZ25lZCBsb25nCXRiX3RvdGFsOwkvKiB0b3RhbCB3YWxsIHRpbWUgKG1mdGIpIG9mIGNhbGxzLiAqLwogCXVuc2lnbmVkIGxvbmcJcHVycl90b3RhbDsJLyogdG90YWwgY3B1IHRpbWUgKFBVUlIpIG9mIGNhbGxzLiAqLworCXVuc2lnbmVkIGxvbmcJdGJfc3RhcnQ7CisJdW5zaWduZWQgbG9uZwlwdXJyX3N0YXJ0OwogfTsKICNkZWZpbmUgSENBTExfU1RBVF9BUlJBWV9TSVpFCSgoTUFYX0hDQUxMX09QQ09ERSA+PiAyKSArIDEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCA2MzE1ZWRjLi5iYzhkZDUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC00ODksNiArNDg5LDggQEAKICNkZWZpbmUgU1BSTl9NTUNSMQk3OTgKICNkZWZpbmUgU1BSTl9NTUNSQQkweDMxMgogI2RlZmluZSAgIE1NQ1JBX1NEU1lOQwkweDgwMDAwMDAwVUwgLyogU0RBUiBzeW5jZWQgd2l0aCBTSUFSICovCisjZGVmaW5lICAgTU1DUkFfU0RBUl9EQ0FDSEVfTUlTUyAweDQwMDAwMDAwVUwKKyNkZWZpbmUgICBNTUNSQV9TREFSX0VSQVRfTUlTUyAgIDB4MjAwMDAwMDBVTAogI2RlZmluZSAgIE1NQ1JBX1NJSFYJMHgxMDAwMDAwMFVMIC8qIHN0YXRlIG9mIE1TUiBIViB3aGVuIFNJQVIgc2V0ICovCiAjZGVmaW5lICAgTU1DUkFfU0lQUgkweDA4MDAwMDAwVUwgLyogc3RhdGUgb2YgTVNSIFBSIHdoZW4gU0lBUiBzZXQgKi8KICNkZWZpbmUgICBNTUNSQV9TTE9UCTB4MDcwMDAwMDBVTCAvKiBTTE9UIGJpdHMgKDM3LTM5KSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RyYWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUyMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RyYWNlLmgKQEAgLTAsMCArMSwxMzMgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHBvd2VycGMKKworI2lmICFkZWZpbmVkKF9UUkFDRV9QT1dFUlBDX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9QT1dFUlBDX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK1RSQUNFX0VWRU5UKGlycV9lbnRyeSwKKworCVRQX1BST1RPKHN0cnVjdCBwdF9yZWdzICpyZWdzKSwKKworCVRQX0FSR1MocmVncyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5yZWdzID0gcmVnczsKKwkpLAorCisJVFBfcHJpbnRrKCJwdF9yZWdzPSVwIiwgX19lbnRyeS0+cmVncykKKyk7CisKK1RSQUNFX0VWRU5UKGlycV9leGl0LAorCisJVFBfUFJPVE8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpLAorCisJVFBfQVJHUyhyZWdzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IHB0X3JlZ3MgKiwgcmVncykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJlZ3MgPSByZWdzOworCSksCisKKwlUUF9wcmludGsoInB0X3JlZ3M9JXAiLCBfX2VudHJ5LT5yZWdzKQorKTsKKworVFJBQ0VfRVZFTlQodGltZXJfaW50ZXJydXB0X2VudHJ5LAorCisJVFBfUFJPVE8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpLAorCisJVFBfQVJHUyhyZWdzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IHB0X3JlZ3MgKiwgcmVncykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJlZ3MgPSByZWdzOworCSksCisKKwlUUF9wcmludGsoInB0X3JlZ3M9JXAiLCBfX2VudHJ5LT5yZWdzKQorKTsKKworVFJBQ0VfRVZFTlQodGltZXJfaW50ZXJydXB0X2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcHRfcmVncyAqcmVncyksCisKKwlUUF9BUkdTKHJlZ3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cmVncyA9IHJlZ3M7CisJKSwKKworCVRQX3ByaW50aygicHRfcmVncz0lcCIsIF9fZW50cnktPnJlZ3MpCispOworCisjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCitleHRlcm4gdm9pZCBoY2FsbF90cmFjZXBvaW50X3JlZ2Z1bmModm9pZCk7CitleHRlcm4gdm9pZCBoY2FsbF90cmFjZXBvaW50X3VucmVnZnVuYyh2b2lkKTsKKworVFJBQ0VfRVZFTlRfRk4oaGNhbGxfZW50cnksCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqYXJncyksCisKKwlUUF9BUkdTKG9wY29kZSwgYXJncyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG9wY29kZSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm9wY29kZSA9IG9wY29kZTsKKwkpLAorCisJVFBfcHJpbnRrKCJvcGNvZGU9JWx1IiwgX19lbnRyeS0+b3Bjb2RlKSwKKworCWhjYWxsX3RyYWNlcG9pbnRfcmVnZnVuYywgaGNhbGxfdHJhY2Vwb2ludF91bnJlZ2Z1bmMKKyk7CisKK1RSQUNFX0VWRU5UX0ZOKGhjYWxsX2V4aXQsCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyByZXR2YWwsCisJCXVuc2lnbmVkIGxvbmcgKnJldGJ1ZiksCisKKwlUUF9BUkdTKG9wY29kZSwgcmV0dmFsLCByZXRidWYpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBvcGNvZGUpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgcmV0dmFsKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+b3Bjb2RlID0gb3Bjb2RlOworCQlfX2VudHJ5LT5yZXR2YWwgPSByZXR2YWw7CisJKSwKKworCVRQX3ByaW50aygib3Bjb2RlPSVsdSByZXR2YWw9JWx1IiwgX19lbnRyeS0+b3Bjb2RlLCBfX2VudHJ5LT5yZXR2YWwpLAorCisJaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jLCBoY2FsbF90cmFjZXBvaW50X3VucmVnZnVuYworKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1RSQUNFX1BPV0VSUENfSCAqLworCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjdW5kZWYgVFJBQ0VfSU5DTFVERV9GSUxFCisKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIGFzbQorI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdHJhY2UKKworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCmluZGV4IGE1YjYzMmU1Li4zODM5ODM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCkBAIC03MzIsNyArNzMyLDcgQEAKIAogI2lmZGVmIENPTkZJR19TUEUKIAlpZiAoKGluc3RyID4+IDI2KSA9PSAweDQpIHsKLQkJUFBDX1dBUk5fRU1VTEFURUQoc3BlKTsKKwkJUFBDX1dBUk5fQUxJR05NRU5UKHNwZSwgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX3NwZShyZWdzLCByZWcsIGluc3RyKTsKIAl9CiAjZW5kaWYKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQkJZmxhZ3MgfD0gU1BMVDsKIAkJCW5iID0gODsKIAkJfQotCQlQUENfV0FSTl9FTVVMQVRFRCh2c3gpOworCQlQUENfV0FSTl9BTElHTk1FTlQodnN4LCByZWdzKTsKIAkJcmV0dXJuIGVtdWxhdGVfdnN4KGFkZHIsIHJlZywgYXJlZywgcmVncywgZmxhZ3MsIG5iKTsKIAl9CiAjZW5kaWYKQEAgLTc5NCw3ICs3OTQsNyBAQAogCSAqIHRoZSBleGNlcHRpb24gb2YgRENCWiB3aGljaCBpcyBoYW5kbGVkIGFzIGEgc3BlY2lhbCBjYXNlIGhlcmUKIAkgKi8KIAlpZiAoaW5zdHIgPT0gRENCWikgewotCQlQUENfV0FSTl9FTVVMQVRFRChkY2J6KTsKKwkJUFBDX1dBUk5fQUxJR05NRU5UKGRjYnosIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV9kY2J6KHJlZ3MsIGFkZHIpOwogCX0KIAlpZiAodW5saWtlbHkobmIgPT0gMCkpCkBAIC04MDQsNyArODA0LDcgQEAKIAkgKiBmdW5jdGlvbgogCSAqLwogCWlmIChmbGFncyAmIE0pIHsKLQkJUFBDX1dBUk5fRU1VTEFURUQobXVsdGlwbGUpOworCQlQUENfV0FSTl9BTElHTk1FTlQobXVsdGlwbGUsIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV9tdWx0aXBsZShyZWdzLCBhZGRyLCByZWcsIG5iLAogCQkJCQlmbGFncywgaW5zdHIsIHN3aXopOwogCX0KQEAgLTgyNSwxMSArODI1LDExIEBACiAKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIDE2LWJ5dGUgRlAgbG9hZHMgYW5kIHN0b3JlcyAqLwogCWlmIChuYiA9PSAxNikgewotCQlQUENfV0FSTl9FTVVMQVRFRChmcF9wYWlyKTsKKwkJUFBDX1dBUk5fQUxJR05NRU5UKGZwX3BhaXIsIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV9mcF9wYWlyKGFkZHIsIHJlZywgZmxhZ3MpOwogCX0KIAotCVBQQ19XQVJOX0VNVUxBVEVEKHVuYWxpZ25lZCk7CisJUFBDX1dBUk5fQUxJR05NRU5UKHVuYWxpZ25lZCwgcmVncyk7CiAKIAkvKiBJZiB3ZSBhcmUgbG9hZGluZywgZ2V0IHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSwgZWxzZQogCSAqIGdldCBpdCBmcm9tIHJlZ2lzdGVyIHZhbHVlcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDBiOWM5MTMuLjAzYzg2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTcxMSw2ICs3MTEsOCBAQAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc0NS83NTUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggOTAwZTBlZS4uYmRjYjU1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNTUxLDcgKzU1MSw3IEBACiBCRUdJTl9GV19GVFJfU0VDVElPTgogCWxkCXI1LFNPRlRFKHIxKQogRldfRlRSX1NFQ1RJT05fRUxTRQotCWIJaXNlcmllc19jaGVja19wZW5kaW5nX2lycXMKKwliCS5MaXNlcmllc19jaGVja19wZW5kaW5nX2lycXMKIEFMVF9GV19GVFJfU0VDVElPTl9FTkRfSUZDTFIoRldfRkVBVFVSRV9JU0VSSUVTKQogMjoKIAlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjUpOwpAQCAtNjIzLDcgKzYyMyw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLwogCi1pc2VyaWVzX2NoZWNrX3BlbmRpbmdfaXJxczoKKy5MaXNlcmllc19jaGVja19wZW5kaW5nX2lycXM6CiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAJbGQJcjUsU09GVEUocjEpCiAJY21wZGkJMCxyNSwwCkBAIC02NTgsNDIgKzY1OCw0MyBAQAogCWNtcGRpCXIwLDAKIAljcmFuZGMJZXEsY3IxKjQrZXEsZXEKIAlibmUJcmVzdG9yZQotCS8qIGhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzayAqLwotMToKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAkudHJhY2VfaGFyZGlycXNfb24KLQkvKiBOb3RlOiB3ZSBqdXN0IGNsb2JiZXJlZCByMTAgd2hpY2ggdXNlZCB0byBjb250YWluIHRoZSBwcmV2aW91cwotCSAqIE1TUiBiZWZvcmUgdGhlIGhhcmQtZGlzYWJsaW5nIGRvbmUgYnkgdGhlIGNhbGxlciBvZiBkb193b3JrLgotCSAqIFdlIGRvbid0IGhhdmUgdGhhdCB2YWx1ZSBhbnltb3JlLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYXMKLQkgKiB3ZSB3aWxsIGhhcmQtZW5hYmxlIHVuY29uZGl0aW9uYWxseSwgd2UgY2FuIGp1c3QgcmVsb2FkIHRoZQotCSAqIGN1cnJlbnQgTVNSIGludG8gcjEwCisKKwkvKiBIZXJlIHdlIGFyZSBwcmVlbXB0aW5nIHRoZSBjdXJyZW50IHRhc2suCisJICoKKwkgKiBFbnN1cmUgaW50ZXJydXB0cyBhcmUgc29mdC1kaXNhYmxlZC4gV2UgYWxzbyBwcm9wZXJseSBtYXJrCisJICogdGhlIFBBQ0EgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGhhcmQtZGlzYWJsZWQKKwkgKiBhbmQgdHJhY2UgdGhlIGNoYW5nZQogCSAqLwotCW1mbXNyCXIxMAotI2VuZGlmIC8qIENPTkZJR19UUkFDRV9JUlFGTEFHUyAqLwotCWxpCXIwLDEKKwlsaQlyMCwwCiAJc3RiCXIwLFBBQ0FTT0ZUSVJRRU4ocjEzKQogCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKwlUUkFDRV9ESVNBQkxFX0lOVFMKKworCS8qIENhbGwgdGhlIHNjaGVkdWxlciB3aXRoIHNvZnQgSVJRcyBvZmYgKi8KKzE6CWJsCS5wcmVlbXB0X3NjaGVkdWxlX2lycQorCisJLyogSGFyZC1kaXNhYmxlIGludGVycnVwdHMgYWdhaW4gKGFuZCB1cGRhdGUgUEFDQSkgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotCXdydGVlaQkxCi0JYmwJLnByZWVtcHRfc2NoZWR1bGUKIAl3cnRlZWkJMAogI2Vsc2UKLQlvcmkJcjEwLHIxMCxNU1JfRUUKLQltdG1zcmQJcjEwLDEJCS8qIHJlZW5hYmxlIGludGVycnVwdHMgKi8KLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCW1mbXNyCXIxMAotCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKLQlybGRpY2wJcjEwLHIxMCw0OCwxCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAqLworCXJsZGljbAlyMTAscjEwLDQ4LDEKIAlyb3RsZGkJcjEwLHIxMCwxNgogCW10bXNyZAlyMTAsMQogI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCisJbGkJcjAsMAorCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKworCS8qIFJlLXRlc3QgZmxhZ3MgYW5kIGV2ZW50dWFsbHkgbG9vcCAqLworCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKIAlsZAlyNCxUSV9GTEFHUyhyOSkKIAlhbmRpLglyMCxyNCxfVElGX05FRURfUkVTQ0hFRAogCWJuZQkxYgogCWIJcmVzdG9yZQogCiB1c2VyX3dvcms6Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogCXdydGVlaQkxCkBAIC0xMDM4LDggKzEwMzksNyBAQAogCSAqIFdlIGFyZSBpbiBhIG1vZHVsZSB1c2luZyB0aGUgbW9kdWxlJ3MgVE9DLgogCSAqIFN3aXRjaCB0byBvdXIgVE9DIHRvIHJ1biBpbnNpZGUgdGhlIGNvcmUga2VybmVsLgogCSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCxmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIpCi0JbGQJcjIsIDgocjQpCisJbGQJcjIsIFBBQ0FUT0MocjEzKQogCiAJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IDE4MDg4NzYuLmM3ZWI0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTE4NSwxMiArMTg1LDE1IEBACiAJICogcHJvbG9nIGNvZGUgb2YgdGhlIFBlcmZvcm1hbmNlTW9uaXRvciBvbmUuIEEgbGl0dGxlCiAJICogdHJpY2tlcnkgaXMgdGh1cyBuZWNlc3NhcnkKIAkgKi8KK3BlcmZvcm1hbmNlX21vbml0b3JfcFNlcmllc18xOgogCS4gPSAweGYwMAogCWIJcGVyZm9ybWFuY2VfbW9uaXRvcl9wU2VyaWVzCiAKK2FsdGl2ZWNfdW5hdmFpbGFibGVfcFNlcmllc18xOgogCS4gPSAweGYyMAogCWIJYWx0aXZlY191bmF2YWlsYWJsZV9wU2VyaWVzCiAKK3ZzeF91bmF2YWlsYWJsZV9wU2VyaWVzXzE6CiAJLiA9IDB4ZjQwCiAJYgl2c3hfdW5hdmFpbGFibGVfcFNlcmllcwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCBlNWQxMjExLi4wMmEzMzQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTcwLDYgKzcwLDggQEAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgogI2VuZGlmCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlIDxhc20vdHJhY2UuaD4KIAogaW50IF9faXJxX29mZnNldF92YWx1ZTsKIHN0YXRpYyBpbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHM7CkBAIC0zMjUsNiArMzI3LDggQEAKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJdW5zaWduZWQgaW50IGlycTsKIAorCXRyYWNlX2lycV9lbnRyeShyZWdzKTsKKwogCWlycV9lbnRlcigpOwogCiAJY2hlY2tfc3RhY2tfb3ZlcmZsb3coKTsKQEAgLTM0OCw2ICszNTIsOCBAQAogCQl0aW1lcl9pbnRlcnJ1cHQocmVncyk7CiAJfQogI2VuZGlmCisKKwl0cmFjZV9pcnFfZXhpdChyZWdzKTsKIH0KIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKaW5kZXggZmU4ZjcxZC4uNjQxYzc0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKQEAgLTI4MiwxMiArMjgyLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpwdHIgPSBnZGJfcmVnczsKIAlpbnQgcmVnOwotI2lmZGVmIENPTkZJR19TUEUKLQl1bmlvbiB7Ci0JCXUzMiB2MzJbMl07Ci0JCXU2NCB2NjQ7Ci0JfSBhY2M7Ci0jZW5kaWYKIAogCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQogCQlVTlBBQ0s2NChyZWdzLT5ncHJbcmVnXSwgcHRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggYmI4MjA5ZS4uZThkZmRiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExOTAsNyArMTE5MCw3IEBACiAgKiBSZXBhcmVudCByZXNvdXJjZSBjaGlsZHJlbiBvZiBwciB0aGF0IGNvbmZsaWN0IHdpdGggcmVzCiAgKiB1bmRlciByZXMsIGFuZCBtYWtlIHJlcyByZXBsYWNlIHRob3NlIGNoaWxkcmVuLgogICovCi1zdGF0aWMgaW50IF9faW5pdCByZXBhcmVudF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCitzdGF0aWMgaW50IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcCwgKipwcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGJhOTQ5YTIuLmNjZjU2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtOTcsNyArOTcsOSBAQAogCSAqIHRvIGRvIGFuIGFwcHJvcHJpYXRlIFRMQiBmbHVzaCBoZXJlIHRvbwogCSAqLwogCWlmIChidXMtPnNlbGYpIHsKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKIAkJc3RydWN0IHJlc291cmNlICpyZXMgPSBidXMtPnJlc291cmNlWzBdOworI2VuZGlmCiAKIAkJcHJfZGVidWcoIklPIHVubWFwcGluZyBmb3IgUENJLVBDSSBicmlkZ2UgJXNcbiIsCiAJCQkgcGNpX25hbWUoYnVzLT5zZWxmKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGJiY2JhZTEuLjFlYjg1ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMTYsMjAgKzExNiwyMyBAQAogc3RhdGljIGlubGluZSB1MzIgcGVyZl9nZXRfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIG1tY3JhID0gcmVncy0+ZHNpc3I7CisJdW5zaWduZWQgbG9uZyBzaWh2ID0gTU1DUkFfU0lIVjsKKwl1bnNpZ25lZCBsb25nIHNpcHIgPSBNTUNSQV9TSVBSOwogCiAJaWYgKFRSQVAocmVncykgIT0gMHhmMDApCiAJCXJldHVybiAwOwkvKiBub3QgYSBQTVUgaW50ZXJydXB0ICovCiAKIAlpZiAocHBtdS0+ZmxhZ3MgJiBQUE1VX0FMVF9TSVBSKSB7Ci0JCWlmIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSUhWKQotCQkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKLQkJcmV0dXJuIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSVBSKSA/Ci0JCQlQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKKwkJc2lodiA9IFBPV0VSNl9NTUNSQV9TSUhWOworCQlzaXByID0gUE9XRVI2X01NQ1JBX1NJUFI7CiAJfQotCWlmIChtbWNyYSAmIE1NQ1JBX1NJSFYpCisKKwkvKiBQUiBoYXMgcHJpb3JpdHkgb3ZlciBIViwgc28gb3JkZXIgYmVsb3cgaXMgaW1wb3J0YW50ICovCisJaWYgKG1tY3JhICYgc2lwcikKKwkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKKwlpZiAoKG1tY3JhICYgc2lodikgJiYgKGZyZWV6ZV9ldmVudHNfa2VybmVsICE9IE1NQ1IwX0ZDSFYpKQogCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCXJldHVybiAobW1jcmEgJiBNTUNSQV9TSVBSKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6Ci0JCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIH0KIAogLyoKQEAgLTExNjIsNyArMTE2NSw3IEBACiAJICovCiAJaWYgKHJlY29yZCkgewogCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0gewotCQkJLmFkZHIJPSAwLAorCQkJLmFkZHIJPSB+MFVMTCwKIAkJCS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2QsCiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYwppbmRleCAwZjRjMWM3Li4xOTlkZTUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jCkBAIC03MywxMCArNzMsNiBAQAogI2RlZmluZSBNTUNSMV9QTUNTRUxfTVNLCTB4N2YKIAogLyoKLSAqIEJpdHMgaW4gTU1DUkEKLSAqLwotCi0vKgogICogTGF5b3V0IG9mIGNvbnN0cmFpbnQgYml0czoKICAqIDY2NjY1NTU1NTU1NTU1NDQ0NDQ0NDQ0NDMzMzMzMzMzMzMyMjIyMjIyMjIyMTExMTExMTExMTAwMDAwMDAwMDAKICAqIDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKaW5kZXggYzM1MWIzYS4uOThiNmE3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKQEAgLTczLDEwICs3Myw2IEBACiAjZGVmaW5lIE1NQ1IxX1BNQ1NFTF9NU0sJMHg3ZgogCiAvKgotICogQml0cyBpbiBNTUNSQQotICovCi0KLS8qCiAgKiBMYXlvdXQgb2YgY29uc3RyYWludCBiaXRzOgogICogNjY2NjU1NTU1NTU1NTU0NDQ0NDQ0NDQ0MzMzMzMzMzMzMzIyMjIyMjIyMjIxMTExMTExMTExMDAwMDAwMDAwMAogICogMzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMApAQCAtMzkwLDcgKzM4Niw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IGh3Y1tdLCB1bnNpZ25lZCBsb25nIG1tY3JbXSkKIHsKIAl1bnNpZ25lZCBsb25nIG1tY3IxID0gMDsKLQl1bnNpZ25lZCBsb25nIG1tY3JhID0gMDsKKwl1bnNpZ25lZCBsb25nIG1tY3JhID0gTU1DUkFfU0RBUl9EQ0FDSEVfTUlTUyB8IE1NQ1JBX1NEQVJfRVJBVF9NSVNTOwogCXVuc2lnbmVkIGludCBwbWMsIHVuaXQsIGJ5dGUsIHBzZWw7CiAJdW5zaWduZWQgaW50IHR0bSwgZ3JwOwogCWludCBpLCBpc2J1cywgYml0LCBncnNlbDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI2LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKaW5kZXggY2EzOTliYS4uODRhNjA3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkJICAgdW5zaWduZWQgaW50IGh3Y1tdLCB1bnNpZ25lZCBsb25nIG1tY3JbXSkKIHsKIAl1bnNpZ25lZCBsb25nIG1tY3IxID0gMDsKLQl1bnNpZ25lZCBsb25nIG1tY3JhID0gMDsKKwl1bnNpZ25lZCBsb25nIG1tY3JhID0gTU1DUkFfU0RBUl9EQ0FDSEVfTUlTUyB8IE1NQ1JBX1NEQVJfRVJBVF9NSVNTOwogCWludCBpOwogCXVuc2lnbmVkIGludCBwbWMsIGV2LCBiLCB1LCBzLCBwc2VsOwogCXVuc2lnbmVkIGludCB0dG1zZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYwppbmRleCAyOGE0ZGFhLi44NTJmN2I3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYwpAQCAtNTEsMTAgKzUxLDYgQEAKICNkZWZpbmUgTU1DUjFfUE1DU0VMX01TSwkweGZmCiAKIC8qCi0gKiBCaXRzIGluIE1NQ1JBCi0gKi8KLQotLyoKICAqIExheW91dCBvZiBjb25zdHJhaW50IGJpdHM6CiAgKiA2NjY2NTU1NTU1NTU1NTQ0NDQ0NDQ0NDQzMzMzMzMzMzMzMjIyMjIyMjIyMjExMTExMTExMTEwMDAwMDAwMDAwCiAgKiAzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCkBAIC0yMzAsNyArMjI2LDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaHdjW10sIHVuc2lnbmVkIGxvbmcgbW1jcltdKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcjEgPSAwOwotCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSAwOworCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSBNTUNSQV9TREFSX0RDQUNIRV9NSVNTIHwgTU1DUkFfU0RBUl9FUkFUX01JU1M7CiAJdW5zaWduZWQgaW50IHBtYywgdW5pdCwgY29tYmluZSwgbDJzZWwsIHBzZWw7CiAJdW5zaWduZWQgaW50IHBtY19pbnVzZSA9IDA7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwYzk3MC1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCmluZGV4IDQ3OTU3NDQuLjhlZmY0OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCkBAIC04NCwxMCArODQsNiBAQAogfTsKIAogLyoKLSAqIEJpdHMgaW4gTU1DUkEKLSAqLwotCi0vKgogICogTGF5b3V0IG9mIGNvbnN0cmFpbnQgYml0czoKICAqIDY2NjY1NTU1NTU1NTU1NDQ0NDQ0NDQ0NDMzMzMzMzMzMzMyMjIyMjIyMjIyMTExMTExMTExMTAwMDAwMDAwMDAKICAqIDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTE2OGM1Zi4uYzkzMGFjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEwMTYsOSArMTAxNiwxMyBAQAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlpbnQgY3Vycl9mcmFtZSA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwogCWV4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJldHVybl90b19oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgcnRoID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBtcnRoID0gLTE7CiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0JYWRkciA9ICoodW5zaWduZWQgbG9uZyopYWRkcjsKKwlleHRlcm4gdm9pZCBtb2RfcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CisJcnRoID0gKih1bnNpZ25lZCBsb25nICopcnRoOworCW1ydGggPSAodW5zaWduZWQgbG9uZyltb2RfcmV0dXJuX3RvX2hhbmRsZXI7CisJbXJ0aCA9ICoodW5zaWduZWQgbG9uZyAqKW1ydGg7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xMDQ0LDcgKzEwNDgsNyBAQAogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQlpZiAoKGlwID09IHJ0aCB8fCBpcCA9PSBtcnRoKSAmJiBjdXJyX2ZyYW1lID49IDApIHsKIAkJCQlwcmludGsoIiAoJXBTKSIsCiAJCQkJICAgICAgICh2b2lkICopY3VycmVudC0+cmV0X3N0YWNrW2N1cnJfZnJhbWVdLnJldCk7CiAJCQkJY3Vycl9mcmFtZS0tOwpAQCAtMTE2OCw3ICsxMTcyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBtbS0+YnJrOwogCXVuc2lnbmVkIGxvbmcgcmV0OwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CisjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0CiAJLyoKIAkgKiBJZiB3ZSBhcmUgdXNpbmcgMVRCIHNlZ21lbnRzIGFuZCB3ZSBhcmUgYWxsb3dlZCB0byByYW5kb21pc2UKIAkgKiB0aGUgaGVhcCwgd2UgY2FuIHB1dCBpdCBhYm92ZSAxVEIgc28gaXQgaXMgYmFja2VkIGJ5IGEgMVRCCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCA0MjcxZjdhLi44NDVjNzJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTY2MCw2ICs2NjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdHJ1Y3QgZGVudHJ5ICpwb3dlcnBjX2RlYnVnZnNfcm9vdDsKK0VYUE9SVF9TWU1CT0wocG93ZXJwY19kZWJ1Z2ZzX3Jvb3QpOwogCiBzdGF0aWMgaW50IHBvd2VycGNfZGVidWdmc19pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNzk3ZWE5NS4uMDRmNjM4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA5MmRjODQ0Li4zNjcwN2RlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNTcxLDYgKzU3Miw4IEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmRlY3JlbWVudGVyLT5ldmVudDsKIAl1NjQgbm93OwogCisJdHJhY2VfdGltZXJfaW50ZXJydXB0X2VudHJ5KHJlZ3MpOworCiAJLyogRW5zdXJlIGEgcG9zaXRpdmUgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgZGVjcmVtZW50ZXIsIG9yIGVsc2UKIAkgKiBzb21lIENQVXMgd2lsbCBjb250aW51dWUgdG8gdGFrZSBkZWNyZW1lbnRlciBleGNlcHRpb25zICovCiAJc2V0X2RlYyhERUNSRU1FTlRFUl9NQVgpOwpAQCAtNTkwLDYgKzU5Myw3IEBACiAJCW5vdyA9IGRlY3JlbWVudGVyLT5uZXh0X3RiIC0gbm93OwogCQlpZiAobm93IDw9IERFQ1JFTUVOVEVSX01BWCkKIAkJCXNldF9kZWMoKGludClub3cpOworCQl0cmFjZV90aW1lcl9pbnRlcnJ1cHRfZXhpdChyZWdzKTsKIAkJcmV0dXJuOwogCX0KIAlvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKQEAgLTYyMCw2ICs2MjQsOCBAQAogCiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworCisJdHJhY2VfdGltZXJfaW50ZXJydXB0X2V4aXQocmVncyk7CiB9CiAKIHZvaWQgd2FrZXVwX2RlY3JlbWVudGVyKHZvaWQpCkBAIC03NzcsNyArNzgzLDcgQEAKIAlyZXR1cm4gcHBjX21kLnNldF9ydGNfdGltZSgmdG0pOwogfQogCi12b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQorc3RhdGljIHZvaWQgX19yZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CkBAIC04MDAsMTAgKzgwNiwyMyBAQAogCQlyZXR1cm47CiAJfQogCXBwY19tZC5nZXRfcnRjX3RpbWUoJnRtKTsKKwogCXRzLT50dl9zZWMgPSBta3RpbWUodG0udG1feWVhcisxOTAwLCB0bS50bV9tb24rMSwgdG0udG1fbWRheSwKIAkJCSAgICB0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYyk7CiB9CiAKK3ZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJX19yZWFkX3BlcnNpc3RlbnRfY2xvY2sodHMpOworCisJLyogU2FuaXRpemUgaXQgaW4gY2FzZSByZWFsIHRpbWUgY2xvY2sgaXMgc2V0IGJlbG93IEVQT0NIICovCisJaWYgKHRzLT50dl9zZWMgPCAwKSB7CisJCXRzLT50dl9zZWMgPSAwOworCQl0cy0+dHZfbnNlYyA9IDA7CisJfQorCQkKK30KKwogLyogY2xvY2tzb3VyY2UgY29kZSAqLwogc3RhdGljIGN5Y2xlX3QgcnRjX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCA2ZjBhZTFhLi45ZDFmOTM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC03NTksNyArNzU5LDcgQEAKIAogCS8qIEVtdWxhdGUgdGhlIG1mc3ByIHJELCBQVlIuICovCiAJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX01GU1BSX1BWUl9NQVNLKSA9PSBQUENfSU5TVF9NRlNQUl9QVlIpIHsKLQkJUFBDX1dBUk5fRU1VTEFURUQobWZwdnIpOworCQlQUENfV0FSTl9FTVVMQVRFRChtZnB2ciwgcmVncyk7CiAJCXJkID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CiAJCXJlZ3MtPmdwcltyZF0gPSBtZnNwcihTUFJOX1BWUik7CiAJCXJldHVybiAwOwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAKIAkvKiBFbXVsYXRpbmcgdGhlIGRjYmEgaW5zbiBpcyBqdXN0IGEgbm8tb3AuICAqLwogCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9EQ0JBX01BU0spID09IFBQQ19JTlNUX0RDQkEpIHsKLQkJUFBDX1dBUk5fRU1VTEFURUQoZGNiYSk7CisJCVBQQ19XQVJOX0VNVUxBVEVEKGRjYmEsIHJlZ3MpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQlpbnQgc2hpZnQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxYzsKIAkJdW5zaWduZWQgbG9uZyBtc2sgPSAweGYwMDAwMDAwVUwgPj4gc2hpZnQ7CiAKLQkJUFBDX1dBUk5fRU1VTEFURUQobWNyeHIpOworCQlQUENfV0FSTl9FTVVMQVRFRChtY3J4ciwgcmVncyk7CiAJCXJlZ3MtPmNjciA9IChyZWdzLT5jY3IgJiB+bXNrKSB8ICgocmVncy0+eGVyID4+IHNoaWZ0KSAmIG1zayk7CiAJCXJlZ3MtPnhlciAmPSB+MHhmMDAwMDAwMFVMOwogCQlyZXR1cm4gMDsKQEAgLTc4NCwxOSArNzg0LDE5IEBACiAKIAkvKiBFbXVsYXRlIGxvYWQvc3RvcmUgc3RyaW5nIGluc24uICovCiAJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSykgPT0gUFBDX0lOU1RfU1RSSU5HKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKHN0cmluZyk7CisJCVBQQ19XQVJOX0VNVUxBVEVEKHN0cmluZywgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX3N0cmluZ19pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKIAkvKiBFbXVsYXRlIHRoZSBwb3BjbnRiIChQb3B1bGF0aW9uIENvdW50IEJ5dGVzKSBpbnN0cnVjdGlvbi4gKi8KIAlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfUE9QQ05UQl9NQVNLKSA9PSBQUENfSU5TVF9QT1BDTlRCKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKHBvcGNudGIpOworCQlQUENfV0FSTl9FTVVMQVRFRChwb3BjbnRiLCByZWdzKTsKIAkJcmV0dXJuIGVtdWxhdGVfcG9wY250Yl9pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKIAkvKiBFbXVsYXRlIGlzZWwgKEludGVnZXIgU2VsZWN0KSBpbnN0cnVjdGlvbiAqLwogCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9JU0VMX01BU0spID09IFBQQ19JTlNUX0lTRUwpIHsKLQkJUFBDX1dBUk5fRU1VTEFURUQoaXNlbCk7CisJCVBQQ19XQVJOX0VNVUxBVEVEKGlzZWwsIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV9pc2VsKHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKQEAgLTk5NSw3ICs5OTUsNyBAQAogI2lmZGVmIENPTkZJR19NQVRIX0VNVUxBVElPTgogCWVycmNvZGUgPSBkb19tYXRoZW11KHJlZ3MpOwogCWlmIChlcnJjb2RlID49IDApCi0JCVBQQ19XQVJOX0VNVUxBVEVEKG1hdGgpOworCQlQUENfV0FSTl9FTVVMQVRFRChtYXRoLCByZWdzKTsKIAogCXN3aXRjaCAoZXJyY29kZSkgewogCWNhc2UgMDoKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSkKIAllcnJjb2RlID0gU29mdF9lbXVsYXRlXzh4eChyZWdzKTsKIAlpZiAoZXJyY29kZSA+PSAwKQotCQlQUENfV0FSTl9FTVVMQVRFRCg4eHgpOworCQlQUENfV0FSTl9FTVVMQVRFRCg4eHgsIHJlZ3MpOwogCiAJc3dpdGNoIChlcnJjb2RlKSB7CiAJY2FzZSAwOgpAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIAogCWZsdXNoX2FsdGl2ZWNfdG9fdGhyZWFkKGN1cnJlbnQpOwogCi0JUFBDX1dBUk5fRU1VTEFURUQoYWx0aXZlYyk7CisJUFBDX1dBUk5fRU1VTEFURUQoYWx0aXZlYywgcmVncyk7CiAJZXJyID0gZW11bGF0ZV9hbHRpdmVjKHJlZ3MpOwogCWlmIChlcnIgPT0gMCkgewogCQlyZWdzLT5uaXAgKz0gNDsJCS8qIHNraXAgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggOTRlMmRmMy4uMTM3ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTUwLDYgKzUwLDkgQEAKIC8qIE1heCBzdXBwb3J0ZWQgc2l6ZSBmb3Igc3ltYm9sIG5hbWVzICovCiAjZGVmaW5lIE1BWF9TWU1OQU1FCTY0CiAKKy8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHZEU08gKi8KKyNkZWZpbmUgVkRTT19BTElHTk1FTlQJKDEgPDwgMTYpCisKIGV4dGVybiBjaGFyIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZDsKIHN0YXRpYyB2b2lkICp2ZHNvMzJfa2Jhc2UgPSAmdmRzbzMyX3N0YXJ0Owogc3RhdGljIHVuc2lnbmVkIGludCB2ZHNvMzJfcGFnZXM7CkBAIC0yMzEsMTUgKzIzNCwyMSBAQAogCSAqIHBpY2sgYSBiYXNlIGFkZHJlc3MgZm9yIHRoZSB2RFNPIGluIHByb2Nlc3Mgc3BhY2UuIFdlIHRyeSB0byBwdXQgaXQKIAkgKiBhdCB2ZHNvX2Jhc2Ugd2hpY2ggaXMgdGhlICJuYXR1cmFsIiBiYXNlIGZvciBpdCwgYnV0IHdlIG1pZ2h0IGZhaWwKIAkgKiBhbmQgZW5kIHVwIHB1dHRpbmcgaXQgZWxzZXdoZXJlLgorCSAqIEFkZCBlbm91Z2ggdG8gdGhlIHNpemUgc28gdGhhdCB0aGUgcmVzdWx0IGNhbiBiZSBhbGlnbmVkLgogCSAqLwogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJdmRzb19iYXNlID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgdmRzb19iYXNlLAotCQkJCSAgICAgIHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCwgMCwgMCk7CisJCQkJICAgICAgKHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCkgKworCQkJCSAgICAgICgoVkRTT19BTElHTk1FTlQgLSAxKSAmIFBBR0VfTUFTSyksCisJCQkJICAgICAgMCwgMCk7CiAJaWYgKElTX0VSUl9WQUxVRSh2ZHNvX2Jhc2UpKSB7CiAJCXJjID0gdmRzb19iYXNlOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKIAl9CiAKKwkvKiBBZGQgcmVxdWlyZWQgYWxpZ25tZW50LiAqLworCXZkc29fYmFzZSA9IEFMSUdOKHZkc29fYmFzZSwgVkRTT19BTElHTk1FTlQpOworCiAJLyoKIAkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKIAkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCmluZGV4IDkwNGVmMTMuLjA1NDZiY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTI1LDcgKzI1LDcgQEAKIAkuID0gQUxJR04oMTYpOwogCS50ZXh0CQk6IHsKIAkJKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qIF9fZnRyX2FsdF8qKQotCX0KKwl9CQkgICAgICAJICAgICAgCQkJOnRleHQKIAlQUk9WSURFKF9fZXRleHQgPSAuKTsKIAlQUk9WSURFKF9ldGV4dCA9IC4pOwogCVBST1ZJREUoZXRleHQgPSAuKTsKQEAgLTU2LDcgKzU2LDcgQEAKIAkuZml4dXAJCTogeyAqKC5maXh1cCkgfQogCiAJLmR5bmFtaWMJOiB7ICooLmR5bmFtaWMpIH0JCTp0ZXh0CTpkeW5hbWljCi0JLmdvdAkJOiB7ICooLmdvdCkgfQorCS5nb3QJCTogeyAqKC5nb3QpIH0JCQk6dGV4dAogCS5wbHQJCTogeyAqKC5wbHQpIH0KIAogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGY1NjQyOTMuLjI3NzM1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCQlSRUFEX01PU1RMWV9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAorCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7CiAJCU5PU0FWRV9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaCBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKaW5kZXggYmIxM2IxZi4uODA2ZWY2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCkBAIC00OCw3ICs0OCwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19hY2NvdW50X2V4aXRfc3RhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0eXBlKQogewogCS8qIHR5cGUgaGFzIHRvIGJlIGtub3duIGF0IGJ1aWxkIHRpbWUgZm9yIG9wdGltaXphdGlvbiAqLworCisJLyogVGhlIEJVSUxEX0JVR19PTiBiZWxvdyBicmVha3MgaW4gZnVubnkgd2F5cywgY29tbWVudGVkIG91dAorCSAqIGZvciBub3cgLi4uIC1CZW5ICiAJQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHR5cGUpKTsKKwkqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRVhUX0lOVFJfRVhJVFM6CiAJCXZjcHUtPnN0YXQuZXh0X2ludHJfZXhpdHMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwppbmRleCA3NWYzMjY3Li5lNjhiZWFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCkBAIC0yNiwxMSArMjYsMTEgQEAKIAlzcmQJcjgscjUscjExCiAKIAltdGN0cglyOAotc2V0dXA6CisuTHNldHVwOgogCWRjYnQJcjkscjQKIAlkY2J6CXI5LHIzCiAJYWRkCXI5LHI5LHIxMgotCWJkbnoJc2V0dXAKKwliZG56CS5Mc2V0dXAKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NQX1VTRV9EQ0JUWikKIAlhZGRpCXIzLHIzLC04CiAJc3JkaSAgICByOCxyNSw3CQkvKiBwYWdlIGlzIGNvcGllZCBpbiAxMjggYnl0ZSBzdHJpZGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggYzJmOTNkYy4uYmU0ZjM0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtMjUsOCArMjUsOCBAQAogICogICAgIGFsc28gY2xlYXIgbW0tPmNwdV92bV9tYXNrIGJpdHMgd2hlbiBwcm9jZXNzZXMgYXJlIG1pZ3JhdGVkCiAgKi8KIAotI2RlZmluZSBERUJVR19NQVBfQ09OU0lTVEVOQ1kKLSNkZWZpbmUgREVCVUdfQ0xBTVBfTEFTVF9DT05URVhUICAgMzEKKy8vI2RlZmluZSBERUJVR19NQVBfQ09OU0lTVEVOQ1kKKy8vI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQogLy8jZGVmaW5lIERFQlVHX0hBUkRFUgogCiAvKiBXZSBkb24ndCB1c2UgREVCVUcgYmVjYXVzZSBpdCB0ZW5kcyB0byBiZSBjb21waWxlZCBpbiBhbHdheXMgbm93YWRheXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCmluZGV4IGJjNDRkYzQuLjk1Y2UzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwpAQCAtNzIsMTkgKzcyLDE3IEBACiAxOgogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCAqLwogCi0JLyogdm1hbGxvYy9pb3JlbWFwIG1hcHBpbmcgZW5jb2RpbmcgYml0cywgdGhlICJsaSIgaW5zdHJ1Y3Rpb25zIGJlbG93Ci0JICogd2lsbCBiZSBwYXRjaGVkIGJ5IHRoZSBrZXJuZWwgYXQgYm9vdAorCS8qIHZtYWxsb2MgbWFwcGluZyBnZXRzIHRoZSBlbmNvZGluZyBmcm9tIHRoZSBQQUNBIGFzIHRoZSBtYXBwaW5nCisJICogY2FuIGJlIGRlbW90ZWQgZnJvbSA2NEsgLT4gNEsgZHluYW1pY2FsbHkgb24gc29tZSBtYWNoaW5lcwogCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgaXMgaW4gdm1hbGxvYyBvciBpb3JlbWFwIHNwYWNlICovCiAJY2xybGRpCXIxMSxyMTAsNDgKIAljbXBsZGkJcjExLChWTUFMTE9DX1NJWkUgPj4gMjgpIC0gMQogCWJndAk1ZgogCWxoeglyMTEsUEFDQVZNQUxMT0NTTExQKHIxMykKIAliCTZmCiA1OgotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKLV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCisJLyogSU8gbWFwcGluZyAqLworCV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCiAJbGkJcjExLDAKIDY6CiBCRUdJTl9GVFJfU0VDVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBjMzFlNWI1Li5kNDViZTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwpAQCAtNTEsNiArNTEsOCBAQAogLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLwogc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKIAkiaW50ZXJjb250cm9sLGRpZ3N5LW10YyIsCisJIm1hbnJvbGFuZCxtdWNtYzUyIiwKKwkibWFucm9sYW5kLHVjMTAxIiwKIAkicGh5dGVjLHBjbTAzMCIsCiAJInBoeXRlYyxwY20wMzIiLAogCSJwcm9tZXNzLG1vdGlvbnBybyIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwppbmRleCA1MWZjYWU0Li5mOWFlZTE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKQEAgLTEzMiwxMiArMTMyLDI1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVzLT5pcnEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CiAKIAlidXMtPm5hbWUgPSAiZXA4MjQ4ZS1tZGlvLWJpdGJhbmciOwogCWJ1cy0+cGFyZW50ID0gJm9mZGV2LT5kZXY7CiAJc25wcmludGYoYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOwogCi0JcmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LT5ub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCXJldHVybiAwOworZXJyX2ZyZWVfaXJxOgorCWtmcmVlKGJ1cy0+aXJxKTsKK2Vycl9mcmVlX2J1czoKKwlmcmVlX21kaW9fYml0YmFuZyhidXMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYWNhNTc0MS4uYTg2YzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJheG9uX21zaTogY291bGRuJ3QgcGFyc2UgZGNyIHByb3BlcnRpZXMgb24gJXNcbiIsCiAJCQlkbi0+ZnVsbF9uYW1lKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfbXNpYzsKIAl9CiAKIAltc2ljLT5kY3JfaG9zdCA9IGRjcl9tYXAoZG4sIGRjcl9iYXNlLCBkY3JfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQppbmRleCBjYzcxNjFmLi5jZTAxNDkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCkBAIC0xLDE4ICsxLDkgQEAKIEVYVFJBX0NGTEFHUwkrPSAtbW5vLW1pbmltYWwtdG9jCiAKLWV4dHJhLXkgKz0gZHQubwotCiBvYmoteSArPSBleGNlcHRpb24ubwotb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0X21vZC5vIG1mLm8gbHBldmVudHMubyBcCitvYmoteSArPSBodmxvZy5vIGh2bHBjb25maWcubyBscGFyZGF0YS5vIHNldHVwLm8gZHQubyBtZi5vIGxwZXZlbnRzLm8gXAogCWh2Y2FsbC5vIHByb2MubyBodGFiLm8gaW9tbXUubyBtaXNjLm8gaXJxLm8KIG9iai0kKENPTkZJR19QQ0kpICs9IHBjaS5vCiBvYmotJChDT05GSUdfU01QKSArPSBzbXAubwogb2JqLSQoQ09ORklHX1ZJT1BBVEgpICs9IHZpb3BhdGgubyB2aW8ubwogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IGtzeW1zLm8KLQotcXVpZXRfY21kX2R0X3N0cmluZ3MgPSBEVF9TVFIgICRACi0gICAgICBjbWRfZHRfc3RyaW5ncyA9ICQoT0JKQ09QWSkgLS1yZW5hbWUtc2VjdGlvbiAucm9kYXRhLnN0cjEuOD0uZHRfc3RyaW5ncyBcCi0JCQkJJDwgJEAKLQotJChvYmopL2R0X21vZC5vOgkkKG9iaikvZHQubwotCSQoY2FsbCBpZl9jaGFuZ2VkLGR0X3N0cmluZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCmluZGV4IGM1YTg3YTcuLjdmNDVhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCkBAIC01MSwxMSArNTEsMTYgQEAKIAogLyoKICAqIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0IGF0IHRoZSBzdGFydCBhbmQgZW5kCi0gKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBmcm9tIHRoaXMgZmlsZS4KKyAqIG9mIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgYWxsIHRoZSBzdHJpbmdzIG1hcmtlZCB3aXRoIHRoZSBEUyBtYWNyby4KICAqLwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX3N0YXJ0W107CiBleHRlcm4gY2hhciBfX2R0X3N0cmluZ3NfZW5kW107CiAKKyNkZWZpbmUgRFMocykJKHsJXAorCXN0YXRpYyBjb25zdCBjaGFyIF9fc1tdIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kdF9zdHJpbmdzIikpKSA9IHM7IFwKKwlfX3M7CQlcCit9KQorCiBzdHJ1Y3QgaXNlcmllc19mbGF0X2R0IHsKIAlzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgaGVhZGVyOwogCXU2NCByZXNlcnZlX21hcFsyXTsKQEAgLTY0LDkgKzY5LDggQEAKIHN0YXRpYyB2b2lkICogX19pbml0ZGF0YSBkdF9kYXRhOwogCiAvKgotICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIHNlY3Rpb24KLSAqIHRoYXQgd2UgcmVuYW1lIHRvIC5kdF9zdHJpbmdzIHVzaW5nIG9iamNvcHkgYW5kIGNhcHR1cmUKLSAqIGZvciB0aGUgc3RyaW5ncyBibG9iIG9mIHRoZSBmbGF0dGVuZWQgZGV2aWNlIHRyZWUuCisgKiBQdXR0aW5nIHRoZXNlIHN0cmluZ3MgaGVyZSBrZWVwcyB0aGVtIG91dCBvZiB0aGUgLmR0X3N0cmluZ3Mgc2VjdGlvbgorICogdGhhdCB3ZSBjYXB0dXJlIGZvciB0aGUgc3RyaW5ncyBibG9iIG9mIHRoZSBmbGF0dGVuZWQgZGV2aWNlIHRyZWUuCiAgKi8KIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgZGV2aWNlX3R5cGVfY3B1W10gPSAiY3B1IjsKIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgZGV2aWNlX3R5cGVfbWVtb3J5W10gPSAibWVtb3J5IjsKQEAgLTE3Myw3ICsxNzcsNyBAQAogCiAjZGVmaW5lIGR0X2VuZF9ub2RlKGR0KSBkdF9wdXNoX3UzMihkdCwgT0ZfRFRfRU5EX05PREUpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHZvaWQgX19pbml0IF9fZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKQEAgLTE5MSw0NCArMTk1LDMyIEBACiAJLyogVGhlIGFjdHVhbCBkYXRhLiAqLwogCWR0X3B1c2hfYnl0ZXMoZHQsIGRhdGEsIGxlbik7CiB9CisjZGVmaW5lIGR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIGxlbikJX19kdF9wcm9wKChkdCksIERTKG5hbWUpLCAoZGF0YSksIChsZW4pKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF9zdHIoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IGNoYXIgKmRhdGEpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc3RybGVuKGRhdGEpICsgMSk7IC8qICsgMSBmb3IgTlVMTCAqLwotfQorI2RlZmluZSBkdF9wcm9wX3N0cihkdCwgbmFtZSwgZGF0YSkJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzdHJsZW4oKGRhdGEpKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHZvaWQgX19pbml0IF9fZHRfcHJvcF91MzIoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCXUzMiBkYXRhKQogewotCWR0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTMyKSk7CisJX19kdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOwogfQorI2RlZmluZSBkdF9wcm9wX3UzMihkdCwgbmFtZSwgZGF0YSkJX19kdF9wcm9wX3UzMigoZHQpLCBEUyhuYW1lKSwgKGRhdGEpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgZHRfcHJvcF91NjQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCXU2NCBkYXRhKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIF9fZHRfcHJvcF91NjQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCBkYXRhKQogewotCWR0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTY0KSk7CisJX19kdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOwogfQorI2RlZmluZSBkdF9wcm9wX3U2NChkdCwgbmFtZSwgZGF0YSkJX19kdF9wcm9wX3U2NCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF91NjRfbGlzdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKLQkJY29uc3QgY2hhciAqbmFtZSwgdTY0ICpkYXRhLCBpbnQgbikKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBzaXplb2YodTY0KSAqIG4pOwotfQorI2RlZmluZSBkdF9wcm9wX3U2NF9saXN0KGR0LCBuYW1lLCBkYXRhLCBuKQlcCisJZHRfcHJvcCgoZHQpLCBuYW1lLCAoZGF0YSksIHNpemVvZih1NjQpICogKG4pKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF91MzJfbGlzdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKLQkJY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhLCBpbnQgbikKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBzaXplb2YodTMyKSAqIG4pOwotfQorI2RlZmluZSBkdF9wcm9wX3UzMl9saXN0KGR0LCBuYW1lLCBkYXRhLCBuKQlcCisJZHRfcHJvcCgoZHQpLCBuYW1lLCAoZGF0YSksIHNpemVvZih1MzIpICogKG4pKQogCi0jaWZkZWYgbm90eWV0Ci1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF9lbXB0eShzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBOVUxMLCAwKTsKLX0KLSNlbmRpZgorI2RlZmluZSBkdF9wcm9wX2VtcHR5KGR0LCBuYW1lKQkJZHRfcHJvcCgoZHQpLCBuYW1lLCBOVUxMLCAwKQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZHRfY3B1cyhzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggMjEyMjZiNy4uNDE0Y2E5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTU0MCw4ICs1NDAsMTEgQEAKIAkvKiBNYWtlIHN1cmUgSVJRIGlzIGRpc2FibGVkICovCiAJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDApOwogCi0JLyogUmVxdWVzdCBjaGlwIGludGVycnVwdCAqLwotCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIDAsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQuIFdlIHNldCBJUlFGX1RJTUVSIGJlY2F1c2Ugd2UgZG9uJ3QKKwkgKiB3YW50IHRoYXQgaW50ZXJydXB0IGRpc2FibGVkIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlcgorCSAqIHN1c3BlbmQgb3Igd2UnbGwgaGF2ZSBpc3N1ZXMgcnVubmluZyB0aGUgcGZ1bmNzCisJICovCisJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgSVJRRl9USU1FUiwgImtleXdlc3QgaTJjIiwgaG9zdCkpCiAJCWhvc3QtPmlycSA9IE5PX0lSUTsKIAogCXByaW50ayhLRVJOX0lORk8gIktleVdlc3QgaTJjIEAweCUwOHggaXJxICVkICVzXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwppbmRleCA1YTcwN2RhLi4wYTE0ZDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwpAQCAtNTEsMTEgKzUxLDEwIEBACiAJe0ZXX0ZFQVRVUkVfVklPLAkJImhjYWxsLXZpbyJ9LAogCXtGV19GRUFUVVJFX1JETUEsCQkiaGNhbGwtcmRtYSJ9LAogCXtGV19GRUFUVVJFX0xMQU4sCQkiaGNhbGwtbExBTiJ9LAotCXtGV19GRUFUVVJFX0JVTEssCQkiaGNhbGwtYnVsayJ9LAorCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogCXtGV19GRUFUVVJFX1hEQUJSLAkJImhjYWxsLXhkYWJyIn0sCiAJe0ZXX0ZFQVRVUkVfTVVMVElUQ0UsCQkiaGNhbGwtbXVsdGktdGNlIn0sCiAJe0ZXX0ZFQVRVUkVfU1BMUEFSLAkJImhjYWxsLXNwbHBhciJ9LAotCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogfTsKIAogLyogQnVpbGQgdXAgdGhlIGZpcm13YXJlIGZlYXR1cmVzIGJpdG1hc2sgdXNpbmcgdGhlIGNvbnRlbnRzIG9mCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKaW5kZXggYzE0MjdiMy4uMzgzYTVkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwpAQCAtMTQsNjggKzE0LDk0IEBACiAJCiAjZGVmaW5lIFNUS19QQVJNKGkpICAgICAoNDggKyAoKGkpLTMpKjgpCiAKLSNpZmRlZiBDT05GSUdfSENBTExfU1RBVFMKKyNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKKworCS5zZWN0aW9uCSIudG9jIiwiYXciCisKKwkuZ2xvYmwgaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudAoraGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudDoKKwkubGxvbmcJMAorCisJLnNlY3Rpb24JIi50ZXh0IgorCiAvKgogICogcHJlY2FsbCBtdXN0IHByZXNlcnZlIGFsbCByZWdpc3RlcnMuICB1c2UgdW51c2VkIFNUS19QQVJNKCkKLSAqIGFyZWFzIHRvIHNhdmUgc25hcHNob3RzIGFuZCBvcGNvZGUuCisgKiBhcmVhcyB0byBzYXZlIHNuYXBzaG90cyBhbmQgb3Bjb2RlLiBXZSBicmFuY2ggYXJvdW5kIHRoaXMKKyAqIGluIGVhcmx5IGluaXQgKGVnIHdoZW4gcG9wdWxhdGluZyB0aGUgTU1VIGhhc2h0YWJsZSkgYnkgdXNpbmcgYW4KKyAqIHVuY29uZGl0aW9uYWwgY3B1IGZlYXR1cmUuCiAgKi8KLSNkZWZpbmUgSENBTExfSU5TVF9QUkVDQUxMCQkJCQlcCi0Jc3RkCXIzLFNUS19QQVJNKHIzKShyMSk7CS8qIHNhdmUgb3Bjb2RlICovCVwKLQltZnRiCXIwOwkJCS8qIGdldCB0aW1lYmFzZSBhbmQgKi8JXAotCXN0ZCAgICAgcjAsU1RLX1BBUk0ocjUpKHIxKTsJLyogc2F2ZSBmb3IgbGF0ZXIgKi8JXAorI2RlZmluZSBIQ0FMTF9JTlNUX1BSRUNBTEwoRklSU1RfUkVHKQkJCQlcCiBCRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCi0JbWZzcHIJcjAsU1BSTl9QVVJSOwkJLyogZ2V0IFBVUlIgYW5kICovCVwKLQlzdGQJcjAsU1RLX1BBUk0ocjYpKHIxKTsJLyogc2F2ZSBmb3IgbGF0ZXIgKi8JXAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7Ci0JCisJYgkxZjsJCQkJCQlcCitFTkRfRlRSX1NFQ1RJT04oMCwgMSk7CQkJCQkJXAorCWxkICAgICAgcjEyLGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnRAdG9jKHIyKTsJCVwKKwljbXBkaQlyMTIsMDsJCQkJCQlcCisJYmVxKwkxZjsJCQkJCQlcCisJbWZscglyMDsJCQkJCQlcCisJc3RkCXIzLFNUS19QQVJNKHIzKShyMSk7CQkJCVwKKwlzdGQJcjQsU1RLX1BBUk0ocjQpKHIxKTsJCQkJXAorCXN0ZAlyNSxTVEtfUEFSTShyNSkocjEpOwkJCQlcCisJc3RkCXI2LFNUS19QQVJNKHI2KShyMSk7CQkJCVwKKwlzdGQJcjcsU1RLX1BBUk0ocjcpKHIxKTsJCQkJXAorCXN0ZAlyOCxTVEtfUEFSTShyOCkocjEpOwkJCQlcCisJc3RkCXI5LFNUS19QQVJNKHI5KShyMSk7CQkJCVwKKwlzdGQJcjEwLFNUS19QQVJNKHIxMCkocjEpOwkJCQlcCisJc3RkCXIwLDE2KHIxKTsJCQkJCVwKKwlhZGRpCXI0LHIxLFNUS19QQVJNKEZJUlNUX1JFRyk7CQkJXAorCXN0ZHUJcjEsLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIxKTsJCQlcCisJYmwJLl9fdHJhY2VfaGNhbGxfZW50cnk7CQkJCVwKKwlhZGRpCXIxLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCVwKKwlsZAlyMCwxNihyMSk7CQkJCQlcCisJbGQJcjMsU1RLX1BBUk0ocjMpKHIxKTsJCQkJXAorCWxkCXI0LFNUS19QQVJNKHI0KShyMSk7CQkJCVwKKwlsZAlyNSxTVEtfUEFSTShyNSkocjEpOwkJCQlcCisJbGQJcjYsU1RLX1BBUk0ocjYpKHIxKTsJCQkJXAorCWxkCXI3LFNUS19QQVJNKHI3KShyMSk7CQkJCVwKKwlsZAlyOCxTVEtfUEFSTShyOCkocjEpOwkJCQlcCisJbGQJcjksU1RLX1BBUk0ocjkpKHIxKTsJCQkJXAorCWxkCXIxMCxTVEtfUEFSTShyMTApKHIxKTsJCQkJXAorCW10bHIJcjA7CQkJCQkJXAorMToKKwogLyoKICAqIHBvc3RjYWxsIGlzIHBlcmZvcm1lZCBpbW1lZGlhdGVseSBiZWZvcmUgZnVuY3Rpb24gcmV0dXJuIHdoaWNoCiAgKiBhbGxvd3MgbGliZXJhbCB1c2Ugb2Ygdm9sYXRpbGUgcmVnaXN0ZXJzLiAgV2UgYnJhbmNoIGFyb3VuZCB0aGlzCiAgKiBpbiBlYXJseSBpbml0IChlZyB3aGVuIHBvcHVsYXRpbmcgdGhlIE1NVSBoYXNodGFibGUpIGJ5IHVzaW5nIGFuCiAgKiB1bmNvbmRpdGlvbmFsIGNwdSBmZWF0dXJlLgogICovCi0jZGVmaW5lIEhDQUxMX0lOU1RfUE9TVENBTEwJCQkJCVwKKyNkZWZpbmUgX19IQ0FMTF9JTlNUX1BPU1RDQUxMCQkJCQlcCiBCRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCiAJYgkxZjsJCQkJCQlcCiBFTkRfRlRSX1NFQ1RJT04oMCwgMSk7CQkJCQkJXAotCWxkCXI0LFNUS19QQVJNKHIzKShyMSk7CS8qIHZhbGlkYXRlIG9wY29kZSAqLwlcCi0JY21wbGRpCWNyNyxyNCxNQVhfSENBTExfT1BDT0RFOwkJCVwKLQliZ3QtCWNyNywxZjsJCQkJCQlcCi0JCQkJCQkJCVwKLQkvKiBnZXQgdGltZSBhbmQgUFVSUiBzbmFwc2hvdHMgYWZ0ZXIgaGNhbGwgKi8JCVwKLQltZnRiCXI3OwkJCS8qIHRpbWViYXNlIGFmdGVyICovCVwKLUJFR0lOX0ZUUl9TRUNUSU9OOwkJCQkJCVwKLQltZnNwcglyOCxTUFJOX1BVUlI7CQkvKiBQVVJSIGFmdGVyICovCVwKLQlsZAlyNixTVEtfUEFSTShyNikocjEpOwkvKiBQVVJSIGJlZm9yZSAqLwlcCi0Jc3ViZglyNixyNixyODsJCS8qIGRlbHRhICovCQlcCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9QVVJSKTsJCQkJXAotCWxkCXI1LFNUS19QQVJNKHI1KShyMSk7CS8qIHRpbWViYXNlIGJlZm9yZSAqLwlcCi0Jc3ViZglyNSxyNSxyNzsJCS8qIHRpbWUgZGVsdGEgKi8JXAotCQkJCQkJCQlcCi0JLyogY2FsY3VsYXRlIGFkZHJlc3Mgb2Ygc3RhdCBzdHJ1Y3R1cmUgcjQgPSBvcGNvZGUgKi8JXAotCXNyZGkJcjQscjQsMjsJCS8qIGluZGV4IGludG8gYXJyYXkgKi8JXAotCW11bGxpCXI0LHI0LEhDQUxMX1NUQVRfU0laRTsJCQkJXAotCUxPQURfUkVHX0FERFIocjcsIHBlcl9jcHVfX2hjYWxsX3N0YXRzKTsJCVwKLQlhZGQJcjQscjQscjc7CQkJCQlcCi0JbGQJcjcsUEFDQV9EQVRBX09GRlNFVChyMTMpOyAvKiBwZXIgY3B1IG9mZnNldCAqLwlcCi0JYWRkCXI0LHI0LHI3OwkJCQkJXAotCQkJCQkJCQlcCi0JLyogdXBkYXRlIHN0YXRzCSovCQkJCQlcCi0JbGQJcjcsSENBTExfU1RBVF9DQUxMUyhyNCk7IC8qIGNvdW50ICovCQlcCi0JYWRkaQlyNyxyNywxOwkJCQkJXAotCXN0ZAlyNyxIQ0FMTF9TVEFUX0NBTExTKHI0KTsJCQlcCi0JbGQgICAgICByNyxIQ0FMTF9TVEFUX1RCKHI0KTsJLyogdGltZWJhc2UgKi8JCVwKLQlhZGQJcjcscjcscjU7CQkJCQlcCi0Jc3RkCXI3LEhDQUxMX1NUQVRfVEIocjQpOwkJCQlcCi1CRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCi0JbGQJcjcsSENBTExfU1RBVF9QVVJSKHI0KTsJLyogUFVSUiAqLwkJXAotCWFkZAlyNyxyNyxyNjsJCQkJCVwKLQlzdGQJcjcsSENBTExfU1RBVF9QVVJSKHI0KTsJCQkJXAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7CQkJCVwKKwlsZCAgICAgIHIxMixoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50QHRvYyhyMik7CQlcCisJY21wZGkJcjEyLDA7CQkJCQkJXAorCWJlcSsJMWY7CQkJCQkJXAorCW1mbHIJcjA7CQkJCQkJXAorCWxkCXI2LFNUS19QQVJNKHIzKShyMSk7CQkJCVwKKwlzdGQJcjMsU1RLX1BBUk0ocjMpKHIxKTsJCQkJXAorCW1yCXI0LHIzOwkJCQkJCVwKKwltcglyMyxyNjsJCQkJCQlcCisJc3RkCXIwLDE2KHIxKTsJCQkJCVwKKwlzdGR1CXIxLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSk7CQkJXAorCWJsCS5fX3RyYWNlX2hjYWxsX2V4aXQ7CQkJCVwKKwlhZGRpCXIxLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCVwKKwlsZAlyMCwxNihyMSk7CQkJCQlcCisJbGQJcjMsU1RLX1BBUk0ocjMpKHIxKTsJCQkJXAorCW10bHIJcjA7CQkJCQkJXAogMToKKworI2RlZmluZSBIQ0FMTF9JTlNUX1BPU1RDQUxMX05PUkVUUwkJCQlcCisJbGkJcjUsMDsJCQkJCQlcCisJX19IQ0FMTF9JTlNUX1BPU1RDQUxMCisKKyNkZWZpbmUgSENBTExfSU5TVF9QT1NUQ0FMTChCVUZSRUcpCQkJCVwKKwltcglyNSxCVUZSRUc7CQkJCQlcCisJX19IQ0FMTF9JTlNUX1BPU1RDQUxMCisKICNlbHNlCi0jZGVmaW5lIEhDQUxMX0lOU1RfUFJFQ0FMTAotI2RlZmluZSBIQ0FMTF9JTlNUX1BPU1RDQUxMCisjZGVmaW5lIEhDQUxMX0lOU1RfUFJFQ0FMTChGSVJTVF9BUkcpCisjZGVmaW5lIEhDQUxMX0lOU1RfUE9TVENBTExfTk9SRVRTCisjZGVmaW5lIEhDQUxMX0lOU1RfUE9TVENBTEwoQlVGUkVHKQogI2VuZGlmCiAKIAkudGV4dApAQCAtODYsMTEgKzExMiwxMSBAQAogCW1mY3IJcjAKIAlzdHcJcjAsOChyMSkKIAotCUhDQUxMX0lOU1RfUFJFQ0FMTAorCUhDQUxMX0lOU1RfUFJFQ0FMTChyNCkKIAogCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCiAKLQlIQ0FMTF9JTlNUX1BPU1RDQUxMCisJSENBTExfSU5TVF9QT1NUQ0FMTF9OT1JFVFMKIAogCWx3eglyMCw4KHIxKQogCW10Y3JmCTB4ZmYscjAKQEAgLTEwMiw3ICsxMjgsNyBAQAogCW1mY3IJcjAKIAlzdHcJcjAsOChyMSkKIAotCUhDQUxMX0lOU1RfUFJFQ0FMTAorCUhDQUxMX0lOU1RfUFJFQ0FMTChyNSkKIAogCXN0ZCAgICAgcjQsU1RLX1BBUk0ocjQpKHIxKSAgICAgLyogU2F2ZSByZXQgYnVmZmVyICovCiAKQEAgLTEyMSw3ICsxNDcsNyBAQAogCXN0ZAlyNiwgMTYocjEyKQogCXN0ZAlyNywgMjQocjEyKQogCi0JSENBTExfSU5TVF9QT1NUQ0FMTAorCUhDQUxMX0lOU1RfUE9TVENBTEwocjEyKQogCiAJbHd6CXIwLDgocjEpCiAJbXRjcmYJMHhmZixyMApAQCAtMTY4LDcgKzE5NCw3IEBACiAJbWZjcglyMAogCXN0dwlyMCw4KHIxKQogCi0JSENBTExfSU5TVF9QUkVDQUxMCisJSENBTExfSU5TVF9QUkVDQUxMKHI1KQogCiAJc3RkICAgICByNCxTVEtfUEFSTShyNCkocjEpICAgICAvKiBTYXZlIHJldCBidWZmZXIgKi8KIApAQCAtMTk2LDcgKzIyMiw3IEBACiAJc3RkCXIxMSw1NihyMTIpCiAJc3RkCXIwLCA2NChyMTIpCiAKLQlIQ0FMTF9JTlNUX1BPU1RDQUxMCisJSENBTExfSU5TVF9QT1NUQ0FMTChyMTIpCiAKIAlsd3oJcjAsOChyMSkKIAltdGNyZgkweGZmLHIwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCmluZGV4IDM2MzFhNGYuLjJmNThjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaGNhbGxfc3RhdHNbSENBTExfU1RBVF9BUlJBWV9TSVpFXSwgaGNhbGxfc3RhdHMpOwogCkBAIC0xMDAsNiArMTAxLDM1IEBACiAjZGVmaW5lCUhDQUxMX1JPT1RfRElSCQkiaGNhbGxfaW5zdCIKICNkZWZpbmUgQ1BVX05BTUVfQlVGX1NJWkUJMzIKIAorCitzdGF0aWMgdm9pZCBwcm9iZV9oY2FsbF9lbnRyeSh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlzdHJ1Y3QgaGNhbGxfc3RhdHMgKmg7CisKKwlpZiAob3Bjb2RlID4gTUFYX0hDQUxMX09QQ09ERSkKKwkJcmV0dXJuOworCisJaCA9ICZnZXRfY3B1X3ZhcihoY2FsbF9zdGF0cylbb3Bjb2RlIC8gNF07CisJaC0+dGJfc3RhcnQgPSBtZnRiKCk7CisJaC0+cHVycl9zdGFydCA9IG1mc3ByKFNQUk5fUFVSUik7Cit9CisKK3N0YXRpYyB2b2lkIHByb2JlX2hjYWxsX2V4aXQodW5zaWduZWQgbG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgcmV0dmFsLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpyZXRidWYpCit7CisJc3RydWN0IGhjYWxsX3N0YXRzICpoOworCisJaWYgKG9wY29kZSA+IE1BWF9IQ0FMTF9PUENPREUpCisJCXJldHVybjsKKworCWggPSAmX19nZXRfY3B1X3ZhcihoY2FsbF9zdGF0cylbb3Bjb2RlIC8gNF07CisJaC0+bnVtX2NhbGxzKys7CisJaC0+dGJfdG90YWwgPSBtZnRiKCkgLSBoLT50Yl9zdGFydDsKKwloLT5wdXJyX3RvdGFsID0gbWZzcHIoU1BSTl9QVVJSKSAtIGgtPnB1cnJfc3RhcnQ7CisKKwlwdXRfY3B1X3ZhcihoY2FsbF9zdGF0cyk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGhjYWxsX2luc3RfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmhjYWxsX3Jvb3Q7CkBAIC0xMTAsNiArMTQwLDE0IEBACiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlyZXR1cm4gMDsKIAorCWlmIChyZWdpc3Rlcl90cmFjZV9oY2FsbF9lbnRyeShwcm9iZV9oY2FsbF9lbnRyeSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlZ2lzdGVyX3RyYWNlX2hjYWxsX2V4aXQocHJvYmVfaGNhbGxfZXhpdCkpIHsKKwkJdW5yZWdpc3Rlcl90cmFjZV9oY2FsbF9lbnRyeShwcm9iZV9oY2FsbF9lbnRyeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWhjYWxsX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoSENBTExfUk9PVF9ESVIsIE5VTEwpOwogCWlmICghaGNhbGxfcm9vdCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwppbmRleCA5MDNlYjllLi4wNzA3NjUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vdHJhY2UuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAjaW5jbHVkZSAicHNlcmllcy5oIgpAQCAtNjYxLDMgKzY2MiwzNSBAQAogRVhQT1JUX1NZTUJPTChhcmNoX2ZyZWVfcGFnZSk7CiAKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCisvKgorICogV2Ugb3B0aW1pc2Ugb3VyIGhjYWxsIHBhdGggYnkgcGxhY2luZyBoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50CisgKiBkaXJlY3RseSBpbiB0aGUgVE9DIHNvIHdlIGNhbiBjaGVjayBpZiB0aGUgaGNhbGwgdHJhY2Vwb2ludHMgYXJlCisgKiBlbmFibGVkIHZpYSBhIHNpbmdsZSBsb2FkLgorICovCisKKy8qIE5COiByZWcvdW5yZWcgYXJlIGNhbGxlZCB3aGlsZSBndWFyZGVkIHdpdGggdGhlIHRyYWNlcG9pbnRzX211dGV4ICovCitleHRlcm4gbG9uZyBoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50OworCit2b2lkIGhjYWxsX3RyYWNlcG9pbnRfcmVnZnVuYyh2b2lkKQoreworCWhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQrKzsKK30KKwordm9pZCBoY2FsbF90cmFjZXBvaW50X3VucmVnZnVuYyh2b2lkKQoreworCWhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQtLTsKK30KKwordm9pZCBfX3RyYWNlX2hjYWxsX2VudHJ5KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCXRyYWNlX2hjYWxsX2VudHJ5KG9wY29kZSwgYXJncyk7Cit9CisKK3ZvaWQgX190cmFjZV9oY2FsbF9leGl0KGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJldHZhbCwKKwkJCXVuc2lnbmVkIGxvbmcgKnJldGJ1ZikKK3sKKwl0cmFjZV9oY2FsbF9leGl0KG9wY29kZSwgcmV0dmFsLCByZXRidWYpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKaW5kZXggYmYyZTFhYy4uMTE2NGMzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwpAQCAtNDMyLDggKzQzMiw2IEBACiAJCS8qIFJlYWQgY29uZmlnIHNwYWNlIGJhY2sgc28gd2UgY2FuIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KIAkJcmVhZF9tc2lfbXNnKHZpcnEsICZtc2cpOwogCQllbnRyeS0+bXNnID0gbXNnOwotCi0JCXVubWFza19tc2lfaXJxKHZpcnEpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNDE5ZjhhNi4uYjliZjBlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CkBAIC0yMTksNiArMjIwLDE0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQogeworCS8qCisJICogVGhlIGdlbmVyaWMgTVNJIGNvZGUgcmV0dXJucyB3aXRoIHRoZSBpbnRlcnJ1cHQgZGlzYWJsZWQgb24gdGhlCisJICogY2FyZCwgdXNpbmcgdGhlIE1TSSBtYXNrIGJpdHMuIEZpcm13YXJlIGRvZXNuJ3QgYXBwZWFyIHRvIHVubWFzaworCSAqIGF0IHRoYXQgbGV2ZWwsIHNvIHdlIGRvIGl0IGhlcmUgYnkgaGFuZC4KKwkgKi8KKwlpZiAoaXJxX3RvX2Rlc2ModmlycSktPm1zaV9kZXNjKQorCQl1bm1hc2tfbXNpX2lycSh2aXJxKTsKKwogCS8qIHVubWFzayBpdCAqLwogCXhpY3NfdW5tYXNrX2lycSh2aXJxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCBjNmYwYTcxYi4uYmRiZTk2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtNTE3LDYgKzUxNywxNSBAQAogCWluX3htb24gPSAwOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwlpZiAocmVncy0+bXNyICYgTVNSX0RFKSB7CisJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOworCQlpZiAoYnAgIT0gTlVMTCkgeworCQkJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpICZicC0+aW5zdHJbMF07CisJCQlhdG9taWNfaW5jKCZicC0+cmVmX2NvdW50KTsKKwkJfQorCX0KKyNlbHNlCiAJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpIHsKIAkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7CiAJCWlmIChicCAhPSBOVUxMKSB7CkBAIC01MzAsNyArNTM5LDcgQEAKIAkJCX0KIAkJfQogCX0KLQorI2VuZGlmCiAJaW5zZXJ0X2NwdV9icHRzKCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC04OTQsNiArOTAzLDE0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0JPT0tFCitzdGF0aWMgaW50IGRvX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+bXNyIHw9IE1TUl9ERTsKKwltdHNwcihTUFJOX0RCQ1IwLCBtZnNwcihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKKwlyZXR1cm4gMTsKK30KKyNlbHNlCiAvKgogICogU3RlcCBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KICAqIFNvbWUgaW5zdHJ1Y3Rpb25zIHdlIGVtdWxhdGUsIG90aGVycyB3ZSBleGVjdXRlIHdpdGggTVNSX1NFIHNldC4KQEAgLTkyNCw2ICs5NDEsNyBAQAogCXJlZ3MtPm1zciB8PSBNU1JfU0U7CiAJcmV0dXJuIDE7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgYm9vdGNtZHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCmluZGV4IDI0YjEyNDQuLmYyMzk2MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGNwdXRpbWVfdG9fbXNlY3MoY29uc3QgY3B1dGltZV90IGNwdXRpbWUpCiB7Ci0JcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDApOworCXJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwKTsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QKQEAgLTE2MCw3ICsxNjAsNyBAQAogc3RhdGljIGlubGluZSBjbG9ja190CiBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV90IGNwdXRpbWUpCiB7Ci0JcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKKwlyZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdApAQCAtMTc1LDcgKzE3NSw3IEBACiBzdGF0aWMgaW5saW5lIGNsb2NrX3QKIGNwdXRpbWU2NF90b19jbG9ja190KGNwdXRpbWU2NF90IGNwdXRpbWUpCiB7Ci0gICAgICAgcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKKyAgICAgICByZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOwogfQogCiBzdHJ1Y3QgczM5MF9pZGxlX2RhdGEgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggZWU1N2E0Mi4uNDg5MGFjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0xNTk1LDEwICsxNTk1LDkgQEAKIHsKIAlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKIAkJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQllbHNlIHsKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JCWZvciAoOzspOwotCX0KKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKKwlmb3IgKDs7KTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaHV0ZG93bl9hY3Rpb24gc3RvcF9hY3Rpb24gPSB7U0hVVERPV05fQUNUSU9OX1NUT1BfU1RSLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggYzkzMmNhYS4uOTNlNTIwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC03Niw3ICs3Niw2IEBACiAJX191MzIgc3RhdHVzOwogCiAJc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKLQljYXNlIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZDoKIAljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKIAkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KIAkJaWYgKHN0YXR1cyAmIDB4NTApCkBAIC02MzgsNiArNjM3LDggQEAKIAkvKiBXYWl0IHVudGlsIHRhcmdldCBjcHUgaXMgZG93biAqLwogCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKIAkJY3B1X3JlbGF4KCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCQl1ZGVsYXkoMTApOwogCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKIAlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RvcHBlZFxuIiwgY3B1KTsKIH0KQEAgLTY0NSw4ICs2NDYsOCBAQAogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWRsZV90YXNrX2V4aXQoKTsKLQlzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKTsKLQlCVUcoKTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKaW5kZXggN2M4NjUzZS4uMGMyNmNjMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCkBAIC0xOTksNiArMTk5LDcgQEAKIAlicmMJMiw0YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNToKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NUT1AJLyogc3RvcCByZXN1bWUgKGN1cnJlbnQpIENQVSAqLworCWJyYwkyLDViCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiA2OglqCTZiCiAKIHJlc3RhcnRfc3VzcGVuZDoKQEAgLTIwNiw2ICsyMDcsNyBAQAogCWxsZ2gJJXIyLDAoJXIxKQogNzoKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NFTlNFCS8qIFdhaXQgZm9yIHJlc3VtZSBDUFUgKi8KKwlicmMJOCw3YgkJCS8qIGFjY2VwdGVkLCBzdGF0dXMgMCwgc3RpbGwgcnVubmluZyAqLwogCWJyYwkyLDdiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiAJdG1sbAklcjksMHg0MAkJLyogVGVzdCBpZiByZXN1bWUgQ1BVIGlzIHN0b3BwZWQgKi8KIAlqegk3YgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGI5NDA0MjQuLjg4Y2RlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTM3LDcgKzM3LDYgQEAKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKLQlzZWxlY3QgSEFWRV9GVFJBQ0VfU1lTQ0FMTFMKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpZiBNTVUKQEAgLTEyMiw2ICsxMjEsOSBAQAogCWJvb2wKIAlzZWxlY3QgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTCisJYm9vbAorCiBjb25maWcgU1lTX1NVUFBPUlRTX1NNUAogCWJvb2wKIApAQCAtMTk2LDYgKzE5OCw3IEBACiAJc2VsZWN0IENQVV9IQVNfU1JfUkIKIAlzZWxlY3QgQ1BVX0hBU19GUFUgaWYgIUNQVV9TSDRBTF9EU1AKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1RNVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIE1NVQogCiBjb25maWcgQ1BVX1NINEEKIAlib29sCkBAIC0yMTAsNiArMjEzLDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV9IQVNfRlBVCiAJc2VsZWN0IFNZU19TVVBQT1JUU19UTVUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBNTVUKIAogY29uZmlnIENQVV9TSFgyCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggZmM1MWE5MS4uNjZlNDBhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC0xOTksNyArMTk5LDcgQEAKIGxpYnMtJChDT05GSUdfU1VQRVJIMzIpCQk6PSBhcmNoL3NoL2xpYi8JJChsaWJzLXkpCiBsaWJzLSQoQ09ORklHX1NVUEVSSDY0KQkJOj0gYXJjaC9zaC9saWI2NC8gJChsaWJzLXkpCiAKLUJPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2Uuc3JlYyBcCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgdUltYWdlLmJpbiBcCiAJICAgICAgIHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UKIFBIT05ZICs9IG1ha2V0b29scyAkKEJPT1RfVEFSR0VUUykgRk9SQ0UKIApAQCAtMjI1LDYgKzIyNSw3IEBACiAJQGVjaG8gJyAgdm1saW51eC5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gRUxGIFMtcmVjb3JkJwogCUBlY2hvICcqIHVJbWFnZSAgCSAgICAgICAgICAgLSBBbGlhcyB0byBib290YWJsZSBVLUJvb3QgaW1hZ2UnCiAJQGVjaG8gJyAgdUltYWdlLnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBTLXJlY29yZCBmb3IgVS1Cb290JworCUBlY2hvICcgIHVJbWFnZS5iaW4JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJpbiknCiAJQGVjaG8gJyogdUltYWdlLmd6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChnemlwKScKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCmluZGV4IDI1Y2RmNzM1Li41MjgwMTMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTM1LDcgKzM0LDcgQEAKIAlpbnQgbWlub3I7CiAJaW50IHJldCA9IC1FTk9FTlQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CiAJaWYgKG1pbm9yIDwgREVWQ09VTlQpIHsKIAkJaWYgKG9wZW5DbnQgPiAwKSB7CkBAIC00NSw3ICs0NCw3IEBACiAJCQlyZXQgPSAwOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYwLDggKzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgZ2lvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGFkZHIgPSAwOwpAQCAtMTI5LDcgKzEyNyw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBnaW9fb3BlbiwJLyogb3BlbiAqLwogCS5yZWxlYXNlID0gZ2lvX2Nsb3NlLAkvKiByZWxlYXNlICovCi0JLmlvY3RsID0gZ2lvX2lvY3RsLAkvKiBpb2N0bCAqLworCS51bmxvY2tlZF9pb2N0bCA9IGdpb19pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdpb19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCmluZGV4IDRhZjNhNzcuLmMzNzYxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCkBAIC0xMSwxMCArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKaW5kZXggYWY2NGQwMy4uYTVjMGRmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCkBAIC0xNSwxNCArMTUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2lmZGVmIENPTkZJR19NVEQKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJza19wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCkBAIC00MSw2ICszOSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhID0geworCS5wYXJ0cwkJPSByc2tfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKSwKIAkud2lkdGgJCT0gMiwKIH07CiAKQEAgLTYwLDcgKzYwLDggQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOworI2lmZGVmIENPTkZJR19NVEQKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9pbmZvIHJza19mbGFzaF9tYXAgPSB7CiAJLm5hbWUJCT0gIlJTSysgRmxhc2giLApAQCAtNjgsNiArNjksMTAgQEAKIAkuYmFua3dpZHRoCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKKwogc3RhdGljIHZvaWQgX19pbml0IHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKQogewogCWludCBucl9wYXJ0cyA9IDA7CkBAIC03NywxNCArODIsMTQgQEAKIAlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCwgcHJvYmVzLAogCQkJCQkmcGFyc2VkX3BhcnRpdGlvbnMsIDApOwogCS8qIElmIHRoZXJlIGlzIG5vIHBhcnRpdGlvbiB0YWJsZSwgdXNlZCB0aGUgaGFyZCBjb2RlZCB0YWJsZSAqLwotCWlmIChucl9wYXJ0cyA8PSAwKSB7Ci0JCWZsYXNoX2RhdGEucGFydHMgPSByc2tfcGFydGl0aW9uczsKLQkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUocnNrX3BhcnRpdGlvbnMpOwotCX0gZWxzZSB7CisJaWYgKG5yX3BhcnRzID4gMCkgewogCQlmbGFzaF9kYXRhLm5yX3BhcnRzID0gbnJfcGFydHM7CiAJCWZsYXNoX2RhdGEucGFydHMgPSBwYXJzZWRfcGFydGl0aW9uczsKIAl9CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKSB7fQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyc2tfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmZsYXNoX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBhMTMxNjg3Li5jYjhjZjU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0yMCwxMSArMjAsMTIgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogCitzdWZmaXgteSA6PSBiaW4KIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYQordGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIApAQCAtODgsNiArODksOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmJpbjogJChvYmopL3ZtbGludXguYmluCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLG5vbmUpCisKIE9CSkNPUFlGTEFHU192bWxpbnV4LnNyZWMgOj0gLUkgYmluYXJ5IC1PIHNyZWMKICQob2JqKS92bWxpbnV4LnNyZWM6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXgKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IDE5ODdmM2UuLjA2ZTIyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAotCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIF9fU1BJTl9MT0NLX1VOTE9DS0VEKChuYW1lKS53YWl0X2xvY2spLCBcCiAJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCiAJICBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IDAzYjM2MTYuLmQ3NmEyMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kZXIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTU1NCw5ICs1NTUsMzAgQEAKIAkgKiBOT1RFOiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXR1cCBieSB0aGUKIAkgKiB0aW1lIHRoaXMgZnVuY3Rpb24gbWFrZXMgaXRzIGZpcnN0IGZ1bmN0aW9uIGNhbGwuCiAJICovCi0JaWYgKCFwYyAmJiAhcHJldikKKwlpZiAoIXBjIHx8ICFwcmV2KQogCQlwYyA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGV4dF9hZGRyKCk7CiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJLyoKKwkgKiBJZiBvdXIgc3RhY2sgaGFzIGJlZW4gcGF0Y2hlZCBieSB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCisJICogdGhlbiB3ZSBtaWdodCBzZWUgdGhlIGFkZHJlc3Mgb2YgcmV0dXJuX3RvX2hhbmRsZXIoKSB3aGVyZSB3ZQorCSAqIGV4cGVjdGVkIHRvIGZpbmQgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuCisJICovCisJaWYgKHBjID09ICh1bnNpZ25lZCBsb25nKSZyZXR1cm5fdG9faGFuZGxlcikgeworCQlpbnQgaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaGF2ZSBubyB3YXkgb2YgdHJhY2tpbmcgaG93IG1hbnkKKwkJICogcmV0dXJuX3RvX2hhbmRsZXIoKSdzIHdlJ3ZlIHNlZW4uIElmIHRoZXJlIGlzIG1vcmUKKwkJICogdGhhbiBvbmUgcGF0Y2hlZCByZXR1cm4gYWRkcmVzcyBvbiBvdXIgc3RhY2ssCisJCSAqIGNvbXBsYWluIGxvdWRseS4KKwkJICovCisJCVdBUk5fT04oaW5kZXggPiAwKTsKKworCQlwYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCX0KKyNlbmRpZgorCiAJZnJhbWUgPSBtZW1wb29sX2FsbG9jKGR3YXJmX2ZyYW1lX3Bvb2wsIEdGUF9BVE9NSUMpOwogCWlmICghZnJhbWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkd2FyZiBmcmFtZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDdjYjkzM2IuLmVhYzdkYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMDYsNyArMTA3LDcgQEAKIHN0YXRpYyB1bmlvbiBpcnFfY3R4ICpzb2Z0aXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKLWFzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2UgX19pcnFfZW50cnkgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKaW5kZXggODZjMjcwNC4uNDQ0Y2NlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCkBAIC04NSw2ICs4NSwyMCBAQAogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyU0kxMl9pNCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbSk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJOCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTE2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyMCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTI4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMzYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0NCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTUyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k1Nik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNjApOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyX2k0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA2NGRjMWFkLi43ZjdiNTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJIdWdlVExCIHBhZ2Ugc2l6ZSIKLQlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRSAmJiAoQ1BVX1NINCB8fCBDUFVfU0g1KSAmJiBNTVUKKwlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV82NEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggYTk4YzdkOC4uYjdmMjM1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIE1BWF9EQ0FDSEVfUEFHRVMJNjQJLyogWFhYOiBUdW5lIGZvciB3YXlzICovCiAjZGVmaW5lIE1BWF9JQ0FDSEVfUEFHRVMJMzIKIAotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCk7CiAKIC8qCkBAIC03Miw2ICs3Miw3IEBACiAKIAlmb3IgKHYgPSBzdGFydDsgdiA8IGVuZDsgdiArPSBMMV9DQUNIRV9CWVRFUykgewogCQl1bnNpZ25lZCBsb25nIGljYWNoZWFkZHI7CisJCWludCBqLCBuOwogCiAJCV9fb2Nid2Iodik7CiAKQEAgLTc5LDggKzgwLDEwIEBACiAJCQkJY3B1X2RhdGEtPmljYWNoZS5lbnRyeV9tYXNrKTsKIAogCQkvKiBDbGVhciBpLWNhY2hlIGxpbmUgdmFsaWQtYml0ICovCisJCW4gPSBib290X2NwdV9kYXRhLmljYWNoZS5uX2FsaWFzZXM7CiAJCWZvciAoaSA9IDA7IGkgPCBjcHVfZGF0YS0+aWNhY2hlLndheXM7IGkrKykgewotCQkJX19yYXdfd3JpdGVsKDAsIGljYWNoZWFkZHIpOworCQkJZm9yIChqID0gMDsgaiA8IG47IGorKykKKwkJCQlfX3Jhd193cml0ZWwoMCwgaWNhY2hlYWRkciArIChqICogUEFHRV9TSVpFKSk7CiAJCQlpY2FjaGVhZGRyICs9IGNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3I7CiAJCX0KIAl9CkBAIC04OSw4ICs5Miw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBleGVjX29mZnNldCA9IDA7CiAKQEAgLTEwMyw4ICsxMDUsNyBAQAogCQlleGVjX29mZnNldCA9IDB4MjAwMDAwMDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19mbHVzaF9jYWNoZV80MDk2KHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsCi0JCQkgICBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKKwlfX2ZsdXNoX2NhY2hlX29uZShzdGFydCB8IFNIX0NBQ0hFX0FTU09DLCBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEyOSw4ICsxMzAsOCBAQAogCiAJCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCiAJCW4gPSBib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gNDA5NikKLQkJCWZsdXNoX2NhY2hlXzQwOTYoYWRkciwgcGh5cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKQorCQkJZmx1c2hfY2FjaGVfb25lKGFkZHIsIHBoeXMpOwogCX0KIAogCXdtYigpOwpAQCAtMzE4LDExICszMTksMTEgQEAKIAkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggRC1jYWNoZSB3aGVuIHdlIGhhdmUgYWxpYXMgKi8KIAlpZiAoKGFkZHJlc3NecGh5cykgJiBhbGlhc19tYXNrKSB7CiAJCS8qIExvb3AgNEsgb2YgdGhlIEQtY2FjaGUgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAkJLyogTG9vcCBhbm90aGVyIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAocGh5cyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJfQpAQCAtMzM3LDcgKzMzOCw3IEBACiAJCSAqIGtlcm5lbCBoYXMgbmV2ZXIgZXhlY3V0ZWQgdGhlIGNvZGUgdGhyb3VnaCBpdHMgaWRlbnRpdHkKIAkJICogdHJhbnNsYXRpb24uCiAJCSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTM5Myw3ICszOTQsNyBAQAogfQogCiAvKioKLSAqIF9fZmx1c2hfY2FjaGVfNDA5NgorICogX19mbHVzaF9jYWNoZV9vbmUKICAqCiAgKiBAYWRkcjogIGFkZHJlc3MgaW4gbWVtb3J5IG1hcHBlZCBjYWNoZSBhcnJheQogICogQHBoeXM6ICBQMSBhZGRyZXNzIHRvIGZsdXNoIChoYXMgdG8gbWF0Y2ggdGFncyBpZiBhZGRyIGhhcyAnQScgYml0CkBAIC00MDYsNyArNDA3LDcgQEAKICAqIG9wZXJhdGlvbiAocHVyZ2Uvd3JpdGUtYmFjaykgaXMgc2VsZWN0ZWQgYnkgdGhlIGxvd2VyIDIgYml0cyBvZgogICogJ3BoeXMnLgogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4ZWNfb2Zmc2V0KQogewogCWludCB3YXlfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggNWUxMDkxYi4uYTJkYzdmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMjY1LDYgKzI2NSw4IEBACiAKIHZvaWQgX19pbml0IGNwdV9jYWNoZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNhY2hlX2Rpc2FibGVkID0gIShfX3Jhd19yZWFkbChDQ1IpICYgQ0NSX0NBQ0hFX0VOQUJMRSk7CisKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmljYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5kY2FjaGUpOwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuc2NhY2hlKTsKQEAgLTI3Myw2ICsyNzUsMTMgQEAKIAlfX2ZsdXNoX3B1cmdlX3JlZ2lvbgkJPSBub29wX19mbHVzaF9yZWdpb247CiAJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbgk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAorCS8qCisJICogTm8gZmx1c2hpbmcgaXMgbmVjZXNzYXJ5IGluIHRoZSBkaXNhYmxlZCBjYWNoZSBjYXNlIHNvIHdlIGNhbgorCSAqIGp1c3Qga2VlcCB0aGUgbm9vcCBmdW5jdGlvbnMgaW4gbG9jYWxfZmx1c2hfLi4oKSBhbmQgX19mbHVzaF8uLigpCisJICovCisJaWYgKHVubGlrZWx5KGNhY2hlX2Rpc2FibGVkKSkKKwkJZ290byBza2lwOworCiAJaWYgKGJvb3RfY3B1X2RhdGEuZmFtaWx5ID09IENQVV9GQU1JTFlfU0gyKSB7CiAJCWV4dGVybiB2b2lkIF9fd2VhayBzaDJfY2FjaGVfaW5pdCh2b2lkKTsKIApAQCAtMzEyLDUgKzMyMSw2IEBACiAJCXNoNV9jYWNoZV9pbml0KCk7CiAJfQogCitza2lwOgogCWVtaXRfY2FjaGVfcGFyYW1zKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCAyNWU4NDhmLi5kNDdhOThlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTYzLDYgKzYzLDEwIEBACiAJCQkgICAgIDogOiA6ICJtZW1vcnkiKTsgXAogfSB3aGlsZSAoMCkKIAorLyogVGhlIGtlcm5lbCBhbHdheXMgZXhlY3V0ZXMgaW4gVFNPIG1lbW9yeSBtb2RlbCB0aGVzZSBkYXlzLAorICogYW5kIGZ1cnRoZXJtb3JlIG1vc3Qgc3BhcmM2NCBjaGlwcyBpbXBsZW1lbnQgbW9yZSBzdHJpbmdlbnQKKyAqIG1lbW9yeSBvcmRlcmluZyB0aGFuIHJlcXVpcmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9ucy4KKyAqLwogI2RlZmluZSBtYigpCW1lbWJhcl9zYWZlKCIjU3RvcmVMb2FkIikKICNkZWZpbmUgcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKICNkZWZpbmUgd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCmluZGV4IDEzODkxMGMuLmQ4MGE2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwpAQCAtNzksNiArNzksNyBAQAogCiAJZXJyID0gLUVOT0RFVjsKIAorCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAJd3JpdGVfbG9jaygmZGV2dHJlZV9sb2NrKTsKIAlwcmV2cCA9ICZkcC0+cHJvcGVydGllczsKIAl3aGlsZSAoKnByZXZwKSB7CkBAIC04OCw5ICs4OSw3IEBACiAJCQl2b2lkICpvbGRfdmFsID0gcHJvcC0+dmFsdWU7CiAJCQlpbnQgcmV0OwogCi0JCQltdXRleF9sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCBuYW1lLCB2YWwsIGxlbik7Ci0JCQltdXRleF91bmxvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlpZiAocmV0ID49IDApIHsKQEAgLTEwOSw2ICsxMDgsNyBAQAogCQlwcmV2cCA9ICYoKnByZXZwKS0+bmV4dDsKIAl9CiAJd3JpdGVfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAogCS8qIFhYWCBVcGF0ZSBwcm9jZnMgaWYgbmVjZXNzYXJ5Li4uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwppbmRleCBiOTU2ZmQ3Li5kMjMxY2JkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAkJcnMyID0gZnBzX3JlZ3ZhbChmLCBSUzIoaW5zbikpOwogCiAJCXJkX3ZhbCA9IDA7Ci0JCXNyYzIgPSAocnMyID4+IChvcGYgPT0gRk1VTDh4MTZBVV9PUEYpID8gMTYgOiAwKTsKKwkJc3JjMiA9IHJzMiA+PiAob3BmID09IEZNVUw4eDE2QVVfT1BGID8gMTYgOiAwKTsKIAkJZm9yIChieXRlID0gMDsgYnl0ZSA8IDQ7IGJ5dGUrKykgewogCQkJdTE2IHNyYzEgPSAocnMxID4+IChieXRlICogOCkpICYgMHgwMGZmOwogCQkJdTMyIHByb2QgPSBzcmMxICogc3JjMjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDFiN2M3NDMuLjE3ODA4NGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMTQ0NCwxMiArMTQ0NCw4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuIE9ubHkgZW1iZWRkZWQgc2hvdWxkIHNheSBOIGhlcmUuCiAKLWNvbmZpZyBDQ19TVEFDS1BST1RFQ1RPUl9BTEwKLQlib29sCi0KIGNvbmZpZyBDQ19TVEFDS1BST1RFQ1RPUgogCWJvb2wgIkVuYWJsZSAtZnN0YWNrLXByb3RlY3RvciBidWZmZXIgb3ZlcmZsb3cgZGV0ZWN0aW9uIChFWFBFUklNRU5UQUwpIgotCXNlbGVjdCBDQ19TVEFDS1BST1RFQ1RPUl9BTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgLWZzdGFjay1wcm90ZWN0b3IgR0NDIGZlYXR1cmUuIFRoaXMKIAkgIGZlYXR1cmUgcHV0cywgYXQgdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMsIGEgY2FuYXJ5IHZhbHVlIG9uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGYyODI0ZmIuLjI2NDk4NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC00MDAsNyArNDAwLDcgQEAKIAogY29uZmlnIFg4Nl9DTVBYQ0hHNjQKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfUEFFIHx8IFg4Nl82NCB8fCBNQ09SRTIgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTUFUT00KKwlkZXBlbmRzIG9uICFNMzg2ICYmICFNNDg2CiAKICMgdGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgLW1hcmNoPS4uIG9wdGlvbnMgd2hlcmUgdGhlIGNvbXBpbGVyCiAjIGdlbmVyYXRlcyBjbW92LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gveDg2L0tjb25maWcuZGVidWcKaW5kZXggZDEwNWYyOS4uN2QwYjY4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCkBAIC0xODYsNiArMTg2LDE1IEBACiBjb25maWcgSEFWRV9NTUlPVFJBQ0VfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIFg4Nl9ERUNPREVSX1NFTEZURVNUCisgICAgIGJvb2wgIng4NiBpbnN0cnVjdGlvbiBkZWNvZGVyIHNlbGZ0ZXN0IgorICAgICBkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCS0tLWhlbHAtLS0KKwkgUGVyZm9ybSB4ODYgaW5zdHJ1Y3Rpb24gZGVjb2RlciBzZWxmdGVzdHMgYXQgYnVpbGQgdGltZS4KKwkgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBjaGVja2luZyB0aGUgc2FuaXR5IG9mIHg4NiBpbnN0cnVjdGlvbgorCSBkZWNvZGVyIGNvZGUuCisJIElmIHVuc3VyZSwgc2F5ICJOIi4KKwogIwogIyBJTyBkZWxheSB0eXBlczoKICMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggYTAxMmVlOC4uNzhiMzJiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGUKQEAgLTc2LDcgKzc2LDYgQEAKIAljY19oYXNfc3AgOj0gJChzcmN0cmVlKS9zY3JpcHRzL2djYy14ODZfJChCSVRTKS1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCiAgICAgICAgIGlmZXEgKCQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2NfaGFzX3NwKSAkKENDKSAkKGJpYXJjaCkpLHkpCiAgICAgICAgICAgICAgICAgc3RhY2twLXkgOj0gLWZzdGFjay1wcm90ZWN0b3IKLSAgICAgICAgICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKICAgICAgICAgICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoc3RhY2twLXkpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAkKHdhcm5pbmcgc3RhY2sgcHJvdGVjdG9yIGVuYWJsZWQgYnV0IG5vIGNvbXBpbGVyIHN1cHBvcnQpCkBAIC0xNTYsNiArMTU1LDkgQEAKIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL2J6SW1hZ2UKIAogYnpJbWFnZTogdm1saW51eAoraWZlcSAoJChDT05GSUdfWDg2X0RFQ09ERVJfU0VMRlRFU1QpLHkpCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC94ODYvdG9vbHMgcG9zdHRlc3QKK2VuZGlmCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKEtCVUlMRF9JTUFHRSkKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9hcmNoLyQoVVRTX01BQ0hJTkUpL2Jvb3QKIAkkKFEpbG4gLWZzbiAuLi8uLi94ODYvYm9vdC9iekltYWdlICQob2JqdHJlZSkvYXJjaC8kKFVUU19NQUNISU5FKS9ib290LyRACmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAppbmRleCAwZjZlYzQ1NS4uMDNjMDY4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAorKysgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCkBAIC01Myw2ICs1Myw5IEBACiAKIAkvRElTQ0FSRC8gOiB7ICooLm5vdGUqKSB9CiAKKwkvKgorCSAqIFRoZSBBU1NFUlQoKSBzaW5rIHRvIC4gaXMgaW50ZW50aW9uYWwsIGZvciBiaW51dGlscyAyLjE0IGNvbXBhdGliaWxpdHk6CisJICovCiAJLiA9IEFTU0VSVChfZW5kIDw9IDB4ODAwMCwgIlNldHVwIHRvbyBiaWchIik7CiAJLiA9IEFTU0VSVChoZHIgPT0gMHgxZjEsICJUaGUgc2V0dXAgaGVhZGVyIGhhcyB0aGUgd3Jvbmcgb2Zmc2V0ISIpOwogCS8qIE5lY2Vzc2FyeSBmb3IgdGhlIHZlcnktb2xkLWxvYWRlciBjaGVjayB0byB3b3JrLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwppbmRleCA1ODVlZGViLi40OWM1NTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQllcnIgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZW5jcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTExNiw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19kZWNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkgeworCWlmICghaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKQEAgLTM2Myw3ICszNjMsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCAxNzMzZjlmLi41ODFiMDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCW1vdmwgUkRJLUFSR09GRlNFVCglcnNwKSwlcjhkCS8qIHJlbG9hZCA1dGggc3lzY2FsbCBhcmcgKi8KIAkuZW5kbQogCi0JLm1hY3JvIGF1ZGl0c3lzX2V4aXQgZXhpdCxlYnBzYXZlPVJCUAorCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQKIAl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJXIxMCkKIAlqbnogaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAogCVRSQUNFX0lSUVNfT04KQEAgLTIxNyw3ICsyMTcsNiBAQAogCWNhbGwgYXVkaXRfc3lzY2FsbF9leGl0CiAJR0VUX1RIUkVBRF9JTkZPKCVyMTApCiAJbW92bCBSQVgtQVJHT0ZGU0VUKCVyc3ApLCVlYXgJLyogcmVsb2FkIHN5c2NhbGwgcmV0dXJuIHZhbHVlICovCi0JbW92bCBcZWJwc2F2ZS1BUkdPRkZTRVQoJXJzcCksJWVicCAvKiByZWxvYWQgdXNlciByZWdpc3RlciB2YWx1ZSAqLwogCW1vdmwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCVlZGkKIAljbGkKIAlUUkFDRV9JUlFTX09GRgpAQCAtMzUxLDcgKzM1MCw3IEBACiAJam1wIGNzdGFyX2Rpc3BhdGNoCiAKIHN5c3JldGxfYXVkaXQ6Ci0JYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwsIFJDWCAvKiB1c2VyICVlYnAgaW4gUkNYIHNsb3QgKi8KKwlhdWRpdHN5c19leGl0IHN5c3JldGxfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKIGNzdGFyX3RyYWNlc3lzOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaAppbmRleCBhYzk1OTk1Li40YjE4MDg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaApAQCAtMzEsNiArMzEsNyBAQAogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKHZvaWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3NodXRkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjModTE2IGRldmlkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBlOGRlMmY2Li42MTdiZDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZXNjX2Jhc2UoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQogewotCXJldHVybiBkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KTsKKwlyZXR1cm4gKHVuc2lnbmVkKShkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19iYXNlKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBiYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMGVlNzcwZC4uNmEyNWQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xNCw2ICsxNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50Lmg+CiAKKyNpZmRlZiBDT05GSUdfSVNBCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygyNCkKKyNlbHNlCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygzMikKKyNlbmRpZgorCiBleHRlcm4gZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3M7CiBleHRlcm4gaW50IGlvbW11X21lcmdlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXY7CkBAIC0xMjQsMTAgKzEzMCw4IEBACiAJaWYgKGRtYV9hbGxvY19mcm9tX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJm1lbW9yeSkpCiAJCXJldHVybiBtZW1vcnk7CiAKLQlpZiAoIWRldikgeworCWlmICghZGV2KQogCQlkZXYgPSAmeDg2X2RtYV9mYWxsYmFja19kZXY7Ci0JCWdmcCB8PSBHRlBfRE1BOwotCX0KIAogCWlmICghaXNfZGV2aWNlX2RtYV9jYXBhYmxlKGRldikpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5hdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNWIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0LmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5BVF9ICisjZGVmaW5lIF9BU01fWDg2X0lOQVRfSAorLyoKKyAqIHg4NiBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzCisgKgorICogV3JpdHRlbiBieSBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjaW5jbHVkZSA8YXNtL2luYXRfdHlwZXMuaD4KKworLyoKKyAqIEludGVybmFsIGJpdHMuIERvbid0IHVzZSBiaXRtYXNrcyBkaXJlY3RseSwgYmVjYXVzZSB0aGVzZSBiaXRzIGFyZQorICogdW5zdGFibGUuIFlvdSBzaG91bGQgdXNlIGNoZWNraW5nIGZ1bmN0aW9ucy4KKyAqLworCisjZGVmaW5lIElOQVRfT1BDT0RFX1RBQkxFX1NJWkUgMjU2CisjZGVmaW5lIElOQVRfR1JPVVBfVEFCTEVfU0laRSA4CisKKy8qIExlZ2FjeSBsYXN0IHByZWZpeGVzICovCisjZGVmaW5lIElOQVRfUEZYX09QTkRTWgkxCS8qIDB4NjYgKi8gLyogTFBGWDEgKi8KKyNkZWZpbmUgSU5BVF9QRlhfUkVQRQkyCS8qIDB4RjMgKi8gLyogTFBGWDIgKi8KKyNkZWZpbmUgSU5BVF9QRlhfUkVQTkUJMwkvKiAweEYyICovIC8qIExQRlgzICovCisvKiBPdGhlciBMZWdhY3kgcHJlZml4ZXMgKi8KKyNkZWZpbmUgSU5BVF9QRlhfTE9DSwk0CS8qIDB4RjAgKi8KKyNkZWZpbmUgSU5BVF9QRlhfQ1MJNQkvKiAweDJFICovCisjZGVmaW5lIElOQVRfUEZYX0RTCTYJLyogMHgzRSAqLworI2RlZmluZSBJTkFUX1BGWF9FUwk3CS8qIDB4MjYgKi8KKyNkZWZpbmUgSU5BVF9QRlhfRlMJOAkvKiAweDY0ICovCisjZGVmaW5lIElOQVRfUEZYX0dTCTkJLyogMHg2NSAqLworI2RlZmluZSBJTkFUX1BGWF9TUwkxMAkvKiAweDM2ICovCisjZGVmaW5lIElOQVRfUEZYX0FERFJTWgkxMQkvKiAweDY3ICovCisvKiB4ODYtNjQgUkVYIHByZWZpeCAqLworI2RlZmluZSBJTkFUX1BGWF9SRVgJMTIJLyogMHg0WCAqLworLyogQVZYIFZFWCBwcmVmaXhlcyAqLworI2RlZmluZSBJTkFUX1BGWF9WRVgyCTEzCS8qIDItYnl0ZXMgVkVYIHByZWZpeCAqLworI2RlZmluZSBJTkFUX1BGWF9WRVgzCTE0CS8qIDMtYnl0ZXMgVkVYIHByZWZpeCAqLworCisjZGVmaW5lIElOQVRfTFNUUEZYX01BWAkzCisjZGVmaW5lIElOQVRfTEdDUEZYX01BWAkxMQorCisvKiBJbW1lZGlhdGUgc2l6ZSAqLworI2RlZmluZSBJTkFUX0lNTV9CWVRFCQkxCisjZGVmaW5lIElOQVRfSU1NX1dPUkQJCTIKKyNkZWZpbmUgSU5BVF9JTU1fRFdPUkQJCTMKKyNkZWZpbmUgSU5BVF9JTU1fUVdPUkQJCTQKKyNkZWZpbmUgSU5BVF9JTU1fUFRSCQk1CisjZGVmaW5lIElOQVRfSU1NX1ZXT1JEMzIJNgorI2RlZmluZSBJTkFUX0lNTV9WV09SRAkJNworCisvKiBMZWdhY3kgcHJlZml4ICovCisjZGVmaW5lIElOQVRfUEZYX09GRlMJMAorI2RlZmluZSBJTkFUX1BGWF9CSVRTCTQKKyNkZWZpbmUgSU5BVF9QRlhfTUFYICAgICgoMSA8PCBJTkFUX1BGWF9CSVRTKSAtIDEpCisjZGVmaW5lIElOQVRfUEZYX01BU0sJKElOQVRfUEZYX01BWCA8PCBJTkFUX1BGWF9PRkZTKQorLyogRXNjYXBlIG9wY29kZXMgKi8KKyNkZWZpbmUgSU5BVF9FU0NfT0ZGUwkoSU5BVF9QRlhfT0ZGUyArIElOQVRfUEZYX0JJVFMpCisjZGVmaW5lIElOQVRfRVNDX0JJVFMJMgorI2RlZmluZSBJTkFUX0VTQ19NQVgJKCgxIDw8IElOQVRfRVNDX0JJVFMpIC0gMSkKKyNkZWZpbmUgSU5BVF9FU0NfTUFTSwkoSU5BVF9FU0NfTUFYIDw8IElOQVRfRVNDX09GRlMpCisvKiBHcm91cCBvcGNvZGVzICgxLTE2KSAqLworI2RlZmluZSBJTkFUX0dSUF9PRkZTCShJTkFUX0VTQ19PRkZTICsgSU5BVF9FU0NfQklUUykKKyNkZWZpbmUgSU5BVF9HUlBfQklUUwk1CisjZGVmaW5lIElOQVRfR1JQX01BWAkoKDEgPDwgSU5BVF9HUlBfQklUUykgLSAxKQorI2RlZmluZSBJTkFUX0dSUF9NQVNLCShJTkFUX0dSUF9NQVggPDwgSU5BVF9HUlBfT0ZGUykKKy8qIEltbWVkaWF0ZXMgKi8KKyNkZWZpbmUgSU5BVF9JTU1fT0ZGUwkoSU5BVF9HUlBfT0ZGUyArIElOQVRfR1JQX0JJVFMpCisjZGVmaW5lIElOQVRfSU1NX0JJVFMJMworI2RlZmluZSBJTkFUX0lNTV9NQVNLCSgoKDEgPDwgSU5BVF9JTU1fQklUUykgLSAxKSA8PCBJTkFUX0lNTV9PRkZTKQorLyogRmxhZ3MgKi8KKyNkZWZpbmUgSU5BVF9GTEFHX09GRlMJKElOQVRfSU1NX09GRlMgKyBJTkFUX0lNTV9CSVRTKQorI2RlZmluZSBJTkFUX01PRFJNCSgxIDw8IChJTkFUX0ZMQUdfT0ZGUykpCisjZGVmaW5lIElOQVRfRk9SQ0U2NAkoMSA8PCAoSU5BVF9GTEFHX09GRlMgKyAxKSkKKyNkZWZpbmUgSU5BVF9TQ05ESU1NCSgxIDw8IChJTkFUX0ZMQUdfT0ZGUyArIDIpKQorI2RlZmluZSBJTkFUX01PRkZTRVQJKDEgPDwgKElOQVRfRkxBR19PRkZTICsgMykpCisjZGVmaW5lIElOQVRfVkFSSUFOVAkoMSA8PCAoSU5BVF9GTEFHX09GRlMgKyA0KSkKKyNkZWZpbmUgSU5BVF9WRVhPSwkoMSA8PCAoSU5BVF9GTEFHX09GRlMgKyA1KSkKKyNkZWZpbmUgSU5BVF9WRVhPTkxZCSgxIDw8IChJTkFUX0ZMQUdfT0ZGUyArIDYpKQorLyogQXR0cmlidXRlIG1ha2luZyBtYWNyb3MgZm9yIGF0dHJpYnV0ZSB0YWJsZXMgKi8KKyNkZWZpbmUgSU5BVF9NQUtFX1BSRUZJWChwZngpCShwZnggPDwgSU5BVF9QRlhfT0ZGUykKKyNkZWZpbmUgSU5BVF9NQUtFX0VTQ0FQRShlc2MpCShlc2MgPDwgSU5BVF9FU0NfT0ZGUykKKyNkZWZpbmUgSU5BVF9NQUtFX0dST1VQKGdycCkJKChncnAgPDwgSU5BVF9HUlBfT0ZGUykgfCBJTkFUX01PRFJNKQorI2RlZmluZSBJTkFUX01BS0VfSU1NKGltbSkJKGltbSA8PCBJTkFUX0lNTV9PRkZTKQorCisvKiBBdHRyaWJ1dGUgc2VhcmNoIEFQSXMgKi8KK2V4dGVybiBpbnNuX2F0dHJfdCBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGluc25fYnl0ZV90IG9wY29kZSk7CitleHRlcm4gaW5zbl9hdHRyX3QgaW5hdF9nZXRfZXNjYXBlX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBvcGNvZGUsCisJCQkJCSAgICAgaW5zbl9ieXRlX3QgbGFzdF9wZngsCisJCQkJCSAgICAgaW5zbl9hdHRyX3QgZXNjX2F0dHIpOworZXh0ZXJuIGluc25fYXR0cl90IGluYXRfZ2V0X2dyb3VwX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBtb2RybSwKKwkJCQkJICAgIGluc25fYnl0ZV90IGxhc3RfcGZ4LAorCQkJCQkgICAgaW5zbl9hdHRyX3QgZXNjX2F0dHIpOworZXh0ZXJuIGluc25fYXR0cl90IGluYXRfZ2V0X2F2eF9hdHRyaWJ1dGUoaW5zbl9ieXRlX3Qgb3Bjb2RlLAorCQkJCQkgIGluc25fYnl0ZV90IHZleF9tLAorCQkJCQkgIGluc25fYnl0ZV90IHZleF9wcCk7CisKKy8qIEF0dHJpYnV0ZSBjaGVja2luZyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfbGVnYWN5X3ByZWZpeChpbnNuX2F0dHJfdCBhdHRyKQoreworCWF0dHIgJj0gSU5BVF9QRlhfTUFTSzsKKwlyZXR1cm4gYXR0ciAmJiBhdHRyIDw9IElOQVRfTEdDUEZYX01BWDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc19hZGRyZXNzX3NpemVfcHJlZml4KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIChhdHRyICYgSU5BVF9QRlhfTUFTSykgPT0gSU5BVF9QRlhfQUREUlNaOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2lzX29wZXJhbmRfc2l6ZV9wcmVmaXgoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gKGF0dHIgJiBJTkFUX1BGWF9NQVNLKSA9PSBJTkFUX1BGWF9PUE5EU1o7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfcmV4X3ByZWZpeChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfUEZYX01BU0spID09IElOQVRfUEZYX1JFWDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9sYXN0X3ByZWZpeF9pZChpbnNuX2F0dHJfdCBhdHRyKQoreworCWlmICgoYXR0ciAmIElOQVRfUEZYX01BU0spID4gSU5BVF9MU1RQRlhfTUFYKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBhdHRyICYgSU5BVF9QRlhfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc192ZXhfcHJlZml4KGluc25fYXR0cl90IGF0dHIpCit7CisJYXR0ciAmPSBJTkFUX1BGWF9NQVNLOworCXJldHVybiBhdHRyID09IElOQVRfUEZYX1ZFWDIgfHwgYXR0ciA9PSBJTkFUX1BGWF9WRVgzOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2lzX3ZleDNfcHJlZml4KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIChhdHRyICYgSU5BVF9QRlhfTUFTSykgPT0gSU5BVF9QRlhfVkVYMzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc19lc2NhcGUoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfRVNDX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfZXNjYXBlX2lkKGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIChhdHRyICYgSU5BVF9FU0NfTUFTSykgPj4gSU5BVF9FU0NfT0ZGUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc19ncm91cChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9HUlBfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9ncm91cF9pZChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfR1JQX01BU0spID4+IElOQVRfR1JQX09GRlM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfZ3JvdXBfY29tbW9uX2F0dHJpYnV0ZShpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgfklOQVRfR1JQX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaGFzX2ltbWVkaWF0ZShpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9JTU1fTUFTSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pbW1lZGlhdGVfc2l6ZShpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfSU1NX01BU0spID4+IElOQVRfSU1NX09GRlM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaGFzX21vZHJtKGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX01PRFJNOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2lzX2ZvcmNlNjQoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfRk9SQ0U2NDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9oYXNfc2Vjb25kX2ltbWVkaWF0ZShpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9TQ05ESU1NOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2hhc19tb2Zmc2V0KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX01PRkZTRVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaGFzX3ZhcmlhbnQoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfVkFSSUFOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9hY2NlcHRfdmV4KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX1ZFWE9LOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X211c3RfdmV4KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX1ZFWE9OTFk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luYXRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luYXRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjNjMjBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5hdF90eXBlcy5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5BVF9UWVBFU19ICisjZGVmaW5lIF9BU01fWDg2X0lOQVRfVFlQRVNfSAorLyoKKyAqIHg4NiBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzCisgKgorICogV3JpdHRlbiBieSBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKy8qIEluc3RydWN0aW9uIGF0dHJpYnV0ZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGluc25fYXR0cl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGluc25fYnl0ZV90OwordHlwZWRlZiBzaWduZWQgaW50IGluc25fdmFsdWVfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMmUwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luc24uaApAQCAtMCwwICsxLDE4NCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9JTlNOX0gKKyNkZWZpbmUgX0FTTV9YODZfSU5TTl9ICisvKgorICogeDg2IGluc3RydWN0aW9uIGFuYWx5c2lzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwOQorICovCisKKy8qIGluc25fYXR0cl90IGlzIGRlZmluZWQgaW4gaW5hdC5oICovCisjaW5jbHVkZSA8YXNtL2luYXQuaD4KKworc3RydWN0IGluc25fZmllbGQgeworCXVuaW9uIHsKKwkJaW5zbl92YWx1ZV90IHZhbHVlOworCQlpbnNuX2J5dGVfdCBieXRlc1s0XTsKKwl9OworCS8qICEwIGlmIHdlJ3ZlIHJ1biBpbnNuX2dldF94eHgoKSBmb3IgdGhpcyBmaWVsZCAqLworCXVuc2lnbmVkIGNoYXIgZ290OworCXVuc2lnbmVkIGNoYXIgbmJ5dGVzOworfTsKKworc3RydWN0IGluc24geworCXN0cnVjdCBpbnNuX2ZpZWxkIHByZWZpeGVzOwkvKgorCQkJCQkgKiBQcmVmaXhlcworCQkJCQkgKiBwcmVmaXhlcy5ieXRlc1szXTogbGFzdCBwcmVmaXgKKwkJCQkJICovCisJc3RydWN0IGluc25fZmllbGQgcmV4X3ByZWZpeDsJLyogUkVYIHByZWZpeCAqLworCXN0cnVjdCBpbnNuX2ZpZWxkIHZleF9wcmVmaXg7CS8qIFZFWCBwcmVmaXggKi8KKwlzdHJ1Y3QgaW5zbl9maWVsZCBvcGNvZGU7CS8qCisJCQkJCSAqIG9wY29kZS5ieXRlc1swXTogb3Bjb2RlMQorCQkJCQkgKiBvcGNvZGUuYnl0ZXNbMV06IG9wY29kZTIKKwkJCQkJICogb3Bjb2RlLmJ5dGVzWzJdOiBvcGNvZGUzCisJCQkJCSAqLworCXN0cnVjdCBpbnNuX2ZpZWxkIG1vZHJtOworCXN0cnVjdCBpbnNuX2ZpZWxkIHNpYjsKKwlzdHJ1Y3QgaW5zbl9maWVsZCBkaXNwbGFjZW1lbnQ7CisJdW5pb24geworCQlzdHJ1Y3QgaW5zbl9maWVsZCBpbW1lZGlhdGU7CisJCXN0cnVjdCBpbnNuX2ZpZWxkIG1vZmZzZXQxOwkvKiBmb3IgNjRiaXQgTU9WICovCisJCXN0cnVjdCBpbnNuX2ZpZWxkIGltbWVkaWF0ZTE7CS8qIGZvciA2NGJpdCBpbW0gb3Igb2ZmMTYvMzIgKi8KKwl9OworCXVuaW9uIHsKKwkJc3RydWN0IGluc25fZmllbGQgbW9mZnNldDI7CS8qIGZvciA2NGJpdCBNT1YgKi8KKwkJc3RydWN0IGluc25fZmllbGQgaW1tZWRpYXRlMjsJLyogZm9yIDY0Yml0IGltbSBvciBzZWcxNiAqLworCX07CisKKwlpbnNuX2F0dHJfdCBhdHRyOworCXVuc2lnbmVkIGNoYXIgb3BuZF9ieXRlczsKKwl1bnNpZ25lZCBjaGFyIGFkZHJfYnl0ZXM7CisJdW5zaWduZWQgY2hhciBsZW5ndGg7CisJdW5zaWduZWQgY2hhciB4ODZfNjQ7CisKKwljb25zdCBpbnNuX2J5dGVfdCAqa2FkZHI7CS8qIGtlcm5lbCBhZGRyZXNzIG9mIGluc24gdG8gYW5hbHl6ZSAqLworCWNvbnN0IGluc25fYnl0ZV90ICpuZXh0X2J5dGU7Cit9OworCisjZGVmaW5lIFg4Nl9NT0RSTV9NT0QobW9kcm0pICgoKG1vZHJtKSAmIDB4YzApID4+IDYpCisjZGVmaW5lIFg4Nl9NT0RSTV9SRUcobW9kcm0pICgoKG1vZHJtKSAmIDB4MzgpID4+IDMpCisjZGVmaW5lIFg4Nl9NT0RSTV9STShtb2RybSkgKChtb2RybSkgJiAweDA3KQorCisjZGVmaW5lIFg4Nl9TSUJfU0NBTEUoc2liKSAoKChzaWIpICYgMHhjMCkgPj4gNikKKyNkZWZpbmUgWDg2X1NJQl9JTkRFWChzaWIpICgoKHNpYikgJiAweDM4KSA+PiAzKQorI2RlZmluZSBYODZfU0lCX0JBU0Uoc2liKSAoKHNpYikgJiAweDA3KQorCisjZGVmaW5lIFg4Nl9SRVhfVyhyZXgpICgocmV4KSAmIDgpCisjZGVmaW5lIFg4Nl9SRVhfUihyZXgpICgocmV4KSAmIDQpCisjZGVmaW5lIFg4Nl9SRVhfWChyZXgpICgocmV4KSAmIDIpCisjZGVmaW5lIFg4Nl9SRVhfQihyZXgpICgocmV4KSAmIDEpCisKKy8qIFZFWCBiaXQgZmxhZ3MgICovCisjZGVmaW5lIFg4Nl9WRVhfVyh2ZXgpCSgodmV4KSAmIDB4ODApCS8qIFZFWDMgQnl0ZTIgKi8KKyNkZWZpbmUgWDg2X1ZFWF9SKHZleCkJKCh2ZXgpICYgMHg4MCkJLyogVkVYMi8zIEJ5dGUxICovCisjZGVmaW5lIFg4Nl9WRVhfWCh2ZXgpCSgodmV4KSAmIDB4NDApCS8qIFZFWDMgQnl0ZTEgKi8KKyNkZWZpbmUgWDg2X1ZFWF9CKHZleCkJKCh2ZXgpICYgMHgyMCkJLyogVkVYMyBCeXRlMSAqLworI2RlZmluZSBYODZfVkVYX0wodmV4KQkoKHZleCkgJiAweDA0KQkvKiBWRVgzIEJ5dGUyLCBWRVgyIEJ5dGUxICovCisvKiBWRVggYml0IGZpZWxkcyAqLworI2RlZmluZSBYODZfVkVYM19NKHZleCkJKCh2ZXgpICYgMHgxZikJCS8qIFZFWDMgQnl0ZTEgKi8KKyNkZWZpbmUgWDg2X1ZFWDJfTQkxCQkJLyogVkVYMi5NIGFsd2F5cyAxICovCisjZGVmaW5lIFg4Nl9WRVhfVih2ZXgpCSgoKHZleCkgJiAweDc4KSA+PiAzKQkvKiBWRVgzIEJ5dGUyLCBWRVgyIEJ5dGUxICovCisjZGVmaW5lIFg4Nl9WRVhfUCh2ZXgpCSgodmV4KSAmIDB4MDMpCQkvKiBWRVgzIEJ5dGUyLCBWRVgyIEJ5dGUxICovCisjZGVmaW5lIFg4Nl9WRVhfTV9NQVgJMHgxZgkJCS8qIFZFWDMuTSBNYXhpbXVtIHZhbHVlICovCisKKy8qIFRoZSBsYXN0IHByZWZpeCBpcyBuZWVkZWQgZm9yIHR3by1ieXRlIGFuZCB0aHJlZS1ieXRlIG9wY29kZXMgKi8KK3N0YXRpYyBpbmxpbmUgaW5zbl9ieXRlX3QgaW5zbl9sYXN0X3ByZWZpeChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbi0+cHJlZml4ZXMuYnl0ZXNbM107Cit9CisKK2V4dGVybiB2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCB4ODZfNjQpOworZXh0ZXJuIHZvaWQgaW5zbl9nZXRfcHJlZml4ZXMoc3RydWN0IGluc24gKmluc24pOworZXh0ZXJuIHZvaWQgaW5zbl9nZXRfb3Bjb2RlKHN0cnVjdCBpbnNuICppbnNuKTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X21vZHJtKHN0cnVjdCBpbnNuICppbnNuKTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X3NpYihzdHJ1Y3QgaW5zbiAqaW5zbik7CitleHRlcm4gdm9pZCBpbnNuX2dldF9kaXNwbGFjZW1lbnQoc3RydWN0IGluc24gKmluc24pOworZXh0ZXJuIHZvaWQgaW5zbl9nZXRfaW1tZWRpYXRlKHN0cnVjdCBpbnNuICppbnNuKTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X2xlbmd0aChzdHJ1Y3QgaW5zbiAqaW5zbik7CisKKy8qIEF0dHJpYnV0ZSB3aWxsIGJlIGRldGVybWluZWQgYWZ0ZXIgZ2V0dGluZyBNb2RSTSAoZm9yIG9wY29kZSBncm91cHMpICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbl9nZXRfYXR0cmlidXRlKHN0cnVjdCBpbnNuICppbnNuKQoreworCWluc25fZ2V0X21vZHJtKGluc24pOworfQorCisvKiBJbnN0cnVjdGlvbiB1c2VzIFJJUC1yZWxhdGl2ZSBhZGRyZXNzaW5nICovCitleHRlcm4gaW50IGluc25fcmlwX3JlbGF0aXZlKHN0cnVjdCBpbnNuICppbnNuKTsKKworLyogSW5pdCBpbnNuIGZvciBrZXJuZWwgdGV4dCAqLworc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9pbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpbnNuX2luaXQoaW5zbiwga2FkZHIsIDEpOworI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLworCWluc25faW5pdChpbnNuLCBrYWRkciwgMCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5zbl9pc19hdngoc3RydWN0IGluc24gKmluc24pCit7CisJaWYgKCFpbnNuLT5wcmVmaXhlcy5nb3QpCisJCWluc25fZ2V0X3ByZWZpeGVzKGluc24pOworCXJldHVybiAoaW5zbi0+dmV4X3ByZWZpeC52YWx1ZSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnNuX2J5dGVfdCBpbnNuX3ZleF9tX2JpdHMoc3RydWN0IGluc24gKmluc24pCit7CisJaWYgKGluc24tPnZleF9wcmVmaXgubmJ5dGVzID09IDIpCS8qIDIgYnl0ZXMgVkVYICovCisJCXJldHVybiBYODZfVkVYMl9NOworCWVsc2UKKwkJcmV0dXJuIFg4Nl9WRVgzX00oaW5zbi0+dmV4X3ByZWZpeC5ieXRlc1sxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW5zbl9ieXRlX3QgaW5zbl92ZXhfcF9iaXRzKHN0cnVjdCBpbnNuICppbnNuKQoreworCWlmIChpbnNuLT52ZXhfcHJlZml4Lm5ieXRlcyA9PSAyKQkvKiAyIGJ5dGVzIFZFWCAqLworCQlyZXR1cm4gWDg2X1ZFWF9QKGluc24tPnZleF9wcmVmaXguYnl0ZXNbMV0pOworCWVsc2UKKwkJcmV0dXJuIFg4Nl9WRVhfUChpbnNuLT52ZXhfcHJlZml4LmJ5dGVzWzJdKTsKK30KKworLyogT2Zmc2V0IG9mIGVhY2ggZmllbGQgZnJvbSBrYWRkciAqLworc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfcmV4X3ByZWZpeChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbi0+cHJlZml4ZXMubmJ5dGVzOworfQorc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfdmV4X3ByZWZpeChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbl9vZmZzZXRfcmV4X3ByZWZpeChpbnNuKSArIGluc24tPnJleF9wcmVmaXgubmJ5dGVzOworfQorc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfb3Bjb2RlKHN0cnVjdCBpbnNuICppbnNuKQoreworCXJldHVybiBpbnNuX29mZnNldF92ZXhfcHJlZml4KGluc24pICsgaW5zbi0+dmV4X3ByZWZpeC5uYnl0ZXM7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbnNuX29mZnNldF9tb2RybShzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbl9vZmZzZXRfb3Bjb2RlKGluc24pICsgaW5zbi0+b3Bjb2RlLm5ieXRlczsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGluc25fb2Zmc2V0X3NpYihzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbl9vZmZzZXRfbW9kcm0oaW5zbikgKyBpbnNuLT5tb2RybS5uYnl0ZXM7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbnNuX29mZnNldF9kaXNwbGFjZW1lbnQoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc25fb2Zmc2V0X3NpYihpbnNuKSArIGluc24tPnNpYi5uYnl0ZXM7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbnNuX29mZnNldF9pbW1lZGlhdGUoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc25fb2Zmc2V0X2Rpc3BsYWNlbWVudChpbnNuKSArIGluc24tPmRpc3BsYWNlbWVudC5uYnl0ZXM7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JTlNOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggODIwZjMwMC4uNmY4ZWMxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0KQkoKih1bnNpZ25lZCBsb25nICopKCh0KS0+dGhyZWFkLnNwIC0gOCkpCiAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykJKChzdHJ1Y3QgcHRfcmVncyAqKSh0c2spLT50aHJlYWQuc3AwIC0gMSkKLSNkZWZpbmUgS1NUS19FU1AodHNrKQkJLTEgLyogc29ycnkuIGRvZXNuJ3Qgd29yayBmb3Igc3lzY2FsbC4gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIEtTVEtfRVNQKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiBleHRlcm4gdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X2lwLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAwZjBkOTA4Li5hM2Q0OWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNyw2ICs3LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTIxNiw2ICsyMTcsNjcgQEAKIAlyZXR1cm4gcmVncy0+c3A7CiB9CiAKKy8qIFF1ZXJ5IG9mZnNldC9uYW1lIG9mIHJlZ2lzdGVyIGZyb20gaXRzIG5hbWUvb2Zmc2V0ICovCitleHRlcm4gaW50IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyNkZWZpbmUgTUFYX1JFR19PRkZTRVQgKG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcykpCisKKy8qKgorICogcmVnc19nZXRfcmVnaXN0ZXIoKSAtIGdldCByZWdpc3RlciB2YWx1ZSBmcm9tIGl0cyBvZmZzZXQKKyAqIEByZWdzOglwdF9yZWdzIGZyb20gd2hpY2ggcmVnaXN0ZXIgdmFsdWUgaXMgZ290dGVuLgorICogQG9mZnNldDoJb2Zmc2V0IG51bWJlciBvZiB0aGUgcmVnaXN0ZXIuCisgKgorICogcmVnc19nZXRfcmVnaXN0ZXIgcmV0dXJucyB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciB3aG9zZSBvZmZzZXQgZnJvbSBAcmVncworICogaXMgQG9mZnNldC4gVGhlIEBvZmZzZXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgaW4gc3RydWN0IHB0X3JlZ3MuCisgKiBJZiBAb2Zmc2V0IGlzIGJpZ2dlciB0aGFuIE1BWF9SRUdfT0ZGU0VULCB0aGlzIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWlmICh1bmxpa2VseShvZmZzZXQgPiBNQVhfUkVHX09GRlNFVCkpCisJCXJldHVybiAwOworCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpcmVncyArIG9mZnNldCk7Cit9CisKKy8qKgorICogcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKCkgLSBjaGVjayB0aGUgYWRkcmVzcyBpbiB0aGUgc3RhY2sKKyAqIEByZWdzOglwdF9yZWdzIHdoaWNoIGNvbnRhaW5zIGtlcm5lbCBzdGFjayBwb2ludGVyLgorICogQGFkZHI6CWFkZHJlc3Mgd2hpY2ggaXMgY2hlY2tlZC4KKyAqCisgKiByZWdzX3dpdGhpbl9rZW5lbF9zdGFjaygpIGNoZWNrcyBAYWRkciBpcyB3aXRoaW4gdGhlIGtlcm5lbCBzdGFjayBwYWdlKHMpLgorICogSWYgQGFkZHIgaXMgd2l0aGluIHRoZSBrZXJuZWwgc3RhY2ssIGl0IHJldHVybnMgdHJ1ZS4gSWYgbm90LCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKChhZGRyICYgfihUSFJFQURfU0laRSAtIDEpKSAgPT0KKwkJKGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpICYgfihUSFJFQURfU0laRSAtIDEpKSk7Cit9CisKKy8qKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIC0gZ2V0IE50aCBlbnRyeSBvZiB0aGUgc3RhY2sKKyAqIEByZWdzOglwdF9yZWdzIHdoaWNoIGNvbnRhaW5zIGtlcm5lbCBzdGFjayBwb2ludGVyLgorICogQG46CQlzdGFjayBlbnRyeSBudW1iZXIuCisgKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIHJldHVybnMgQG4gdGggZW50cnkgb2YgdGhlIGtlcm5lbCBzdGFjayB3aGljaAorICogaXMgc3BlY2lmaW5lZCBieSBAcmVncy4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUga2VybmVsIHN0YWNrLAorICogdGhpcyByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkJICAgICAgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CisJYWRkciArPSBuOworCWlmIChyZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2socmVncywgKHVuc2lnbmVkIGxvbmcpYWRkcikpCisJCXJldHVybiAqYWRkcjsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBHZXQgTnRoIGFyZ3VtZW50IGF0IGZ1bmN0aW9uIGNhbGwgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X2FyZ3VtZW50X250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgdW5zaWduZWQgaW50IG4pOworCiAvKgogICogVGhlc2UgYXJlIGRlZmluZWQgYXMgcGVyIGxpbnV4L3B0cmFjZS5oLCB3aGljaCBzZWUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDI1YTkyODQuLjQwZTM3YjEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggMDRlYjZjOS4uZDE0MTRhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogCiAKIC8qCkBAIC0xMTQsNyArMTE2LDcgQEAKIC8qCiAgKiBUaGUgbGFyZ2VzdCBwb3NzaWJsZSBOQVNJRCBvZiBhIEMgb3IgTSBicmljayAoKyAyKQogICovCi0jZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX05PREVTICogMikKKyNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfQkxBREVTICogMikKIAogc3RydWN0IHV2X3NjaXJfcyB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC0yMzAsNiArMjMyLDIwIEBACiAJcmV0dXJuIHV2X3NvY19waHlzX3JhbV90b19ncGEoX19wYSh2KSk7CiB9CiAKKy8qIGdub2RlIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ3BhX3RvX2dub2RlKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiBncGEgPj4gdXZfaHViX2luZm8tPm1fdmFsOworfQorCisvKiBncGEgLT4gcG5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X2dwYV90b19wbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwl1bnNpZ25lZCBsb25nIG5fbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisKKwlyZXR1cm4gdXZfZ3BhX3RvX2dub2RlKGdwYSkgJiBuX21hc2s7Cit9CisKIC8qIHBub2RlLCBvZmZzZXQgLS0+IHNvY2tldCB2aXJ0dWFsICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnV2X3Bub2RlX29mZnNldF90b192YWRkcihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewpAQCAtNDIxLDkgKzQzNywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHV2X2h1Yl9zZW5kX2lwaShpbnQgcG5vZGUsIGludCBhcGljaWQsIGludCB2ZWN0b3IpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBkbW9kZSA9IGRlc3RfRml4ZWQ7CisKKwlpZiAodmVjdG9yID09IE5NSV9WRUNUT1IpCisJCWRtb2RlID0gZGVzdF9OTUk7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAogCQkJKChhcGljaWQpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCQkJKGRtb2RlIDw8IFVWSF9JUElfSU5UX0RFTElWRVJZX01PREVfU0hGVCkgfAogCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwppbmRleCAwZTUwZTFlLi4wNjBmZmY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCkBAIC01Niw2ICs1Niw5IEBACiAJL0RJU0NBUkQvIDogewogCQkqKC5ub3RlKikKIAl9Ci19CiAKLUFTU0VSVChfZW5kIDw9IFdBS0VVUF9TSVpFLCAiV2FrZXVwIHRvbyBiaWchIik7CisJLyoKKwkgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorCSAqLworCS4gPSBBU1NFUlQoX2VuZCA8PSBXQUtFVVBfU0laRSwgIldha2V1cCB0b28gYmlnISIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDk4ZjIzMGYuLjAyODU1MjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTEyMjAsNiArMTIyMCw4IEBACiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVsxXSA9IDA7CiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVsyXSA9IDA7CiAKKwlhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82MyhkZXZpZCk7CisKIAkvKiBkZWNyZWFzZSByZWZlcmVuY2UgY291bnRlciAqLwogCWRvbWFpbi0+ZGV2X2NudCAtPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IGI0YjYxZDQuLmMyMDAwMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAl3cml0ZWwoY3RybCwgaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fQ09OVFJPTF9PRkZTRVQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW9tbXVfZmVhdHVyZV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1OCBiaXQpCitzdGF0aWMgdm9pZCBpb21tdV9mZWF0dXJlX2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJpdCkKIHsKIAl1MzIgY3RybDsKIApAQCAtNTE5LDYgKzUxOSwyNiBAQAogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbaV0gfD0gKDEgPDwgX2JpdCk7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2Rldl9lbnRyeV9iaXQodTE2IGRldmlkLCB1OCBiaXQpCit7CisJaW50IGkgPSAoYml0ID4+IDUpICYgMHgwNzsKKwlpbnQgX2JpdCA9IGJpdCAmIDB4MWY7CisKKwlyZXR1cm4gKGFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbaV0gJiAoMSA8PCBfYml0KSkgPj4gX2JpdDsKK30KKworCit2b2lkIGFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKHUxNiBkZXZpZCkKK3sKKwlpbnQgc3lzbWd0OworCisJc3lzbWd0ID0gZ2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9TWVNNR1QxKSB8CisJCSAoZ2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9TWVNNR1QyKSA8PCAxKTsKKworCWlmIChzeXNtZ3QgPT0gMHgwMSkKKwkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9JVyk7Cit9CisKIC8qIFdyaXRlcyB0aGUgc3BlY2lmaWMgSU9NTVUgZm9yIGEgZGV2aWNlIGludG8gdGhlIHJsb29rdXAgdGFibGUgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfaW9tbXVfZm9yX2RldmljZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTE2IGRldmlkKQogewpAQCAtNTQ3LDYgKzU2Nyw4IEBACiAJaWYgKGZsYWdzICYgQUNQSV9ERVZGTEFHX0xJTlQxKQogCQlzZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX0xJTlQxX1BBU1MpOwogCisJYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjMoZGV2aWQpOworCiAJc2V0X2lvbW11X2Zvcl9kZXZpY2UoaW9tbXUsIGRldmlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggZjVmNTg4Ni4uMzI2YzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zNTIsMTQgKzM1MiwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkaXJfYWRkcnMpOyBpKyspIHsKIAkJYWxpYXMudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLmFsaWFzKTsKLQkJaWYgKGFsaWFzLnMuYmFzZSA9PSAwKSB7CisJCWlmIChhbGlhcy5zLmVuYWJsZSAmJiBhbGlhcy5zLmJhc2UgPT0gMCkgewogCQkJKnNpemUgPSAoMVVMIDw8IGFsaWFzLnMubV9hbGlhcyk7CiAJCQlyZWRpcmVjdC52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0ucmVkaXJlY3QpOwogCQkJKmJhc2UgPSAodW5zaWduZWQgbG9uZylyZWRpcmVjdC5zLmRlc3RfYmFzZSA8PCBERVNUX1NISUZUOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCUJVRygpOworCSpiYXNlID0gKnNpemUgPSAwOwogfQogCiBlbnVtIG1hcF90eXBlIHttYXBfd2IsIG1hcF91Y307CkBAIC02MTksMTIgKzYxOSwxMiBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX2Jhc2UgPSBsb3dtZW1fcmVkaXJfYmFzZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF90b3AgPSBsb3dtZW1fcmVkaXJfc2l6ZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fdmFsID0gbV92YWw7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG1fdmFsOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBuX3ZhbDsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm51bWFfYmxhZGVfaWQgPSBibGFkZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZCA9IGxjcHU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZSA9IHBub2RlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGVfbWFzayA9IHBub2RlX21hc2s7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMVVMIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfdXBwZXIgPSBnbm9kZV91cHBlcjsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX2V4dHJhID0gZ25vZGVfZXh0cmE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggYjE1OThhOS4uNzIxYTc3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTEyMTQsNyArMTIxNCw4IEBACiAJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7CiAKIAliID0gY2FwICYgTUNHX0JBTktDTlRfTUFTSzsKLQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOworCWlmICghYmFua3MpCisJCXByaW50ayhLRVJOX0lORk8gIm1jZTogQ1BVIHN1cHBvcnRzICVkIE1DRSBiYW5rc1xuIiwgYik7CiAKIAlpZiAoYiA+IE1BWF9OUl9CQU5LUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwppbmRleCAzMTU3MzhjLi43M2M4NmRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CiAKIAlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOwotCXByaW50ayhLRVJOX0lORk8gInRvdGFsIFJBTSBjb3ZlcnJlZDogJWxkTVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKIAkgICAgICAgcmFuZ2Vfc3VtcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKIAlpZiAobXRycl9jaHVua19zaXplICYmIG10cnJfZ3Jhbl9zaXplKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDJlMjBiY2EuLmJkODc0MzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CiAKLXN0YXRpYyBjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KQEAgLTMzNiw3ICszMzYsNyBAQAogIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcworc3RhdGljIF9faW5pdGNvbnN0IHU2NCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KQEAgLTQyNyw3ICs0MjcsNyBAQAogIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9CkBAIC01MzYsNyArNTM2LDcgQEAKIAlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKIH0KIAotc3RhdGljIGNvbnN0IHU2NCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KQEAgLTE5NjQsNyArMTk2NCw3IEBACiAJLnByaW9yaXR5CQk9IDEKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7CitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgcDZfcG11ID0gewogCS5uYW1lCQkJPSAicDYiLAogCS5oYW5kbGVfaXJxCQk9IHA2X3BtdV9oYW5kbGVfaXJxLAogCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCkBAIC0xOTkyLDcgKzE5OTIsNyBAQAogCS5nZXRfZXZlbnRfaWR4CQk9IGludGVsX2dldF9ldmVudF9pZHgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0geworc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHsKIAkubmFtZQkJCT0gIkludGVsIiwKIAkuaGFuZGxlX2lycQkJPSBpbnRlbF9wbXVfaGFuZGxlX2lycSwKIAkuZGlzYWJsZV9hbGwJCT0gaW50ZWxfcG11X2Rpc2FibGVfYWxsLApAQCAtMjAxNiw3ICsyMDE2LDcgQEAKIAkuZ2V0X2V2ZW50X2lkeAkJPSBpbnRlbF9nZXRfZXZlbnRfaWR4LAogfTsKIAotc3RhdGljIHN0cnVjdCB4ODZfcG11IGFtZF9wbXUgPSB7CitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKIAkubmFtZQkJCT0gIkFNRCIsCiAJLmhhbmRsZV9pcnEJCT0gYW1kX3BtdV9oYW5kbGVfaXJxLAogCS5kaXNhYmxlX2FsbAkJPSBhbWRfcG11X2Rpc2FibGVfYWxsLApAQCAtMjAzNyw3ICsyMDM3LDcgQEAKIAkuZ2V0X2V2ZW50X2lkeAkJPSBnZW5fZ2V0X2V2ZW50X2lkeCwKIH07CiAKLXN0YXRpYyBpbnQgcDZfcG11X2luaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IHA2X3BtdV9pbml0KHZvaWQpCiB7CiAJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewogCWNhc2UgMToKQEAgLTIwNzEsNyArMjA3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCiB7CiAJdW5pb24gY3B1aWQxMF9lZHggZWR4OwogCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKQEAgLTIxNDQsNyArMjE0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgX19pbml0IGludCBhbWRfcG11X2luaXQodm9pZCkKIHsKIAkvKiBQZXJmb3JtYW5jZS1tb25pdG9yaW5nIHN1cHBvcnRlZCBmcm9tIEs3IGFuZCBsYXRlcjogKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA2KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggZjdjZGIzYi4uY2Q5N2NlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC0xNiw2ICsxNiwyMiBAQAogLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKIAorc3RhdGljIGlubGluZSBib29sIGlzX2NyYXNoZWRfcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworI2lmbmRlZiBDT05GSUdfWDg2X1BBRQorCS8qCisJICogbm9uLVBBRSBrZHVtcCBrZXJuZWwgZXhlY3V0ZWQgZnJvbSBhIFBBRSBvbmUgd2lsbCBjcm9wIGhpZ2ggcHRlCisJICogYml0cyBhbmQgcG9rZSB1bndhbnRlZCBzcGFjZSBjb3VudGluZyBhZ2FpbiBmcm9tIGFkZHJlc3MgMCwgd2UKKwkgKiBkb24ndCB3YW50IHRoYXQuIHB0ZSBtdXN0IGZpdCBpbnRvIHVuc2lnbmVkIGxvbmcuIEluIGZhY3QgdGhlCisJICogdGVzdCBjaGVja3MgaGlnaCAxMiBiaXRzIGZvciBiZWluZyB6ZXJvIChwZm4gd2lsbCBiZSBzaGlmdGVkIGxlZnQKKwkgKiBieSBQQUdFX1NISUZUKS4KKwkgKi8KKwlyZXR1cm4gcHRlX3BmbihwZm5fcHRlKHBmbiwgX19wZ3Byb3QoMCkpKSA9PSBwZm47CisjZWxzZQorCXJldHVybiB0cnVlOworI2VuZGlmCit9CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCkBAIC00MSw2ICs1Nyw5IEBACiAJaWYgKCFjc2l6ZSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWlzX2NyYXNoZWRfcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRUZBVUxUOworCiAJdmFkZHIgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9QVEUwKTsKIAogCWlmICghdXNlcmJ1ZikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGFkNWJkOTguLmNkY2ZiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTQ1NCw4ICs0NTQsMTAgQEAKIAlpZiAoYWRkX2VmaV9tZW1tYXApCiAJCWRvX2FkZF9lZmlfbWVtbWFwKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBlZmlfZ2V0X3RpbWU7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBlZmlfc2V0X3J0Y19tbXNzOworI2VuZGlmCiAKIAkvKiBTZXR1cCBmb3IgRUZJIHJ1bnRpbWUgc2VydmljZSAqLwogCXJlYm9vdF90eXBlID0gQk9PVF9FRkk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDdkNTJlOWQuLjUwYjljMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0zMzQsNiArMzM0LDEwIEBACiBFTkQocmV0X2Zyb21fZm9yaykKIAogLyoKKyAqIEludGVycnVwdCBleGl0IGZ1bmN0aW9ucyBzaG91bGQgYmUgcHJvdGVjdGVkIGFnYWluc3Qga3Byb2JlcworICovCisJLnB1c2hzZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKKy8qCiAgKiBSZXR1cm4gdG8gdXNlciBtb2RlIGlzIG5vdCBhcyBjb21wbGV4IGFzIGFsbCB0aGlzIGxvb2tzLAogICogYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgcGF0aCBmb3IgYSBzeXN0ZW0gY2FsbCByZXR1cm4gdG8KICAqIGdvIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgd2hpY2ggaXMgd2h5IHNvbWUgb2YgdGhpcyBpcwpAQCAtMzgzLDYgKzM4NywxMCBAQAogRU5EKHJlc3VtZV9rZXJuZWwpCiAjZW5kaWYKIAlDRklfRU5EUFJPQworLyoKKyAqIEVuZCBvZiBrcHJvYmVzIHNlY3Rpb24KKyAqLworCS5wb3BzZWN0aW9uCiAKIC8qIFNZU0VOVEVSX1JFVFVSTiBwb2ludHMgdG8gYWZ0ZXIgdGhlICJzeXNlbnRlciIgaW5zdHJ1Y3Rpb24gaW4KICAgIHRoZSB2c3lzY2FsbCBwYWdlLiAgU2VlIHZzeXNjYWxsLXN5c2VudHJ5LlMsIHdoaWNoIGRlZmluZXMgdGhlIHN5bWJvbC4gICovCkBAIC01MTMsNiArNTIxLDEwIEBACiAJUFRHU19UT19HU19FWAogRU5EUFJPQyhpYTMyX3N5c2VudGVyX3RhcmdldCkKIAorLyoKKyAqIHN5c2NhbGwgc3R1YiBpbmNsdWRpbmcgaXJxIGV4aXQgc2hvdWxkIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGtwcm9iZXMKKyAqLworCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCiAJIyBzeXN0ZW0gY2FsbCBoYW5kbGVyIHN0dWIKIEVOVFJZKHN5c3RlbV9jYWxsKQogCVJJTkcwX0lOVF9GUkFNRQkJCSMgY2FuJ3QgdW53aW5kIGludG8gdXNlciBzcGFjZSBhbnl3YXkKQEAgLTcwNSw2ICs3MTcsMTAgQEAKIAlqbXAgcmVzdW1lX3VzZXJzcGFjZQogRU5EKHN5c2NhbGxfYmFkc3lzKQogCUNGSV9FTkRQUk9DCisvKgorICogRW5kIG9mIGtwcm9iZXMgc2VjdGlvbgorICovCisJLnBvcHNlY3Rpb24KIAogLyoKICAqIFN5c3RlbSBjYWxscyB0aGF0IG5lZWQgYSBwdF9yZWdzIHBvaW50ZXIuCkBAIC04MTQsNiArODMwLDEwIEBACiBFTkRQUk9DKGNvbW1vbl9pbnRlcnJ1cHQpCiAJQ0ZJX0VORFBST0MKIAorLyoKKyAqICBJcnEgZW50cmllcyBzaG91bGQgYmUgcHJvdGVjdGVkIGFnYWluc3Qga3Byb2JlcworICovCisJLnB1c2hzZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKICNkZWZpbmUgQlVJTERfSU5URVJSVVBUMyhuYW1lLCBuciwgZm4pCVwKIEVOVFJZKG5hbWUpCQkJCVwKIAlSSU5HMF9JTlRfRlJBTUU7CQlcCkBAIC05ODAsNiArMTAwMCwxMCBAQAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKIEVORChzcHVyaW91c19pbnRlcnJ1cHRfYnVnKQorLyoKKyAqIEVuZCBvZiBrcHJvYmVzIHNlY3Rpb24KKyAqLworCS5wb3BzZWN0aW9uCiAKIEVOVFJZKGtlcm5lbF90aHJlYWRfaGVscGVyKQogCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGJkNWJiZGQuLjcyMmRmMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC04MDMsNiArODAzLDEwIEBACiAJY2FsbCBcZnVuYwogCS5lbmRtCiAKKy8qCisgKiBJbnRlcnJ1cHQgZW50cnkvZXhpdCBzaG91bGQgYmUgcHJvdGVjdGVkIGFnYWluc3Qga3Byb2JlcworICovCisJLnB1c2hzZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKIAkvKgogCSAqIFRoZSBpbnRlcnJ1cHQgc3R1YnMgcHVzaCAofnZlY3RvcisweDgwKSBvbnRvIHRoZSBzdGFjayBhbmQKIAkgKiB0aGVuIGp1bXAgdG8gY29tbW9uX2ludGVycnVwdC4KQEAgLTk0MSw2ICs5NDUsMTAgQEAKIAogCUNGSV9FTkRQUk9DCiBFTkQoY29tbW9uX2ludGVycnVwdCkKKy8qCisgKiBFbmQgb2Yga3Byb2JlcyBzZWN0aW9uCisgKi8KKyAgICAgICAucG9wc2VjdGlvbgogCiAvKgogICogQVBJQyBpbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDc0NjU2ZDEuLjA0YmJkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTYzLDEwICs2MywxMCBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHNcbiIpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTkQiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlbmRpbmdfaXJxcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCBiNWIxODQ4Li4zZmU4NmQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ4LDEyICs0OCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgogCiB2b2lkIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpOwpAQCAtMTA3LDUwICsxMDksNiBAQAogCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwogCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwogfTsKLXN0YXRpYyBjb25zdCB1MzIgb25lYnl0ZV9oYXNfbW9kcm1bMjU2IC8gMzJdID0gewotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCVcoMHgwMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgfCAvKiAwMCAqLwotCVcoMHgxMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgLCAvKiAxMCAqLwotCVcoMHgyMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgfCAvKiAyMCAqLwotCVcoMHgzMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgLCAvKiAzMCAqLwotCVcoMHg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiA0MCAqLwotCVcoMHg1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA1MCAqLwotCVcoMHg2MCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCkgfCAvKiA2MCAqLwotCVcoMHg3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA3MCAqLwotCVcoMHg4MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA4MCAqLwotCVcoMHg5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA5MCAqLwotCVcoMHhhMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBhMCAqLwotCVcoMHhiMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiBiMCAqLwotCVcoMHhjMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBjMCAqLwotCVcoMHhkMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBkMCAqLwotCVcoMHhlMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBlMCAqLwotCVcoMHhmMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSkgICAvKiBmMCAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotfTsKLXN0YXRpYyBjb25zdCB1MzIgdHdvYnl0ZV9oYXNfbW9kcm1bMjU2IC8gMzJdID0gewotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCVcoMHgwMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSkgfCAvKiAwZiAqLwotCVcoMHgxMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiAxZiAqLwotCVcoMHgyMCwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiAyZiAqLwotCVcoMHgzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiAzZiAqLwotCVcoMHg0MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA0ZiAqLwotCVcoMHg1MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiA1ZiAqLwotCVcoMHg2MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA2ZiAqLwotCVcoMHg3MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSkgLCAvKiA3ZiAqLwotCVcoMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiA4ZiAqLwotCVcoMHg5MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiA5ZiAqLwotCVcoMHhhMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSkgfCAvKiBhZiAqLwotCVcoMHhiMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBiZiAqLwotCVcoMHhjMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBjZiAqLwotCVcoMHhkMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBkZiAqLwotCVcoMHhlMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiBlZiAqLwotCVcoMHhmMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCkgICAvKiBmZiAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotfTsKICN1bmRlZiBXCiAKIHN0cnVjdCBrcmV0cHJvYmVfYmxhY2twb2ludCBrcmV0cHJvYmVfYmxhY2tsaXN0W10gPSB7CkBAIC0yNDUsNiArMjAzLDc1IEBACiAJfQogfQogCisvKiBSZWNvdmVyIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gYXQgYWRkciBmb3IgZnVydGhlciBhbmFseXNpcy4gKi8KK3N0YXRpYyBpbnQgcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oa3Byb2JlX29wY29kZV90ICpidWYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qga3Byb2JlICprcDsKKwlrcCA9IGdldF9rcHJvYmUoKHZvaWQgKilhZGRyKTsKKwlpZiAoIWtwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogIEJhc2ljYWxseSwga3AtPmFpbnNuLmluc24gaGFzIGFuIG9yaWdpbmFsIGluc3RydWN0aW9uLgorCSAqICBIb3dldmVyLCBSSVAtcmVsYXRpdmUgaW5zdHJ1Y3Rpb24gY2FuIG5vdCBkbyBzaW5nbGUtc3RlcHBpbmcKKwkgKiAgYXQgZGlmZmVyZW50IHBsYWNlLCBmaXhfcmlwcmVsKCkgdHdlYWtzIHRoZSBkaXNwbGFjZW1lbnQgb2YKKwkgKiAgdGhhdCBpbnN0cnVjdGlvbi4gSW4gdGhhdCBjYXNlLCB3ZSBjYW4ndCByZWNvdmVyIHRoZSBpbnN0cnVjdGlvbgorCSAqICBmcm9tIHRoZSBrcC0+YWluc24uaW5zbi4KKwkgKgorCSAqICBPbiB0aGUgb3RoZXIgaGFuZCwga3AtPm9wY29kZSBoYXMgYSBjb3B5IG9mIHRoZSBmaXJzdCBieXRlIG9mCisJICogIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG92ZXJ3cml0dGVuIGJ5IGludDMuIEFuZAorCSAqICB0aGUgaW5zdHJ1Y3Rpb24gYXQga3AtPmFkZHIgaXMgbm90IG1vZGlmaWVkIGJ5IGtwcm9iZXMgZXhjZXB0CisJICogIGZvciB0aGUgZmlyc3QgYnl0ZSwgd2UgY2FuIHJlY292ZXIgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uCisJICogIGZyb20gaXQgYW5kIGtwLT5vcGNvZGUuCisJICovCisJbWVtY3B5KGJ1Ziwga3AtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJYnVmWzBdID0ga3AtPm9wY29kZTsKKwlyZXR1cm4gMDsKK30KKworLyogRHVtbXkgYnVmZmVycyBmb3Iga2FsbHN5bXNfbG9va3VwICovCitzdGF0aWMgY2hhciBfX2R1bW15X2J1ZltLU1lNX05BTUVfTEVOXTsKKworLyogQ2hlY2sgaWYgcGFkZHIgaXMgYXQgYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGNhbl9wcm9iZSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBvZmZzZXQgPSAwOworCXN0cnVjdCBpbnNuIGluc247CisJa3Byb2JlX29wY29kZV90IGJ1ZltNQVhfSU5TTl9TSVpFXTsKKworCWlmICgha2FsbHN5bXNfbG9va3VwKHBhZGRyLCBOVUxMLCAmb2Zmc2V0LCBOVUxMLCBfX2R1bW15X2J1ZikpCisJCXJldHVybiAwOworCisJLyogRGVjb2RlIGluc3RydWN0aW9ucyAqLworCWFkZHIgPSBwYWRkciAtIG9mZnNldDsKKwl3aGlsZSAoYWRkciA8IHBhZGRyKSB7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopYWRkcik7CisJCWluc25fZ2V0X29wY29kZSgmaW5zbik7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIKKwkJICoga3Byb2JlLCBpbiB3aGljaCBjYXNlIHdlIHJlcGxhY2UgdGhlIGJyZWFrcG9pbnQgYnkgdGhlCisJCSAqIG9yaWdpbmFsIGluc3RydWN0aW9uIGluIG91ciBidWZmZXIuCisJCSAqLworCQlpZiAoaW5zbi5vcGNvZGUuYnl0ZXNbMF0gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgeworCQkJcmV0ID0gcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKTsKKwkJCWlmIChyZXQpCisJCQkJLyoKKwkJCQkgKiBBbm90aGVyIGRlYnVnZ2luZyBzdWJzeXN0ZW0gbWlnaHQgaW5zZXJ0CisJCQkJICogdGhpcyBicmVha3BvaW50LiBJbiB0aGF0IGNhc2UsIHdlIGNhbid0CisJCQkJICogcmVjb3ZlciBpdC4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGJ1Zik7CisJCX0KKwkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKKwkJYWRkciArPSBpbnNuLmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gKGFkZHIgPT0gcGFkZHIpOworfQorCiAvKgogICogUmV0dXJucyBub24temVybyBpZiBvcGNvZGUgbW9kaWZpZXMgdGhlIGludGVycnVwdCBmbGFnLgogICovCkBAIC0yNzgsNjggKzMwNSwzMCBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGZpeF9yaXByZWwoc3RydWN0IGtwcm9iZSAqcCkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdTggKmluc24gPSBwLT5haW5zbi5pbnNuOwotCXM2NCBkaXNwOwotCWludCBuZWVkX21vZHJtOworCXN0cnVjdCBpbnNuIGluc247CisJa2VybmVsX2luc25faW5pdCgmaW5zbiwgcC0+YWluc24uaW5zbik7CiAKLQkvKiBTa2lwIGxlZ2FjeSBpbnN0cnVjdGlvbiBwcmVmaXhlcy4gICovCi0Jd2hpbGUgKDEpIHsKLQkJc3dpdGNoICgqaW5zbikgewotCQljYXNlIDB4NjY6Ci0JCWNhc2UgMHg2NzoKLQkJY2FzZSAweDJlOgotCQljYXNlIDB4M2U6Ci0JCWNhc2UgMHgyNjoKLQkJY2FzZSAweDY0OgotCQljYXNlIDB4NjU6Ci0JCWNhc2UgMHgzNjoKLQkJY2FzZSAweGYwOgotCQljYXNlIDB4ZjM6Ci0JCWNhc2UgMHhmMjoKLQkJCSsraW5zbjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCS8qIFNraXAgUkVYIGluc3RydWN0aW9uIHByZWZpeC4gICovCi0JaWYgKGlzX1JFWF9wcmVmaXgoaW5zbikpCi0JCSsraW5zbjsKLQotCWlmICgqaW5zbiA9PSAweDBmKSB7Ci0JCS8qIFR3by1ieXRlIG9wY29kZS4gICovCi0JCSsraW5zbjsKLQkJbmVlZF9tb2RybSA9IHRlc3RfYml0KCppbnNuLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nICopdHdvYnl0ZV9oYXNfbW9kcm0pOwotCX0gZWxzZQotCQkvKiBPbmUtYnl0ZSBvcGNvZGUuICAqLwotCQluZWVkX21vZHJtID0gdGVzdF9iaXQoKmluc24sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgKilvbmVieXRlX2hhc19tb2RybSk7Ci0KLQlpZiAobmVlZF9tb2RybSkgewotCQl1OCBtb2RybSA9ICorK2luc247Ci0JCWlmICgobW9kcm0gJiAweGM3KSA9PSAweDA1KSB7Ci0JCQkvKiAlcmlwK2Rpc3AzMiBhZGRyZXNzaW5nIG1vZGUgKi8KLQkJCS8qIERpc3BsYWNlbWVudCBmb2xsb3dzIE1vZFJNIGJ5dGUuICAqLwotCQkJKytpbnNuOwotCQkJLyoKLQkJCSAqIFRoZSBjb3BpZWQgaW5zdHJ1Y3Rpb24gdXNlcyB0aGUgJXJpcC1yZWxhdGl2ZQotCQkJICogYWRkcmVzc2luZyBtb2RlLiAgQWRqdXN0IHRoZSBkaXNwbGFjZW1lbnQgZm9yIHRoZQotCQkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGlzCi0JCQkgKiBpbnN0cnVjdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb3B5IHRoYXQgd2lsbAotCQkJICogYWN0dWFsbHkgYmUgcnVuLiAgVGhlIHRyaWNreSBiaXQgaGVyZSBpcyBtYWtpbmcgc3VyZQotCQkJICogdGhhdCB0aGUgc2lnbiBleHRlbnNpb24gaGFwcGVucyBjb3JyZWN0bHkgaW4gdGhpcwotCQkJICogY2FsY3VsYXRpb24sIHNpbmNlIHdlIG5lZWQgYSBzaWduZWQgMzItYml0IHJlc3VsdCB0bwotCQkJICogYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHdoZW4gaXQncyBhZGRlZCB0byB0aGUKLQkJCSAqICVyaXAgdmFsdWUgYW5kIHlpZWxkIHRoZSBzYW1lIDY0LWJpdCByZXN1bHQgdGhhdCB0aGUKLQkJCSAqIHNpZ24tZXh0ZW5zaW9uIG9mIHRoZSBvcmlnaW5hbCBzaWduZWQgMzItYml0Ci0JCQkgKiBkaXNwbGFjZW1lbnQgd291bGQgaGF2ZSBnaXZlbi4KLQkJCSAqLwotCQkJZGlzcCA9ICh1OCAqKSBwLT5hZGRyICsgKigoczMyICopIGluc24pIC0KLQkJCSAgICAgICAodTggKikgcC0+YWluc24uaW5zbjsKLQkJCUJVR19PTigoczY0KSAoczMyKSBkaXNwICE9IGRpc3ApOyAvKiBTYW5pdHkgY2hlY2suICAqLwotCQkJKihzMzIgKilpbnNuID0gKHMzMikgZGlzcDsKLQkJfQorCWlmIChpbnNuX3JpcF9yZWxhdGl2ZSgmaW5zbikpIHsKKwkJczY0IG5ld2Rpc3A7CisJCXU4ICpkaXNwOworCQlpbnNuX2dldF9kaXNwbGFjZW1lbnQoJmluc24pOworCQkvKgorCQkgKiBUaGUgY29waWVkIGluc3RydWN0aW9uIHVzZXMgdGhlICVyaXAtcmVsYXRpdmUgYWRkcmVzc2luZworCQkgKiBtb2RlLiAgQWRqdXN0IHRoZSBkaXNwbGFjZW1lbnQgZm9yIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKwkJICogdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIHRoZSBsb2NhdGlvbgorCQkgKiBvZiB0aGUgY29weSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgcnVuLiAgVGhlIHRyaWNreSBiaXQgaGVyZQorCQkgKiBpcyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzaWduIGV4dGVuc2lvbiBoYXBwZW5zIGNvcnJlY3RseSBpbgorCQkgKiB0aGlzIGNhbGN1bGF0aW9uLCBzaW5jZSB3ZSBuZWVkIGEgc2lnbmVkIDMyLWJpdCByZXN1bHQgdG8KKwkJICogYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHdoZW4gaXQncyBhZGRlZCB0byB0aGUgJXJpcAorCQkgKiB2YWx1ZSBhbmQgeWllbGQgdGhlIHNhbWUgNjQtYml0IHJlc3VsdCB0aGF0IHRoZSBzaWduLQorCQkgKiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsIHNpZ25lZCAzMi1iaXQgZGlzcGxhY2VtZW50IHdvdWxkCisJCSAqIGhhdmUgZ2l2ZW4uCisJCSAqLworCQluZXdkaXNwID0gKHU4ICopIHAtPmFkZHIgKyAoczY0KSBpbnNuLmRpc3BsYWNlbWVudC52YWx1ZSAtCisJCQkgICh1OCAqKSBwLT5haW5zbi5pbnNuOworCQlCVUdfT04oKHM2NCkgKHMzMikgbmV3ZGlzcCAhPSBuZXdkaXNwKTsgLyogU2FuaXR5IGNoZWNrLiAgKi8KKwkJZGlzcCA9ICh1OCAqKSBwLT5haW5zbi5pbnNuICsgaW5zbl9vZmZzZXRfZGlzcGxhY2VtZW50KCZpbnNuKTsKKwkJKihzMzIgKikgZGlzcCA9IChzMzIpIG5ld2Rpc3A7CiAJfQogI2VuZGlmCiB9CkBAIC0zNjAsNiArMzQ5LDggQEAKIAogaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CisJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCisJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwogCXAtPmFpbnNuLmluc24gPSBnZXRfaW5zbl9zbG90KCk7CiAJaWYgKCFwLT5haW5zbi5pbnNuKQpAQCAtNDczLDE3ICs0NjQsNiBAQAogewogCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CiAJY2FzZSBLUFJPQkVfSElUX1NTRE9ORToKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCS8qIFRPRE86IFByb3ZpZGUgcmUtZW50cmFuY3kgZnJvbSBwb3N0X2twcm9iZXNfaGFuZGxlcigpIGFuZAotCQkgKiBhdm9pZCBleGNlcHRpb24gc3RhY2sgY29ycnVwdGlvbiB3aGlsZSBzaW5nbGUtc3RlcHBpbmcgb24KLQkJICogdGhlIGluc3RydWN0aW9uIG9mIHRoZSBuZXcgcHJvYmUuCi0JCSAqLwotCQlhcmNoX2Rpc2FybV9rcHJvYmUocCk7Ci0JCXJlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKLQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKLQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgS1BST0JFX0hJVF9BQ1RJVkU6CiAJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CiAJCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOwpAQCAtNDkyLDE4ICs0NzIsMTYgQEAKIAkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CiAJCWJyZWFrOwogCWNhc2UgS1BST0JFX0hJVF9TUzoKLQkJaWYgKHAgPT0ga3Byb2JlX3J1bm5pbmcoKSkgewotCQkJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7Ci0JCQlyZWdzLT5mbGFncyB8PSBrY2ItPmtwcm9iZV9zYXZlZF9mbGFnczsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJLyogQSBwcm9iZSBoYXMgYmVlbiBoaXQgaW4gdGhlIGNvZGVwYXRoIGxlYWRpbmcgdXAKLQkJCSAqIHRvLCBvciBqdXN0IGFmdGVyLCBzaW5nbGUtc3RlcHBpbmcgb2YgYSBwcm9iZWQKLQkJCSAqIGluc3RydWN0aW9uLiBUaGlzIGVudGlyZSBjb2RlcGF0aCBzaG91bGQgc3RyaWN0bHkKLQkJCSAqIHJlc2lkZSBpbiAua3Byb2Jlcy50ZXh0IHNlY3Rpb24uIFJhaXNlIGEgd2FybmluZwotCQkJICogdG8gaGlnaGxpZ2h0IHRoaXMgcGVjdWxpYXIgY2FzZS4KLQkJCSAqLwotCQl9CisJCS8qIEEgcHJvYmUgaGFzIGJlZW4gaGl0IGluIHRoZSBjb2RlcGF0aCBsZWFkaW5nIHVwIHRvLCBvciBqdXN0CisJCSAqIGFmdGVyLCBzaW5nbGUtc3RlcHBpbmcgb2YgYSBwcm9iZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgZW50aXJlCisJCSAqIGNvZGVwYXRoIHNob3VsZCBzdHJpY3RseSByZXNpZGUgaW4gLmtwcm9iZXMudGV4dCBzZWN0aW9uLgorCQkgKiBSYWlzZSBhIEJVRyBvciB3ZSdsbCBjb250aW51ZSBpbiBhbiBlbmRsZXNzIHJlZW50ZXJpbmcgbG9vcAorCQkgKiBhbmQgZXZlbnR1YWxseSBhIHN0YWNrIG92ZXJmbG93LgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5yZWNvdmVyYWJsZSBrcHJvYmUgZGV0ZWN0ZWQgYXQgJXAuXG4iLAorCQkgICAgICAgcC0+YWRkcik7CisJCWR1bXBfa3Byb2JlKHApOworCQlCVUcoKTsKIAlkZWZhdWx0OgogCQkvKiBpbXBvc3NpYmxlIGNhc2VzICovCiAJCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCAzNjZiYWExLi5mNGM1MzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTMxNyw2ICszMTcsMTIgQEAKIAkJcmV0dXJuIFVDT0RFX05GT1VORDsKIAl9CiAKKwlpZiAoKih1MzIgKilmaXJtd2FyZS0+ZGF0YSAhPSBVQ09ERV9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogaW52YWxpZCBVQ09ERV9NQUdJQyAoMHglMDh4KVxuIiwKKwkJICAgICAgICoodTMyICopZmlybXdhcmUtPmRhdGEpOworCQlyZXR1cm4gVUNPREVfRVJST1I7CisJfQorCiAJcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGIyYTcxZGMuLmE2ZTgwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtNDUsMTIgKzQ1LDEwIEBACiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzcyBfX3JlYWRfbW9zdGx5ID0gMDsKIEVYUE9SVF9TWU1CT0woYmFkX2RtYV9hZGRyZXNzKTsKIAotLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKLSAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCi0gICB0byBvbGRlciBpMzg2LiAqLworLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiAqLwogc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldiA9IHsKIAkuaW5pdF9uYW1lID0gImZhbGxiYWNrIGRldmljZSIsCi0JLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkuY29oZXJlbnRfZG1hX21hc2sgPSBJU0FfRE1BX0JJVF9NQVNLLAogCS5kbWFfbWFzayA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2Rldi5jb2hlcmVudF9kbWFfbWFzaywKIH07CiBFWFBPUlRfU1lNQk9MKHg4Nl9kbWFfZmFsbGJhY2tfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDViYWZkZWMuLjcwY2YxNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNjcxLDMgKzY3MSw4IEBACiAJcmV0dXJuIGRvX2FyY2hfcHJjdGwoY3VycmVudCwgY29kZSwgYWRkcik7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgS1NUS19FU1Aoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0lBMzIpKSA/CisJCQkodGFza19wdF9yZWdzKHRhc2spLT5zcCkgOiAoKHRhc2spLT50aHJlYWQudXNlcnNwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCBlNzk2MTBkLi5iMjVmODk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC01Miw2ICs1MiwxMTggQEAKIAlSRUdTRVRfSU9QRVJNMzIsCiB9OwogCitzdHJ1Y3QgcHRfcmVnc19vZmZzZXQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG9mZnNldDsKK307CisKKyNkZWZpbmUgUkVHX09GRlNFVF9OQU1FKHIpIHsubmFtZSA9ICNyLCAub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIpfQorI2RlZmluZSBSRUdfT0ZGU0VUX0VORCB7Lm5hbWUgPSBOVUxMLCAub2Zmc2V0ID0gMH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwdF9yZWdzX29mZnNldCByZWdvZmZzZXRfdGFibGVbXSA9IHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJUkVHX09GRlNFVF9OQU1FKHIxNSksCisJUkVHX09GRlNFVF9OQU1FKHIxNCksCisJUkVHX09GRlNFVF9OQU1FKHIxMyksCisJUkVHX09GRlNFVF9OQU1FKHIxMiksCisJUkVHX09GRlNFVF9OQU1FKHIxMSksCisJUkVHX09GRlNFVF9OQU1FKHIxMCksCisJUkVHX09GRlNFVF9OQU1FKHI5KSwKKwlSRUdfT0ZGU0VUX05BTUUocjgpLAorI2VuZGlmCisJUkVHX09GRlNFVF9OQU1FKGJ4KSwKKwlSRUdfT0ZGU0VUX05BTUUoY3gpLAorCVJFR19PRkZTRVRfTkFNRShkeCksCisJUkVHX09GRlNFVF9OQU1FKHNpKSwKKwlSRUdfT0ZGU0VUX05BTUUoZGkpLAorCVJFR19PRkZTRVRfTkFNRShicCksCisJUkVHX09GRlNFVF9OQU1FKGF4KSwKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJUkVHX09GRlNFVF9OQU1FKGRzKSwKKwlSRUdfT0ZGU0VUX05BTUUoZXMpLAorCVJFR19PRkZTRVRfTkFNRShmcyksCisJUkVHX09GRlNFVF9OQU1FKGdzKSwKKyNlbmRpZgorCVJFR19PRkZTRVRfTkFNRShvcmlnX2F4KSwKKwlSRUdfT0ZGU0VUX05BTUUoaXApLAorCVJFR19PRkZTRVRfTkFNRShjcyksCisJUkVHX09GRlNFVF9OQU1FKGZsYWdzKSwKKwlSRUdfT0ZGU0VUX05BTUUoc3ApLAorCVJFR19PRkZTRVRfTkFNRShzcyksCisJUkVHX09GRlNFVF9FTkQsCit9OworCisvKioKKyAqIHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KCkgLSBxdWVyeSByZWdpc3RlciBvZmZzZXQgZnJvbSBpdHMgbmFtZQorICogQG5hbWU6CXRoZSBuYW1lIG9mIGEgcmVnaXN0ZXIKKyAqCisgKiByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldCgpIHJldHVybnMgdGhlIG9mZnNldCBvZiBhIHJlZ2lzdGVyIGluIHN0cnVjdAorICogcHRfcmVncyBmcm9tIGl0cyBuYW1lLiBJZiB0aGUgbmFtZSBpcyBpbnZhbGlkLCB0aGlzIHJldHVybnMgLUVJTlZBTDsKKyAqLworaW50IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHB0X3JlZ3Nfb2Zmc2V0ICpyb2ZmOworCWZvciAocm9mZiA9IHJlZ29mZnNldF90YWJsZTsgcm9mZi0+bmFtZSAhPSBOVUxMOyByb2ZmKyspCisJCWlmICghc3RyY21wKHJvZmYtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIHJvZmYtPm9mZnNldDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiByZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUoKSAtIHF1ZXJ5IHJlZ2lzdGVyIG5hbWUgZnJvbSBpdHMgb2Zmc2V0CisgKiBAb2Zmc2V0Ogl0aGUgb2Zmc2V0IG9mIGEgcmVnaXN0ZXIgaW4gc3RydWN0IHB0X3JlZ3MuCisgKgorICogcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKCkgcmV0dXJucyB0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyIGZyb20gaXRzCisgKiBvZmZzZXQgaW4gc3RydWN0IHB0X3JlZ3MuIElmIHRoZSBAb2Zmc2V0IGlzIGludmFsaWQsIHRoaXMgcmV0dXJucyBOVUxMOworICovCitjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQgKnJvZmY7CisJZm9yIChyb2ZmID0gcmVnb2Zmc2V0X3RhYmxlOyByb2ZmLT5uYW1lICE9IE5VTEw7IHJvZmYrKykKKwkJaWYgKHJvZmYtPm9mZnNldCA9PSBvZmZzZXQpCisJCQlyZXR1cm4gcm9mZi0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGludCBhcmdfb2Zmc190YWJsZVtdID0geworI2lmZGVmIENPTkZJR19YODZfMzIKKwlbMF0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYXgpLAorCVsxXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkeCksCisJWzJdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KQorI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCVswXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkaSksCisJWzFdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNpKSwKKwlbMl0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZHgpLAorCVszXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBjeCksCisJWzRdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHI4KSwKKwlbNV0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjkpCisjZW5kaWYKK307CisKKy8qKgorICogcmVnc19nZXRfYXJndW1lbnRfbnRoKCkgLSBnZXQgTnRoIGFyZ3VtZW50IGF0IGZ1bmN0aW9uIGNhbGwKKyAqIEByZWdzOglwdF9yZWdzIHdoaWNoIGNvbnRhaW5zIHJlZ2lzdGVycyBhdCBmdW5jdGlvbiBlbnRyeS4KKyAqIEBuOgkJYXJndW1lbnQgbnVtYmVyLgorICoKKyAqIHJlZ3NfZ2V0X2FyZ3VtZW50X250aCgpIHJldHVybnMgQG4gdGggYXJndW1lbnQgb2YgYSBmdW5jdGlvbiBjYWxsLgorICogU2luY2UgdXN1YWxseSB0aGUga2VybmVsIHN0YWNrIHdpbGwgYmUgY2hhbmdlZCByaWdodCBhZnRlciBmdW5jdGlvbiBlbnRyeSwKKyAqIHlvdSBtdXN0IHVzZSB0aGlzIGF0IGZ1bmN0aW9uIGVudHJ5LiBJZiB0aGUgQG4gdGggZW50cnkgaXMgTk9UIGluIHRoZQorICoga2VybmVsIHN0YWNrIG9yIHB0X3JlZ3MsIHRoaXMgcmV0dXJucyAwLgorICovCit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X2FyZ3VtZW50X250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pCit7CisJaWYgKG4gPCBBUlJBWV9TSVpFKGFyZ19vZmZzX3RhYmxlKSkKKwkJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKSgoY2hhciAqKXJlZ3MgKyBhcmdfb2Zmc190YWJsZVtuXSk7CisJZWxzZSB7CisJCS8qCisJCSAqIFRoZSB0eXBpY2FsIGNhc2U6IGFyZyBuIGlzIG9uIHRoZSBzdGFjay4KKwkJICogKE5vdGU6IHN0YWNrWzBdID0gcmV0dXJuIGFkZHJlc3MsIHNvIHNraXAgaXQpCisJCSAqLworCQluIC09IEFSUkFZX1NJWkUoYXJnX29mZnNfdGFibGUpOworCQlyZXR1cm4gcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChyZWdzLCAxICsgbik7CisJfQorfQorCiAvKgogICogZG9lcyBub3QgeWV0IGNhdGNoIHNpZ25hbHMgc2VudCB3aGVuIHRoZSBjaGlsZCBkaWVzLgogICogaW4gZXhpdC5jIG9yIGluIHNpZ25hbC5jLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IGExYTNjZGQuLmY5MzA3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTQzNiw2ICs0MzYsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIEFwcGxlIE1hY21pbmkzLDEgKi8KKwkJLmNhbGxiYWNrID0gc2V0X3BjaV9yZWJvb3QsCisJCS5pZGVudCA9ICJBcHBsZSBNYWNtaW5pMywxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY21pbmkzLDEiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBlMDlmMGUyLi4yYTM0ZjljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNjYwLDYgKzY2MCwxMyBAQAogCQl9LAogCX0sCiAJeworCQkuY2FsbGJhY2sgPSBkbWlfbG93X21lbW9yeV9jb3JydXB0aW9uLAorCQkuaWRlbnQgPSAiUGhvZW5peC9NU0MgQklPUyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIlBob2VuaXgvTVNDIiksCisJCX0sCisJfSwKKwl7CiAJLyoKIAkgKiBBTUkgQklPUyB3aXRoIGxvdyBtZW1vcnkgY29ycnVwdGlvbiB3YXMgZm91bmQgb24gSW50ZWwgREc0NUlEIGJvYXJkLgogCSAqIEl0IGhhc2UgZGlmZmVyZW50IERNSV9CSU9TX1ZFTkRPUiA9ICJJbnRlbCBDb3JwLiIsIGZvciBub3cgd2Ugd2lsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDUwM2MxZjIuLjE3NDBjODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIAotLyogcG9zaXRpb24gb2YgcG5vZGUgKHdoaWNoIGlzIG5hc2lkPj4xKTogKi8KLXN0YXRpYyBpbnQJCQl1dl9uc2hpZnQgX19yZWFkX21vc3RseTsKIC8qIGJhc2UgcG5vZGUgaW4gdGhpcyBwYXJ0aXRpb24gKi8KIHN0YXRpYyBpbnQJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSBfX3JlYWRfbW9zdGx5OwogCkBAIC03MjMsNyArNzIxLDcgQEAKIAlCVUdfT04oIWFkcCk7CiAKIAlwYSA9IHV2X2dwYShhZHApOyAvKiBuZWVkIHRoZSByZWFsIG5hc2lkKi8KLQluID0gcGEgPj4gdXZfbnNoaWZ0OworCW4gPSB1dl9ncGFfdG9fcG5vZGUocGEpOwogCW0gPSBwYSAmIHV2X21tYXNrOwogCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKQEAgLTc3OCw3ICs3NzYsNyBAQAogCSAqIG5lZWQgdGhlIHBub2RlIG9mIHdoZXJlIHRoZSBtZW1vcnkgd2FzIHJlYWxseSBhbGxvY2F0ZWQKIAkgKi8KIAlwYSA9IHV2X2dwYShwcXApOwotCXBuID0gcGEgPj4gdXZfbnNoaWZ0OworCXBuID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsCiAJCQkgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCwKIAkJCSAgICAgICgodW5zaWduZWQgbG9uZylwbiA8PCBVVl9QQVlMT0FEUV9QTk9ERV9TSElGVCkgfApAQCAtODQzLDggKzg0MSw3IEBACiAJCQkJICAgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGN1cl9jcHUpKTsKIAogCXV2X2JhdV9yZXRyeV9saW1pdCA9IDE7Ci0JdXZfbnNoaWZ0ID0gdXZfaHViX2luZm8tPm5fdmFsOwotCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKwl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm1fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKIAogCXV2X2JhdV90YWJsZV9iYXNlcyA9IChzdHJ1Y3QgYmF1X2NvbnRyb2wgKiopCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDhkNjAwMWEuLjNjNjhmZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMDUsOCArMzA1LDExIEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLUFTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKLSAgICAgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CisvKgorICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKyAqLworLiA9IEFTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKKwkgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CiAjZWxzZQogLyoKICAqIFBlci1jcHUgc3ltYm9scyB3aGljaCBuZWVkIHRvIGJlIG9mZnNldCBmcm9tIF9fcGVyX2NwdV9sb2FkCkBAIC0zMTksMTIgKzMyMiwxMiBAQAogLyoKICAqIEJ1aWxkLXRpbWUgY2hlY2sgb24gdGhlIGltYWdlIHNpemU6CiAgKi8KLUFTU0VSVCgoX2VuZCAtIF90ZXh0IDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKLSAgICAgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CisuID0gQVNTRVJUKChfZW5kIC0gX3RleHQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAorCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLUFTU0VSVCgocGVyX2NwdV9faXJxX3N0YWNrX3VuaW9uID09IDApLAotICAgICAgICJpcnFfc3RhY2tfdW5pb24gaXMgbm90IGF0IHN0YXJ0IG9mIHBlci1jcHUgYXJlYSIpOworLiA9IEFTU0VSVCgocGVyX2NwdV9faXJxX3N0YWNrX3VuaW9uID09IDApLAorICAgICAgICAgICAiaXJxX3N0YWNrX3VuaW9uIGlzIG5vdCBhdCBzdGFydCBvZiBwZXItY3B1IGFyZWEiKTsKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwpAQCAtMzMyLDYgKzMzNSw3IEBACiAjaWZkZWYgQ09ORklHX0tFWEVDCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAKLUFTU0VSVChrZXhlY19jb250cm9sX2NvZGVfc2l6ZSA8PSBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUsCi0gICAgICAgImtleGVjIGNvbnRyb2wgY29kZSBzaXplIGlzIHRvbyBiaWciKTsKKy4gPSBBU1NFUlQoa2V4ZWNfY29udHJvbF9jb2RlX3NpemUgPD0gS0VYRUNfQ09OVFJPTF9DT0RFX01BWF9TSVpFLAorICAgICAgICAgICAia2V4ZWMgY29udHJvbCBjb2RlIHNpemUgaXMgdG9vIGJpZyIpOwogI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggODJhZDUyMy4uMTQ0ZTdmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCSAqIGl0c2VsZiB3aXRoIHRoZSBpbml0aWFsIGNvdW50IGFuZCBjb250aW51ZXMgY291bnRpbmcKIAkgKiBmcm9tIHRoZXJlLgogCSAqLwotCXJlbWFpbmluZyA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOworCXJlbWFpbmluZyA9IGhydGltZXJfZ2V0X3JlbWFpbmluZygmcHMtPnBpdF90aW1lci50aW1lcik7CiAJZWxhcHNlZCA9IHBzLT5waXRfdGltZXIucGVyaW9kIC0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKIAllbGFwc2VkID0gbW9kXzY0KGVsYXBzZWQsIHBzLT5waXRfdGltZXIucGVyaW9kKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmMgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwppbmRleCA3MDI0MjI0Li4yM2MyMTc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYworKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJaWYgKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXJlbWFpbmluZyA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJmFwaWMtPmxhcGljX3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmFwaWMtPmxhcGljX3RpbWVyLnRpbWVyKTsKIAlpZiAoa3RpbWVfdG9fbnMocmVtYWluaW5nKSA8IDApCiAJCXJlbWFpbmluZyA9IGt0aW1lX3NldCgwLCAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDY4NWE0ZmYuLjgxOGI5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTc0OCw3ICs3NDgsOCBAQAogCXJldHVybiB3cml0ZV9wcm90ZWN0ZWQ7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3VubWFwX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsIHU2NCBkYXRhKQorc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IG5lZWRfdGxiX2ZsdXNoID0gMDsKQEAgLTc2Myw3ICs3NjQsOCBAQAogCXJldHVybiBuZWVkX3RsYl9mbHVzaDsKIH0KIAotc3RhdGljIGludCBrdm1fc2V0X3B0ZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLCB1NjQgZGF0YSkKK3N0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQogewogCWludCBuZWVkX2ZsdXNoID0gMDsKIAl1NjQgKnNwdGUsIG5ld19zcHRlOwpAQCAtNzk5LDkgKzgwMSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHU2NCBkYXRhLAorc3RhdGljIGludCBrdm1faGFuZGxlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLAorCQkJICB1bnNpZ25lZCBsb25nIGRhdGEsCiAJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCi0JCQkJCSB1NjQgZGF0YSkpCisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpKQogewogCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwpAQCAtODQ2LDEwICs4NDksMTEgQEAKIAogdm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSkKIHsKLQlrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgKHU2NCkmcHRlLCBrdm1fc2V0X3B0ZV9ybWFwcCk7CisJa3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsICh1bnNpZ25lZCBsb25nKSZwdGUsIGt2bV9zZXRfcHRlX3JtYXBwKTsKIH0KIAotc3RhdGljIGludCBrdm1fYWdlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsIHU2NCBkYXRhKQorc3RhdGljIGludCBrdm1fYWdlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgdW5zaWduZWQgbG9uZyBkYXRhKQogewogCXU2NCAqc3B0ZTsKIAlpbnQgeW91bmcgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDM4MTcyMjAuLjRmYzgwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTE2OTMsNyArMTY5Myw3IEBACiAJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKIAogCXIgPSAtRUlOVkFMOwotCWlmICghYmFua19udW0pCisJaWYgKCFiYW5rX251bSB8fCBiYW5rX251bSA+PSBLVk1fTUFYX01DRV9CQU5LUykKIAkJZ290byBvdXQ7CiAJaWYgKG1jZ19jYXAgJiB+KEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCB8IDB4ZmYgfCAweGZmMDAwMCkpCiAJCWdvdG8gb3V0OwpAQCAtNDA1Myw3ICs0MDUzLDcgQEAKIAlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZHRhYmxlLmJhc2UgKyBpbmRleCo4LCBzZWdfZGVzYywgc2l6ZW9mKCpzZWdfZGVzYyksIHZjcHUpOwogfQogCi1zdGF0aWMgdTMyIGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7CiAJdTMyIGJhc2VfYWRkciA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliLy5naXRpZ25vcmUgYi9hcmNoL3g4Ni9saWIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY4OWYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAoraW5hdC10YWJsZXMuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDg1ZjVkYjkuLmEyZDY0NzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTIsMTIgKzIsMjUgQEAKICMgTWFrZWZpbGUgZm9yIHg4NiBzcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLgogIwogCitpbmF0X3RhYmxlc19zY3JpcHQgPSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3aworaW5hdF90YWJsZXNfbWFwcyA9ICQoc3JjdHJlZSkvYXJjaC94ODYvbGliL3g4Ni1vcGNvZGUtbWFwLnR4dAorcXVpZXRfY21kX2luYXRfdGFibGVzID0gR0VOICAgICAkQAorICAgICAgY21kX2luYXRfdGFibGVzID0gJChBV0spIC1mICQoaW5hdF90YWJsZXNfc2NyaXB0KSAkKGluYXRfdGFibGVzX21hcHMpID4gJEAKKworJChvYmopL2luYXQtdGFibGVzLmM6ICQoaW5hdF90YWJsZXNfc2NyaXB0KSAkKGluYXRfdGFibGVzX21hcHMpCisJJChjYWxsIGNtZCxpbmF0X3RhYmxlcykKKworJChvYmopL2luYXQubzogJChvYmopL2luYXQtdGFibGVzLmMKKworY2xlYW4tZmlsZXMgOj0gaW5hdC10YWJsZXMuYworCiBvYmotJChDT05GSUdfU01QKSA6PSBtc3IubwogCiBsaWIteSA6PSBkZWxheS5vCiBsaWIteSArPSB0aHVua18kKEJJVFMpLm8KIGxpYi15ICs9IHVzZXJjb3B5XyQoQklUUykubyBnZXR1c2VyLm8gcHV0dXNlci5vCiBsaWIteSArPSBtZW1jcHlfJChCSVRTKS5vCitsaWIteSArPSBpbnNuLm8gaW5hdC5vCiAKIG9iai15ICs9IG1zci1yZWcubyBtc3ItcmVnLWV4cG9ydC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pbmF0LmMgYi9hcmNoL3g4Ni9saWIvaW5hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmM0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvaW5hdC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiB4ODYgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlIHRhYmxlcworICoKKyAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisKKy8qIEF0dHJpYnV0ZSB0YWJsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIG9wY29kZSBtYXAgKi8KKyNpbmNsdWRlICJpbmF0LXRhYmxlcy5jIgorCisvKiBBdHRyaWJ1dGUgc2VhcmNoIEFQSXMgKi8KK2luc25fYXR0cl90IGluYXRfZ2V0X29wY29kZV9hdHRyaWJ1dGUoaW5zbl9ieXRlX3Qgb3Bjb2RlKQoreworCXJldHVybiBpbmF0X3ByaW1hcnlfdGFibGVbb3Bjb2RlXTsKK30KKworaW5zbl9hdHRyX3QgaW5hdF9nZXRfZXNjYXBlX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBvcGNvZGUsIGluc25fYnl0ZV90IGxhc3RfcGZ4LAorCQkJCSAgICAgIGluc25fYXR0cl90IGVzY19hdHRyKQoreworCWNvbnN0IGluc25fYXR0cl90ICp0YWJsZTsKKwlpbnNuX2F0dHJfdCBscGZ4X2F0dHI7CisJaW50IG4sIG0gPSAwOworCisJbiA9IGluYXRfZXNjYXBlX2lkKGVzY19hdHRyKTsKKwlpZiAobGFzdF9wZngpIHsKKwkJbHBmeF9hdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShsYXN0X3BmeCk7CisJCW0gPSBpbmF0X2xhc3RfcHJlZml4X2lkKGxwZnhfYXR0cik7CisJfQorCXRhYmxlID0gaW5hdF9lc2NhcGVfdGFibGVzW25dWzBdOworCWlmICghdGFibGUpCisJCXJldHVybiAwOworCWlmIChpbmF0X2hhc192YXJpYW50KHRhYmxlW29wY29kZV0pICYmIG0pIHsKKwkJdGFibGUgPSBpbmF0X2VzY2FwZV90YWJsZXNbbl1bbV07CisJCWlmICghdGFibGUpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRhYmxlW29wY29kZV07Cit9CisKK2luc25fYXR0cl90IGluYXRfZ2V0X2dyb3VwX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBtb2RybSwgaW5zbl9ieXRlX3QgbGFzdF9wZngsCisJCQkJICAgICBpbnNuX2F0dHJfdCBncnBfYXR0cikKK3sKKwljb25zdCBpbnNuX2F0dHJfdCAqdGFibGU7CisJaW5zbl9hdHRyX3QgbHBmeF9hdHRyOworCWludCBuLCBtID0gMDsKKworCW4gPSBpbmF0X2dyb3VwX2lkKGdycF9hdHRyKTsKKwlpZiAobGFzdF9wZngpIHsKKwkJbHBmeF9hdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShsYXN0X3BmeCk7CisJCW0gPSBpbmF0X2xhc3RfcHJlZml4X2lkKGxwZnhfYXR0cik7CisJfQorCXRhYmxlID0gaW5hdF9ncm91cF90YWJsZXNbbl1bMF07CisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIGluYXRfZ3JvdXBfY29tbW9uX2F0dHJpYnV0ZShncnBfYXR0cik7CisJaWYgKGluYXRfaGFzX3ZhcmlhbnQodGFibGVbWDg2X01PRFJNX1JFRyhtb2RybSldKSAmJiBtKSB7CisJCXRhYmxlID0gaW5hdF9ncm91cF90YWJsZXNbbl1bbV07CisJCWlmICghdGFibGUpCisJCQlyZXR1cm4gaW5hdF9ncm91cF9jb21tb25fYXR0cmlidXRlKGdycF9hdHRyKTsKKwl9CisJcmV0dXJuIHRhYmxlW1g4Nl9NT0RSTV9SRUcobW9kcm0pXSB8CisJICAgICAgIGluYXRfZ3JvdXBfY29tbW9uX2F0dHJpYnV0ZShncnBfYXR0cik7Cit9CisKK2luc25fYXR0cl90IGluYXRfZ2V0X2F2eF9hdHRyaWJ1dGUoaW5zbl9ieXRlX3Qgb3Bjb2RlLCBpbnNuX2J5dGVfdCB2ZXhfbSwKKwkJCQkgICBpbnNuX2J5dGVfdCB2ZXhfcCkKK3sKKwljb25zdCBpbnNuX2F0dHJfdCAqdGFibGU7CisJaWYgKHZleF9tID4gWDg2X1ZFWF9NX01BWCB8fCB2ZXhfcCA+IElOQVRfTFNUUEZYX01BWCkKKwkJcmV0dXJuIDA7CisJdGFibGUgPSBpbmF0X2F2eF90YWJsZXNbdmV4X21dW3ZleF9wXTsKKwlpZiAoIXRhYmxlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGFibGVbb3Bjb2RlXTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2luc24uYyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzM2I5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiB4ODYgaW5zdHJ1Y3Rpb24gYW5hbHlzaXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDAyLCAyMDA0LCAyMDA5CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9pbmF0Lmg+CisjaW5jbHVkZSA8YXNtL2luc24uaD4KKworI2RlZmluZSBnZXRfbmV4dCh0LCBpbnNuKQlcCisJKHt0IHI7IHIgPSAqKHQqKWluc24tPm5leHRfYnl0ZTsgaW5zbi0+bmV4dF9ieXRlICs9IHNpemVvZih0KTsgcjsgfSkKKworI2RlZmluZSBwZWVrX25leHQodCwgaW5zbikJXAorCSh7dCByOyByID0gKih0KilpbnNuLT5uZXh0X2J5dGU7IHI7IH0pCisKKyNkZWZpbmUgcGVla19uYnl0ZV9uZXh0KHQsIGluc24sIG4pCVwKKwkoe3QgcjsgciA9ICoodCopKChpbnNuKS0+bmV4dF9ieXRlICsgbik7IHI7IH0pCisKKy8qKgorICogaW5zbl9pbml0KCkgLSBpbml0aWFsaXplIHN0cnVjdCBpbnNuCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIHRvIGJlIGluaXRpYWxpemVkCisgKiBAa2FkZHI6CWFkZHJlc3MgKGluIGtlcm5lbCBtZW1vcnkpIG9mIGluc3RydWN0aW9uIChvciBjb3B5IHRoZXJlb2YpCisgKiBAeDg2XzY0OgkhMCBmb3IgNjQtYml0IGtlcm5lbCBvciA2NC1iaXQgYXBwCisgKi8KK3ZvaWQgaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkciwgaW50IHg4Nl82NCkKK3sKKwltZW1zZXQoaW5zbiwgMCwgc2l6ZW9mKCppbnNuKSk7CisJaW5zbi0+a2FkZHIgPSBrYWRkcjsKKwlpbnNuLT5uZXh0X2J5dGUgPSBrYWRkcjsKKwlpbnNuLT54ODZfNjQgPSB4ODZfNjQgPyAxIDogMDsKKwlpbnNuLT5vcG5kX2J5dGVzID0gNDsKKwlpZiAoeDg2XzY0KQorCQlpbnNuLT5hZGRyX2J5dGVzID0gODsKKwllbHNlCisJCWluc24tPmFkZHJfYnl0ZXMgPSA0OworfQorCisvKioKKyAqIGluc25fZ2V0X3ByZWZpeGVzIC0gc2NhbiB4ODYgaW5zdHJ1Y3Rpb24gcHJlZml4IGJ5dGVzCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBQb3B1bGF0ZXMgdGhlIEBpbnNuLT5wcmVmaXhlcyBiaXRtYXAsIGFuZCB1cGRhdGVzIEBpbnNuLT5uZXh0X2J5dGUKKyAqIHRvIHBvaW50IHRvIHRoZSAoZmlyc3QpIG9wY29kZS4gIE5vIGVmZmVjdCBpZiBAaW5zbi0+cHJlZml4ZXMuZ290CisgKiBpcyBhbHJlYWR5IHNldC4KKyAqLwordm9pZCBpbnNuX2dldF9wcmVmaXhlcyhzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlzdHJ1Y3QgaW5zbl9maWVsZCAqcHJlZml4ZXMgPSAmaW5zbi0+cHJlZml4ZXM7CisJaW5zbl9hdHRyX3QgYXR0cjsKKwlpbnNuX2J5dGVfdCBiLCBsYjsKKwlpbnQgaSwgbmI7CisKKwlpZiAocHJlZml4ZXMtPmdvdCkKKwkJcmV0dXJuOworCisJbmIgPSAwOworCWxiID0gMDsKKwliID0gcGVla19uZXh0KGluc25fYnl0ZV90LCBpbnNuKTsKKwlhdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShiKTsKKwl3aGlsZSAoaW5hdF9pc19sZWdhY3lfcHJlZml4KGF0dHIpKSB7CisJCS8qIFNraXAgaWYgc2FtZSBwcmVmaXggKi8KKwkJZm9yIChpID0gMDsgaSA8IG5iOyBpKyspCisJCQlpZiAocHJlZml4ZXMtPmJ5dGVzW2ldID09IGIpCisJCQkJZ290byBmb3VuZDsKKwkJaWYgKG5iID09IDQpCisJCQkvKiBJbnZhbGlkIGluc3RydWN0aW9uICovCisJCQlicmVhazsKKwkJcHJlZml4ZXMtPmJ5dGVzW25iKytdID0gYjsKKwkJaWYgKGluYXRfaXNfYWRkcmVzc19zaXplX3ByZWZpeChhdHRyKSkgeworCQkJLyogYWRkcmVzcyBzaXplIHN3aXRjaGVzIDIvNCBvciA0LzggKi8KKwkJCWlmIChpbnNuLT54ODZfNjQpCisJCQkJaW5zbi0+YWRkcl9ieXRlcyBePSAxMjsKKwkJCWVsc2UKKwkJCQlpbnNuLT5hZGRyX2J5dGVzIF49IDY7CisJCX0gZWxzZSBpZiAoaW5hdF9pc19vcGVyYW5kX3NpemVfcHJlZml4KGF0dHIpKSB7CisJCQkvKiBvcHJhbmQgc2l6ZSBzd2l0Y2hlcyAyLzQgKi8KKwkJCWluc24tPm9wbmRfYnl0ZXMgXj0gNjsKKwkJfQorZm91bmQ6CisJCXByZWZpeGVzLT5uYnl0ZXMrKzsKKwkJaW5zbi0+bmV4dF9ieXRlKys7CisJCWxiID0gYjsKKwkJYiA9IHBlZWtfbmV4dChpbnNuX2J5dGVfdCwgaW5zbik7CisJCWF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGIpOworCX0KKwkvKiBTZXQgdGhlIGxhc3QgcHJlZml4ICovCisJaWYgKGxiICYmIGxiICE9IGluc24tPnByZWZpeGVzLmJ5dGVzWzNdKSB7CisJCWlmICh1bmxpa2VseShpbnNuLT5wcmVmaXhlcy5ieXRlc1szXSkpIHsKKwkJCS8qIFN3YXAgdGhlIGxhc3QgcHJlZml4ICovCisJCQliID0gaW5zbi0+cHJlZml4ZXMuYnl0ZXNbM107CisJCQlmb3IgKGkgPSAwOyBpIDwgbmI7IGkrKykKKwkJCQlpZiAocHJlZml4ZXMtPmJ5dGVzW2ldID09IGxiKQorCQkJCQlwcmVmaXhlcy0+Ynl0ZXNbaV0gPSBiOworCQl9CisJCWluc24tPnByZWZpeGVzLmJ5dGVzWzNdID0gbGI7CisJfQorCisJLyogRGVjb2RlIFJFWCBwcmVmaXggKi8KKwlpZiAoaW5zbi0+eDg2XzY0KSB7CisJCWIgPSBwZWVrX25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCQlhdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShiKTsKKwkJaWYgKGluYXRfaXNfcmV4X3ByZWZpeChhdHRyKSkgeworCQkJaW5zbi0+cmV4X3ByZWZpeC52YWx1ZSA9IGI7CisJCQlpbnNuLT5yZXhfcHJlZml4Lm5ieXRlcyA9IDE7CisJCQlpbnNuLT5uZXh0X2J5dGUrKzsKKwkJCWlmIChYODZfUkVYX1coYikpCisJCQkJLyogUkVYLlcgb3ZlcnJpZGVzIG9wbmRfc2l6ZSAqLworCQkJCWluc24tPm9wbmRfYnl0ZXMgPSA4OworCQl9CisJfQorCWluc24tPnJleF9wcmVmaXguZ290ID0gMTsKKworCS8qIERlY29kZSBWRVggcHJlZml4ICovCisJYiA9IHBlZWtfbmV4dChpbnNuX2J5dGVfdCwgaW5zbik7CisJYXR0ciA9IGluYXRfZ2V0X29wY29kZV9hdHRyaWJ1dGUoYik7CisJaWYgKGluYXRfaXNfdmV4X3ByZWZpeChhdHRyKSkgeworCQlpbnNuX2J5dGVfdCBiMiA9IHBlZWtfbmJ5dGVfbmV4dChpbnNuX2J5dGVfdCwgaW5zbiwgMSk7CisJCWlmICghaW5zbi0+eDg2XzY0KSB7CisJCQkvKgorCQkJICogSW4gMzItYml0cyBtb2RlLCBpZiB0aGUgWzc6Nl0gYml0cyAobW9kIGJpdHMgb2YKKwkJCSAqIE1vZFJNKSBvbiB0aGUgc2Vjb25kIGJ5dGUgYXJlIG5vdCAxMWIsIGl0IGlzCisJCQkgKiBMRFMgb3IgTEVTLgorCQkJICovCisJCQlpZiAoWDg2X01PRFJNX01PRChiMikgIT0gMykKKwkJCQlnb3RvIHZleF9lbmQ7CisJCX0KKwkJaW5zbi0+dmV4X3ByZWZpeC5ieXRlc1swXSA9IGI7CisJCWluc24tPnZleF9wcmVmaXguYnl0ZXNbMV0gPSBiMjsKKwkJaWYgKGluYXRfaXNfdmV4M19wcmVmaXgoYXR0cikpIHsKKwkJCWIyID0gcGVla19uYnl0ZV9uZXh0KGluc25fYnl0ZV90LCBpbnNuLCAyKTsKKwkJCWluc24tPnZleF9wcmVmaXguYnl0ZXNbMl0gPSBiMjsKKwkJCWluc24tPnZleF9wcmVmaXgubmJ5dGVzID0gMzsKKwkJCWluc24tPm5leHRfYnl0ZSArPSAzOworCQkJaWYgKGluc24tPng4Nl82NCAmJiBYODZfVkVYX1coYjIpKQorCQkJCS8qIFZFWC5XIG92ZXJyaWRlcyBvcG5kX3NpemUgKi8KKwkJCQlpbnNuLT5vcG5kX2J5dGVzID0gODsKKwkJfSBlbHNlIHsKKwkJCWluc24tPnZleF9wcmVmaXgubmJ5dGVzID0gMjsKKwkJCWluc24tPm5leHRfYnl0ZSArPSAyOworCQl9CisJfQordmV4X2VuZDoKKwlpbnNuLT52ZXhfcHJlZml4LmdvdCA9IDE7CisKKwlwcmVmaXhlcy0+Z290ID0gMTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogaW5zbl9nZXRfb3Bjb2RlIC0gY29sbGVjdCBvcGNvZGUocykKKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIFBvcHVsYXRlcyBAaW5zbi0+b3Bjb2RlLCB1cGRhdGVzIEBpbnNuLT5uZXh0X2J5dGUgdG8gcG9pbnQgcGFzdCB0aGUKKyAqIG9wY29kZSBieXRlKHMpLCBhbmQgc2V0IEBpbnNuLT5hdHRyIChleGNlcHQgZm9yIGdyb3VwcykuCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIGFueSBwcmVjZWRpbmcgKHByZWZpeCkgYnl0ZXMuCisgKiBTZXRzIEBpbnNuLT5vcGNvZGUudmFsdWUgPSBvcGNvZGUxLiAgTm8gZWZmZWN0IGlmIEBpbnNuLT5vcGNvZGUuZ290CisgKiBpcyBhbHJlYWR5IDEuCisgKi8KK3ZvaWQgaW5zbl9nZXRfb3Bjb2RlKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN0cnVjdCBpbnNuX2ZpZWxkICpvcGNvZGUgPSAmaW5zbi0+b3Bjb2RlOworCWluc25fYnl0ZV90IG9wLCBwZng7CisJaWYgKG9wY29kZS0+Z290KQorCQlyZXR1cm47CisJaWYgKCFpbnNuLT5wcmVmaXhlcy5nb3QpCisJCWluc25fZ2V0X3ByZWZpeGVzKGluc24pOworCisJLyogR2V0IGZpcnN0IG9wY29kZSAqLworCW9wID0gZ2V0X25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCW9wY29kZS0+Ynl0ZXNbMF0gPSBvcDsKKwlvcGNvZGUtPm5ieXRlcyA9IDE7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBWRVggcHJlZml4IG9yIG5vdCAqLworCWlmIChpbnNuX2lzX2F2eChpbnNuKSkgeworCQlpbnNuX2J5dGVfdCBtLCBwOworCQltID0gaW5zbl92ZXhfbV9iaXRzKGluc24pOworCQlwID0gaW5zbl92ZXhfcF9iaXRzKGluc24pOworCQlpbnNuLT5hdHRyID0gaW5hdF9nZXRfYXZ4X2F0dHJpYnV0ZShvcCwgbSwgcCk7CisJCWlmICghaW5hdF9hY2NlcHRfdmV4KGluc24tPmF0dHIpKQorCQkJaW5zbi0+YXR0ciA9IDA7CS8qIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgYmFkICovCisJCWdvdG8gZW5kOwkvKiBWRVggaGFzIG9ubHkgMSBieXRlIGZvciBvcGNvZGUgKi8KKwl9CisKKwlpbnNuLT5hdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShvcCk7CisJd2hpbGUgKGluYXRfaXNfZXNjYXBlKGluc24tPmF0dHIpKSB7CisJCS8qIEdldCBlc2NhcGVkIG9wY29kZSAqLworCQlvcCA9IGdldF9uZXh0KGluc25fYnl0ZV90LCBpbnNuKTsKKwkJb3Bjb2RlLT5ieXRlc1tvcGNvZGUtPm5ieXRlcysrXSA9IG9wOworCQlwZnggPSBpbnNuX2xhc3RfcHJlZml4KGluc24pOworCQlpbnNuLT5hdHRyID0gaW5hdF9nZXRfZXNjYXBlX2F0dHJpYnV0ZShvcCwgcGZ4LCBpbnNuLT5hdHRyKTsKKwl9CisJaWYgKGluYXRfbXVzdF92ZXgoaW5zbi0+YXR0cikpCisJCWluc24tPmF0dHIgPSAwOwkvKiBUaGlzIGluc3RydWN0aW9uIGlzIGJhZCAqLworZW5kOgorCW9wY29kZS0+Z290ID0gMTsKK30KKworLyoqCisgKiBpbnNuX2dldF9tb2RybSAtIGNvbGxlY3QgTW9kUk0gYnl0ZSwgaWYgYW55CisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBQb3B1bGF0ZXMgQGluc24tPm1vZHJtIGFuZCB1cGRhdGVzIEBpbnNuLT5uZXh0X2J5dGUgdG8gcG9pbnQgcGFzdCB0aGUKKyAqIE1vZFJNIGJ5dGUsIGlmIGFueS4gIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgdGhlIHByZWNlZGluZyBieXRlcworICogKHByZWZpeGVzIGFuZCBvcGNvZGUocykpLiAgTm8gZWZmZWN0IGlmIEBpbnNuLT5tb2RybS5nb3QgaXMgYWxyZWFkeSAxLgorICovCit2b2lkIGluc25fZ2V0X21vZHJtKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN0cnVjdCBpbnNuX2ZpZWxkICptb2RybSA9ICZpbnNuLT5tb2RybTsKKwlpbnNuX2J5dGVfdCBwZngsIG1vZDsKKwlpZiAobW9kcm0tPmdvdCkKKwkJcmV0dXJuOworCWlmICghaW5zbi0+b3Bjb2RlLmdvdCkKKwkJaW5zbl9nZXRfb3Bjb2RlKGluc24pOworCisJaWYgKGluYXRfaGFzX21vZHJtKGluc24tPmF0dHIpKSB7CisJCW1vZCA9IGdldF9uZXh0KGluc25fYnl0ZV90LCBpbnNuKTsKKwkJbW9kcm0tPnZhbHVlID0gbW9kOworCQltb2RybS0+bmJ5dGVzID0gMTsKKwkJaWYgKGluYXRfaXNfZ3JvdXAoaW5zbi0+YXR0cikpIHsKKwkJCXBmeCA9IGluc25fbGFzdF9wcmVmaXgoaW5zbik7CisJCQlpbnNuLT5hdHRyID0gaW5hdF9nZXRfZ3JvdXBfYXR0cmlidXRlKG1vZCwgcGZ4LAorCQkJCQkJCSAgICAgIGluc24tPmF0dHIpOworCQl9CisJfQorCisJaWYgKGluc24tPng4Nl82NCAmJiBpbmF0X2lzX2ZvcmNlNjQoaW5zbi0+YXR0cikpCisJCWluc24tPm9wbmRfYnl0ZXMgPSA4OworCW1vZHJtLT5nb3QgPSAxOworfQorCisKKy8qKgorICogaW5zbl9yaXBfcmVsYXRpdmUoKSAtIERvZXMgaW5zdHJ1Y3Rpb24gdXNlIFJJUC1yZWxhdGl2ZSBhZGRyZXNzaW5nIG1vZGU/CisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIHRoZSBpbnN0cnVjdGlvbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogTW9kUk0gYnl0ZS4gIE5vIGVmZmVjdCBpZiBAaW5zbi0+eDg2XzY0IGlzIDAuCisgKi8KK2ludCBpbnNuX3JpcF9yZWxhdGl2ZShzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlzdHJ1Y3QgaW5zbl9maWVsZCAqbW9kcm0gPSAmaW5zbi0+bW9kcm07CisKKwlpZiAoIWluc24tPng4Nl82NCkKKwkJcmV0dXJuIDA7CisJaWYgKCFtb2RybS0+Z290KQorCQlpbnNuX2dldF9tb2RybShpbnNuKTsKKwkvKgorCSAqIEZvciByaXAtcmVsYXRpdmUgaW5zdHJ1Y3Rpb25zLCB0aGUgbW9kIGZpZWxkICh0b3AgMiBiaXRzKQorCSAqIGlzIHplcm8gYW5kIHRoZSByL20gZmllbGQgKGJvdHRvbSAzIGJpdHMpIGlzIDB4NS4KKwkgKi8KKwlyZXR1cm4gKG1vZHJtLT5uYnl0ZXMgJiYgKG1vZHJtLT52YWx1ZSAmIDB4YzcpID09IDB4NSk7Cit9CisKKy8qKgorICogaW5zbl9nZXRfc2liKCkgLSBHZXQgdGhlIFNJQiBieXRlIG9mIGluc3RydWN0aW9uCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIHRoZSBpbnN0cnVjdGlvbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogTW9kUk0gYnl0ZS4KKyAqLwordm9pZCBpbnNuX2dldF9zaWIoc3RydWN0IGluc24gKmluc24pCit7CisJaW5zbl9ieXRlX3QgbW9kcm07CisKKwlpZiAoaW5zbi0+c2liLmdvdCkKKwkJcmV0dXJuOworCWlmICghaW5zbi0+bW9kcm0uZ290KQorCQlpbnNuX2dldF9tb2RybShpbnNuKTsKKwlpZiAoaW5zbi0+bW9kcm0ubmJ5dGVzKSB7CisJCW1vZHJtID0gKGluc25fYnl0ZV90KWluc24tPm1vZHJtLnZhbHVlOworCQlpZiAoaW5zbi0+YWRkcl9ieXRlcyAhPSAyICYmCisJCSAgICBYODZfTU9EUk1fTU9EKG1vZHJtKSAhPSAzICYmIFg4Nl9NT0RSTV9STShtb2RybSkgPT0gNCkgeworCQkJaW5zbi0+c2liLnZhbHVlID0gZ2V0X25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCQkJaW5zbi0+c2liLm5ieXRlcyA9IDE7CisJCX0KKwl9CisJaW5zbi0+c2liLmdvdCA9IDE7Cit9CisKKworLyoqCisgKiBpbnNuX2dldF9kaXNwbGFjZW1lbnQoKSAtIEdldCB0aGUgZGlzcGxhY2VtZW50IG9mIGluc3RydWN0aW9uCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIHRoZSBpbnN0cnVjdGlvbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogU0lCIGJ5dGUuCisgKiBEaXNwbGFjZW1lbnQgdmFsdWUgaXMgc2lnbi1leHBhbmRlZC4KKyAqLwordm9pZCBpbnNuX2dldF9kaXNwbGFjZW1lbnQoc3RydWN0IGluc24gKmluc24pCit7CisJaW5zbl9ieXRlX3QgbW9kLCBybSwgYmFzZTsKKworCWlmIChpbnNuLT5kaXNwbGFjZW1lbnQuZ290KQorCQlyZXR1cm47CisJaWYgKCFpbnNuLT5zaWIuZ290KQorCQlpbnNuX2dldF9zaWIoaW5zbik7CisJaWYgKGluc24tPm1vZHJtLm5ieXRlcykgeworCQkvKgorCQkgKiBJbnRlcnByZXRpbmcgdGhlIG1vZHJtIGJ5dGU6CisJCSAqIG1vZCA9IDAwIC0gbm8gZGlzcGxhY2VtZW50IGZpZWxkcyAoZXhjZXB0aW9ucyBiZWxvdykKKwkJICogbW9kID0gMDEgLSAxLWJ5dGUgZGlzcGxhY2VtZW50IGZpZWxkCisJCSAqIG1vZCA9IDEwIC0gZGlzcGxhY2VtZW50IGZpZWxkIGlzIDQgYnl0ZXMsIG9yIDIgYnl0ZXMgaWYKKwkJICogCWFkZHJlc3Mgc2l6ZSA9IDIgKDB4NjcgcHJlZml4IGluIDMyLWJpdCBtb2RlKQorCQkgKiBtb2QgPSAxMSAtIG5vIG1lbW9yeSBvcGVyYW5kCisJCSAqCisJCSAqIElmIGFkZHJlc3Mgc2l6ZSA9IDIuLi4KKwkJICogbW9kID0gMDAsIHIvbSA9IDExMCAtIGRpc3BsYWNlbWVudCBmaWVsZCBpcyAyIGJ5dGVzCisJCSAqCisJCSAqIElmIGFkZHJlc3Mgc2l6ZSAhPSAyLi4uCisJCSAqIG1vZCAhPSAxMSwgci9tID0gMTAwIC0gU0lCIGJ5dGUgZXhpc3RzCisJCSAqIG1vZCA9IDAwLCBTSUIgYmFzZSA9IDEwMSAtIGRpc3BsYWNlbWVudCBmaWVsZCBpcyA0IGJ5dGVzCisJCSAqIG1vZCA9IDAwLCByL20gPSAxMDEgLSByaXAtcmVsYXRpdmUgYWRkcmVzc2luZywgZGlzcGxhY2VtZW50CisJCSAqIAlmaWVsZCBpcyA0IGJ5dGVzCisJCSAqLworCQltb2QgPSBYODZfTU9EUk1fTU9EKGluc24tPm1vZHJtLnZhbHVlKTsKKwkJcm0gPSBYODZfTU9EUk1fUk0oaW5zbi0+bW9kcm0udmFsdWUpOworCQliYXNlID0gWDg2X1NJQl9CQVNFKGluc24tPnNpYi52YWx1ZSk7CisJCWlmIChtb2QgPT0gMykKKwkJCWdvdG8gb3V0OworCQlpZiAobW9kID09IDEpIHsKKwkJCWluc24tPmRpc3BsYWNlbWVudC52YWx1ZSA9IGdldF9uZXh0KGNoYXIsIGluc24pOworCQkJaW5zbi0+ZGlzcGxhY2VtZW50Lm5ieXRlcyA9IDE7CisJCX0gZWxzZSBpZiAoaW5zbi0+YWRkcl9ieXRlcyA9PSAyKSB7CisJCQlpZiAoKG1vZCA9PSAwICYmIHJtID09IDYpIHx8IG1vZCA9PSAyKSB7CisJCQkJaW5zbi0+ZGlzcGxhY2VtZW50LnZhbHVlID0KKwkJCQkJIGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJCQlpbnNuLT5kaXNwbGFjZW1lbnQubmJ5dGVzID0gMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgobW9kID09IDAgJiYgcm0gPT0gNSkgfHwgbW9kID09IDIgfHwKKwkJCSAgICAobW9kID09IDAgJiYgYmFzZSA9PSA1KSkgeworCQkJCWluc24tPmRpc3BsYWNlbWVudC52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCQkJaW5zbi0+ZGlzcGxhY2VtZW50Lm5ieXRlcyA9IDQ7CisJCQl9CisJCX0KKwl9CitvdXQ6CisJaW5zbi0+ZGlzcGxhY2VtZW50LmdvdCA9IDE7Cit9CisKKy8qIERlY29kZSBtb2Zmc2V0MTYvMzIvNjQgKi8KK3N0YXRpYyB2b2lkIF9fZ2V0X21vZmZzZXQoc3RydWN0IGluc24gKmluc24pCit7CisJc3dpdGNoIChpbnNuLT5hZGRyX2J5dGVzKSB7CisJY2FzZSAyOgorCQlpbnNuLT5tb2Zmc2V0MS52YWx1ZSA9IGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJaW5zbi0+bW9mZnNldDEubmJ5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpbnNuLT5tb2Zmc2V0MS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPm1vZmZzZXQxLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaW5zbi0+bW9mZnNldDEudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5tb2Zmc2V0MS5uYnl0ZXMgPSA0OworCQlpbnNuLT5tb2Zmc2V0Mi52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPm1vZmZzZXQyLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCX0KKwlpbnNuLT5tb2Zmc2V0MS5nb3QgPSBpbnNuLT5tb2Zmc2V0Mi5nb3QgPSAxOworfQorCisvKiBEZWNvZGUgaW1tIHYzMihJeikgKi8KK3N0YXRpYyB2b2lkIF9fZ2V0X2ltbXYzMihzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlzd2l0Y2ggKGluc24tPm9wbmRfYnl0ZXMpIHsKKwljYXNlIDI6CisJCWluc24tPmltbWVkaWF0ZS52YWx1ZSA9IGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwljYXNlIDg6CisJCWluc24tPmltbWVkaWF0ZS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZS5uYnl0ZXMgPSA0OworCQlicmVhazsKKwl9Cit9CisKKy8qIERlY29kZSBpbW0gdjY0KEl2L092KSAqLworc3RhdGljIHZvaWQgX19nZXRfaW1tdihzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlzd2l0Y2ggKGluc24tPm9wbmRfYnl0ZXMpIHsKKwljYXNlIDI6CisJCWluc24tPmltbWVkaWF0ZTEudmFsdWUgPSBnZXRfbmV4dChzaG9ydCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZTEubmJ5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpbnNuLT5pbW1lZGlhdGUxLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMS5uYnl0ZXMgPSA0OworCQlicmVhazsKKwljYXNlIDg6CisJCWluc24tPmltbWVkaWF0ZTEudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUxLm5ieXRlcyA9IDQ7CisJCWluc24tPmltbWVkaWF0ZTIudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUyLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCX0KKwlpbnNuLT5pbW1lZGlhdGUxLmdvdCA9IGluc24tPmltbWVkaWF0ZTIuZ290ID0gMTsKK30KKworLyogRGVjb2RlIHB0cjE2OjE2LzMyKEFwKSAqLworc3RhdGljIHZvaWQgX19nZXRfaW1tcHRyKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN3aXRjaCAoaW5zbi0+b3BuZF9ieXRlcykgeworCWNhc2UgMjoKKwkJaW5zbi0+aW1tZWRpYXRlMS52YWx1ZSA9IGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMS5uYnl0ZXMgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCWluc24tPmltbWVkaWF0ZTEudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUxLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJLyogcHRyMTY6NjQgaXMgbm90IGV4aXN0IChubyBzZWdtZW50KSAqLworCQlyZXR1cm47CisJfQorCWluc24tPmltbWVkaWF0ZTIudmFsdWUgPSBnZXRfbmV4dCh1bnNpZ25lZCBzaG9ydCwgaW5zbik7CisJaW5zbi0+aW1tZWRpYXRlMi5uYnl0ZXMgPSAyOworCWluc24tPmltbWVkaWF0ZTEuZ290ID0gaW5zbi0+aW1tZWRpYXRlMi5nb3QgPSAxOworfQorCisvKioKKyAqIGluc25fZ2V0X2ltbWVkaWF0ZSgpIC0gR2V0IHRoZSBpbW1lZGlhdGVzIG9mIGluc3RydWN0aW9uCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIHRoZSBpbnN0cnVjdGlvbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogZGlzcGxhY2VtZW50IGJ5dGVzLgorICogQmFzaWNhbGx5LCBtb3N0IG9mIGltbWVkaWF0ZXMgYXJlIHNpZ24tZXhwYW5kZWQuIFVuc2lnbmVkLXZhbHVlIGNhbiBiZQorICogZ2V0IGJ5IGJpdCBtYXNraW5nIHdpdGggKCgxIDw8IChuYnl0ZXMgKiA4KSkgLSAxKQorICovCit2b2lkIGluc25fZ2V0X2ltbWVkaWF0ZShzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlpZiAoaW5zbi0+aW1tZWRpYXRlLmdvdCkKKwkJcmV0dXJuOworCWlmICghaW5zbi0+ZGlzcGxhY2VtZW50LmdvdCkKKwkJaW5zbl9nZXRfZGlzcGxhY2VtZW50KGluc24pOworCisJaWYgKGluYXRfaGFzX21vZmZzZXQoaW5zbi0+YXR0cikpIHsKKwkJX19nZXRfbW9mZnNldChpbnNuKTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghaW5hdF9oYXNfaW1tZWRpYXRlKGluc24tPmF0dHIpKQorCQkvKiBubyBpbW1lZGlhdGVzICovCisJCWdvdG8gZG9uZTsKKworCXN3aXRjaCAoaW5hdF9pbW1lZGlhdGVfc2l6ZShpbnNuLT5hdHRyKSkgeworCWNhc2UgSU5BVF9JTU1fQllURToKKwkJaW5zbi0+aW1tZWRpYXRlLnZhbHVlID0gZ2V0X25leHQoY2hhciwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZS5uYnl0ZXMgPSAxOworCQlicmVhazsKKwljYXNlIElOQVRfSU1NX1dPUkQ6CisJCWluc24tPmltbWVkaWF0ZS52YWx1ZSA9IGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgSU5BVF9JTU1fRFdPUkQ6CisJCWluc24tPmltbWVkaWF0ZS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZS5uYnl0ZXMgPSA0OworCQlicmVhazsKKwljYXNlIElOQVRfSU1NX1FXT1JEOgorCQlpbnNuLT5pbW1lZGlhdGUxLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMS5uYnl0ZXMgPSA0OworCQlpbnNuLT5pbW1lZGlhdGUyLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMi5uYnl0ZXMgPSA0OworCQlicmVhazsKKwljYXNlIElOQVRfSU1NX1BUUjoKKwkJX19nZXRfaW1tcHRyKGluc24pOworCQlicmVhazsKKwljYXNlIElOQVRfSU1NX1ZXT1JEMzI6CisJCV9fZ2V0X2ltbXYzMihpbnNuKTsKKwkJYnJlYWs7CisJY2FzZSBJTkFUX0lNTV9WV09SRDoKKwkJX19nZXRfaW1tdihpbnNuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChpbmF0X2hhc19zZWNvbmRfaW1tZWRpYXRlKGluc24tPmF0dHIpKSB7CisJCWluc24tPmltbWVkaWF0ZTIudmFsdWUgPSBnZXRfbmV4dChjaGFyLCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMi5uYnl0ZXMgPSAxOworCX0KK2RvbmU6CisJaW5zbi0+aW1tZWRpYXRlLmdvdCA9IDE7Cit9CisKKy8qKgorICogaW5zbl9nZXRfbGVuZ3RoKCkgLSBHZXQgdGhlIGxlbmd0aCBvZiBpbnN0cnVjdGlvbgorICogQGluc246CSZzdHJ1Y3QgaW5zbiBjb250YWluaW5nIGluc3RydWN0aW9uCisgKgorICogSWYgbmVjZXNzYXJ5LCBmaXJzdCBjb2xsZWN0cyB0aGUgaW5zdHJ1Y3Rpb24gdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUKKyAqIGltbWVkaWF0ZXMgYnl0ZXMuCisgKi8KK3ZvaWQgaW5zbl9nZXRfbGVuZ3RoKHN0cnVjdCBpbnNuICppbnNuKQoreworCWlmIChpbnNuLT5sZW5ndGgpCisJCXJldHVybjsKKwlpZiAoIWluc24tPmltbWVkaWF0ZS5nb3QpCisJCWluc25fZ2V0X2ltbWVkaWF0ZShpbnNuKTsKKwlpbnNuLT5sZW5ndGggPSAodW5zaWduZWQgY2hhcikoKHVuc2lnbmVkIGxvbmcpaW5zbi0+bmV4dF9ieXRlCisJCQkJICAgICAtICh1bnNpZ25lZCBsb25nKWluc24tPmthZGRyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi94ODYtb3Bjb2RlLW1hcC50eHQgYi9hcmNoL3g4Ni9saWIveDg2LW9wY29kZS1tYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTNkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIveDg2LW9wY29kZS1tYXAudHh0CkBAIC0wLDAgKzEsODkzIEBACisjIHg4NiBPcGNvZGUgTWFwcworIworIzxPcGNvZGUgbWFwcz4KKyMgVGFibGU6IHRhYmxlLW5hbWUKKyMgUmVmZXJyZXI6IGVzY2FwZWQtbmFtZQorIyBBVlhjb2RlOiBhdngtY29kZQorIyBvcGNvZGU6IG1uZW1vbmljfEdycFhYWCBbb3BlcmFuZDFbLG9wZXJhbmQyLi4uXV0gWyhleHRyYTEpWywoZXh0cmEyKS4uLl0gW3wgMm5kLW1uZW1vbmljIC4uLl0KKyMgKG9yKQorIyBvcGNvZGU6IGVzY2FwZSAjIGVzY2FwZWQtbmFtZQorIyBFbmRUYWJsZQorIworIzxncm91cCBtYXBzPgorIyBHcnBUYWJsZTogR3JwWFhYCisjIHJlZzogIG1uZW1vbmljIFtvcGVyYW5kMVssb3BlcmFuZDIuLi5dXSBbKGV4dHJhMSlbLChleHRyYTIpLi4uXSBbfCAybmQtbW5lbW9uaWMgLi4uXQorIyBFbmRUYWJsZQorIworIyBBVlggU3VwZXJzY3JpcHRzCisjICAoVkVYKTogdGhpcyBvcGNvZGUgY2FuIGFjY2VwdCBWRVggcHJlZml4LgorIyAgKG9WRVgpOiB0aGlzIG9wY29kZSByZXF1aXJlcyBWRVggcHJlZml4LgorIyAgKG8xMjgpOiB0aGlzIG9wY29kZSBvbmx5IHN1cHBvcnRzIDEyOGJpdCBWRVguCisjICAobzI1Nik6IHRoaXMgb3Bjb2RlIG9ubHkgc3VwcG9ydHMgMjU2Yml0IFZFWC4KKyMKKworVGFibGU6IG9uZSBieXRlIG9wY29kZQorUmVmZXJyZXI6CitBVlhjb2RlOgorIyAweDAwIC0gMHgwZgorMDA6IEFERCBFYixHYgorMDE6IEFERCBFdixHdgorMDI6IEFERCBHYixFYgorMDM6IEFERCBHdixFdgorMDQ6IEFERCBBTCxJYgorMDU6IEFERCByQVgsSXoKKzA2OiBQVVNIIEVTIChpNjQpCiswNzogUE9QIEVTIChpNjQpCiswODogT1IgRWIsR2IKKzA5OiBPUiBFdixHdgorMGE6IE9SIEdiLEViCiswYjogT1IgR3YsRXYKKzBjOiBPUiBBTCxJYgorMGQ6IE9SIHJBWCxJegorMGU6IFBVU0ggQ1MgKGk2NCkKKzBmOiBlc2NhcGUgIyAyLWJ5dGUgZXNjYXBlCisjIDB4MTAgLSAweDFmCisxMDogQURDIEViLEdiCisxMTogQURDIEV2LEd2CisxMjogQURDIEdiLEViCisxMzogQURDIEd2LEV2CisxNDogQURDIEFMLEliCisxNTogQURDIHJBWCxJegorMTY6IFBVU0ggU1MgKGk2NCkKKzE3OiBQT1AgU1MgKGk2NCkKKzE4OiBTQkIgRWIsR2IKKzE5OiBTQkIgRXYsR3YKKzFhOiBTQkIgR2IsRWIKKzFiOiBTQkIgR3YsRXYKKzFjOiBTQkIgQUwsSWIKKzFkOiBTQkIgckFYLEl6CisxZTogUFVTSCBEUyAoaTY0KQorMWY6IFBPUCBEUyAoaTY0KQorIyAweDIwIC0gMHgyZgorMjA6IEFORCBFYixHYgorMjE6IEFORCBFdixHdgorMjI6IEFORCBHYixFYgorMjM6IEFORCBHdixFdgorMjQ6IEFORCBBTCxJYgorMjU6IEFORCByQXgsSXoKKzI2OiBTRUc9RVMgKFByZWZpeCkKKzI3OiBEQUEgKGk2NCkKKzI4OiBTVUIgRWIsR2IKKzI5OiBTVUIgRXYsR3YKKzJhOiBTVUIgR2IsRWIKKzJiOiBTVUIgR3YsRXYKKzJjOiBTVUIgQUwsSWIKKzJkOiBTVUIgckFYLEl6CisyZTogU0VHPUNTIChQcmVmaXgpCisyZjogREFTIChpNjQpCisjIDB4MzAgLSAweDNmCiszMDogWE9SIEViLEdiCiszMTogWE9SIEV2LEd2CiszMjogWE9SIEdiLEViCiszMzogWE9SIEd2LEV2CiszNDogWE9SIEFMLEliCiszNTogWE9SIHJBWCxJegorMzY6IFNFRz1TUyAoUHJlZml4KQorMzc6IEFBQSAoaTY0KQorMzg6IENNUCBFYixHYgorMzk6IENNUCBFdixHdgorM2E6IENNUCBHYixFYgorM2I6IENNUCBHdixFdgorM2M6IENNUCBBTCxJYgorM2Q6IENNUCByQVgsSXoKKzNlOiBTRUc9RFMgKFByZWZpeCkKKzNmOiBBQVMgKGk2NCkKKyMgMHg0MCAtIDB4NGYKKzQwOiBJTkMgZUFYIChpNjQpIHwgUkVYIChvNjQpCis0MTogSU5DIGVDWCAoaTY0KSB8IFJFWC5CIChvNjQpCis0MjogSU5DIGVEWCAoaTY0KSB8IFJFWC5YIChvNjQpCis0MzogSU5DIGVCWCAoaTY0KSB8IFJFWC5YQiAobzY0KQorNDQ6IElOQyBlU1AgKGk2NCkgfCBSRVguUiAobzY0KQorNDU6IElOQyBlQlAgKGk2NCkgfCBSRVguUkIgKG82NCkKKzQ2OiBJTkMgZVNJIChpNjQpIHwgUkVYLlJYIChvNjQpCis0NzogSU5DIGVESSAoaTY0KSB8IFJFWC5SWEIgKG82NCkKKzQ4OiBERUMgZUFYIChpNjQpIHwgUkVYLlcgKG82NCkKKzQ5OiBERUMgZUNYIChpNjQpIHwgUkVYLldCIChvNjQpCis0YTogREVDIGVEWCAoaTY0KSB8IFJFWC5XWCAobzY0KQorNGI6IERFQyBlQlggKGk2NCkgfCBSRVguV1hCIChvNjQpCis0YzogREVDIGVTUCAoaTY0KSB8IFJFWC5XUiAobzY0KQorNGQ6IERFQyBlQlAgKGk2NCkgfCBSRVguV1JCIChvNjQpCis0ZTogREVDIGVTSSAoaTY0KSB8IFJFWC5XUlggKG82NCkKKzRmOiBERUMgZURJIChpNjQpIHwgUkVYLldSWEIgKG82NCkKKyMgMHg1MCAtIDB4NWYKKzUwOiBQVVNIIHJBWC9yOCAoZDY0KQorNTE6IFBVU0ggckNYL3I5IChkNjQpCis1MjogUFVTSCByRFgvcjEwIChkNjQpCis1MzogUFVTSCByQlgvcjExIChkNjQpCis1NDogUFVTSCByU1AvcjEyIChkNjQpCis1NTogUFVTSCByQlAvcjEzIChkNjQpCis1NjogUFVTSCByU0kvcjE0IChkNjQpCis1NzogUFVTSCByREkvcjE1IChkNjQpCis1ODogUE9QIHJBWC9yOCAoZDY0KQorNTk6IFBPUCByQ1gvcjkgKGQ2NCkKKzVhOiBQT1AgckRYL3IxMCAoZDY0KQorNWI6IFBPUCByQlgvcjExIChkNjQpCis1YzogUE9QIHJTUC9yMTIgKGQ2NCkKKzVkOiBQT1AgckJQL3IxMyAoZDY0KQorNWU6IFBPUCByU0kvcjE0IChkNjQpCis1ZjogUE9QIHJESS9yMTUgKGQ2NCkKKyMgMHg2MCAtIDB4NmYKKzYwOiBQVVNIQS9QVVNIQUQgKGk2NCkKKzYxOiBQT1BBL1BPUEFEIChpNjQpCis2MjogQk9VTkQgR3YsTWEgKGk2NCkKKzYzOiBBUlBMIEV3LEd3IChpNjQpIHwgTU9WU1hEIEd2LEV2IChvNjQpCis2NDogU0VHPUZTIChQcmVmaXgpCis2NTogU0VHPUdTIChQcmVmaXgpCis2NjogT3BlcmFuZC1TaXplIChQcmVmaXgpCis2NzogQWRkcmVzcy1TaXplIChQcmVmaXgpCis2ODogUFVTSCBJeiAoZDY0KQorNjk6IElNVUwgR3YsRXYsSXoKKzZhOiBQVVNIIEliIChkNjQpCis2YjogSU1VTCBHdixFdixJYgorNmM6IElOUy9JTlNCIFliLERYCis2ZDogSU5TL0lOU1cvSU5TRCBZeixEWAorNmU6IE9VVFMvT1VUU0IgRFgsWGIKKzZmOiBPVVRTL09VVFNXL09VVFNEIERYLFh6CisjIDB4NzAgLSAweDdmCis3MDogSk8gSmIKKzcxOiBKTk8gSmIKKzcyOiBKQi9KTkFFL0pDIEpiCis3MzogSk5CL0pBRS9KTkMgSmIKKzc0OiBKWi9KRSBKYgorNzU6IEpOWi9KTkUgSmIKKzc2OiBKQkUvSk5BIEpiCis3NzogSk5CRS9KQSBKYgorNzg6IEpTIEpiCis3OTogSk5TIEpiCis3YTogSlAvSlBFIEpiCis3YjogSk5QL0pQTyBKYgorN2M6IEpML0pOR0UgSmIKKzdkOiBKTkwvSkdFIEpiCis3ZTogSkxFL0pORyBKYgorN2Y6IEpOTEUvSkcgSmIKKyMgMHg4MCAtIDB4OGYKKzgwOiBHcnAxIEViLEliICgxQSkKKzgxOiBHcnAxIEV2LEl6ICgxQSkKKzgyOiBHcnAxIEViLEliICgxQSksKGk2NCkKKzgzOiBHcnAxIEV2LEliICgxQSkKKzg0OiBURVNUIEViLEdiCis4NTogVEVTVCBFdixHdgorODY6IFhDSEcgRWIsR2IKKzg3OiBYQ0hHIEV2LEd2Cis4ODogTU9WIEViLEdiCis4OTogTU9WIEV2LEd2Cis4YTogTU9WIEdiLEViCis4YjogTU9WIEd2LEV2Cis4YzogTU9WIEV2LFN3Cis4ZDogTEVBIEd2LE0KKzhlOiBNT1YgU3csRXcKKzhmOiBHcnAxQSAoMUEpIHwgUE9QIEV2IChkNjQpCisjIDB4OTAgLSAweDlmCis5MDogTk9QIHwgUEFVU0UgKEYzKSB8IFhDSEcgcjgsckFYCis5MTogWENIRyByQ1gvcjksckFYCis5MjogWENIRyByRFgvcjEwLHJBWAorOTM6IFhDSEcgckJYL3IxMSxyQVgKKzk0OiBYQ0hHIHJTUC9yMTIsckFYCis5NTogWENIRyByQlAvcjEzLHJBWAorOTY6IFhDSEcgclNJL3IxNCxyQVgKKzk3OiBYQ0hHIHJESS9yMTUsckFYCis5ODogQ0JXL0NXREUvQ0RRRQorOTk6IENXRC9DRFEvQ1FPCis5YTogQ0FMTEYgQXAgKGk2NCkKKzliOiBGV0FJVC9XQUlUCis5YzogUFVTSEYvRC9RIEZ2IChkNjQpCis5ZDogUE9QRi9EL1EgRnYgKGQ2NCkKKzllOiBTQUhGCis5ZjogTEFIRgorIyAweGEwIC0gMHhhZgorYTA6IE1PViBBTCxPYgorYTE6IE1PViByQVgsT3YKK2EyOiBNT1YgT2IsQUwKK2EzOiBNT1YgT3YsckFYCithNDogTU9WUy9CIFhiLFliCithNTogTU9WUy9XL0QvUSBYdixZdgorYTY6IENNUFMvQiBYYixZYgorYTc6IENNUFMvVy9EIFh2LFl2CithODogVEVTVCBBTCxJYgorYTk6IFRFU1QgckFYLEl6CithYTogU1RPUy9CIFliLEFMCithYjogU1RPUy9XL0QvUSBZdixyQVgKK2FjOiBMT0RTL0IgQUwsWGIKK2FkOiBMT0RTL1cvRC9RIHJBWCxYdgorYWU6IFNDQVMvQiBBTCxZYgorYWY6IFNDQVMvVy9EL1EgckFYLFh2CisjIDB4YjAgLSAweGJmCitiMDogTU9WIEFML1I4TCxJYgorYjE6IE1PViBDTC9SOUwsSWIKK2IyOiBNT1YgREwvUjEwTCxJYgorYjM6IE1PViBCTC9SMTFMLEliCitiNDogTU9WIEFIL1IxMkwsSWIKK2I1OiBNT1YgQ0gvUjEzTCxJYgorYjY6IE1PViBESC9SMTRMLEliCitiNzogTU9WIEJIL1IxNUwsSWIKK2I4OiBNT1YgckFYL3I4LEl2CitiOTogTU9WIHJDWC9yOSxJdgorYmE6IE1PViByRFgvcjEwLEl2CitiYjogTU9WIHJCWC9yMTEsSXYKK2JjOiBNT1YgclNQL3IxMixJdgorYmQ6IE1PViByQlAvcjEzLEl2CitiZTogTU9WIHJTSS9yMTQsSXYKK2JmOiBNT1YgckRJL3IxNSxJdgorIyAweGMwIC0gMHhjZgorYzA6IEdycDIgRWIsSWIgKDFBKQorYzE6IEdycDIgRXYsSWIgKDFBKQorYzI6IFJFVE4gSXcgKGY2NCkKK2MzOiBSRVROCitjNDogTEVTIEd6LE1wIChpNjQpIHwgM2J5dGVzLVZFWCAoUHJlZml4KQorYzU6IExEUyBHeixNcCAoaTY0KSB8IDJieXRlcy1WRVggKFByZWZpeCkKK2M2OiBHcnAxMSBFYixJYiAoMUEpCitjNzogR3JwMTEgRXYsSXogKDFBKQorYzg6IEVOVEVSIEl3LEliCitjOTogTEVBVkUgKGQ2NCkKK2NhOiBSRVRGIEl3CitjYjogUkVURgorY2M6IElOVDMKK2NkOiBJTlQgSWIKK2NlOiBJTlRPIChpNjQpCitjZjogSVJFVC9EL1EKKyMgMHhkMCAtIDB4ZGYKK2QwOiBHcnAyIEViLDEgKDFBKQorZDE6IEdycDIgRXYsMSAoMUEpCitkMjogR3JwMiBFYixDTCAoMUEpCitkMzogR3JwMiBFdixDTCAoMUEpCitkNDogQUFNIEliIChpNjQpCitkNTogQUFEIEliIChpNjQpCitkNjoKK2Q3OiBYTEFUL1hMQVRCCitkODogRVNDCitkOTogRVNDCitkYTogRVNDCitkYjogRVNDCitkYzogRVNDCitkZDogRVNDCitkZTogRVNDCitkZjogRVNDCisjIDB4ZTAgLSAweGVmCitlMDogTE9PUE5FL0xPT1BOWiBKYiAoZjY0KQorZTE6IExPT1BFL0xPT1BaIEpiIChmNjQpCitlMjogTE9PUCBKYiAoZjY0KQorZTM6IEpyQ1haIEpiIChmNjQpCitlNDogSU4gQUwsSWIKK2U1OiBJTiBlQVgsSWIKK2U2OiBPVVQgSWIsQUwKK2U3OiBPVVQgSWIsZUFYCitlODogQ0FMTCBKeiAoZjY0KQorZTk6IEpNUC1uZWFyIEp6IChmNjQpCitlYTogSk1QLWZhciBBcCAoaTY0KQorZWI6IEpNUC1zaG9ydCBKYiAoZjY0KQorZWM6IElOIEFMLERYCitlZDogSU4gZUFYLERYCitlZTogT1VUIERYLEFMCitlZjogT1VUIERYLGVBWAorIyAweGYwIC0gMHhmZgorZjA6IExPQ0sgKFByZWZpeCkKK2YxOgorZjI6IFJFUE5FIChQcmVmaXgpCitmMzogUkVQL1JFUEUgKFByZWZpeCkKK2Y0OiBITFQKK2Y1OiBDTUMKK2Y2OiBHcnAzXzEgRWIgKDFBKQorZjc6IEdycDNfMiBFdiAoMUEpCitmODogQ0xDCitmOTogU1RDCitmYTogQ0xJCitmYjogU1RJCitmYzogQ0xECitmZDogU1RECitmZTogR3JwNCAoMUEpCitmZjogR3JwNSAoMUEpCitFbmRUYWJsZQorCitUYWJsZTogMi1ieXRlIG9wY29kZSAoMHgwZikKK1JlZmVycmVyOiAyLWJ5dGUgZXNjYXBlCitBVlhjb2RlOiAxCisjIDB4MGYgMHgwMC0weDBmCiswMDogR3JwNiAoMUEpCiswMTogR3JwNyAoMUEpCiswMjogTEFSIEd2LEV3CiswMzogTFNMIEd2LEV3CiswNDoKKzA1OiBTWVNDQUxMIChvNjQpCiswNjogQ0xUUworMDc6IFNZU1JFVCAobzY0KQorMDg6IElOVkQKKzA5OiBXQklOVkQKKzBhOgorMGI6IFVEMiAoMUIpCiswYzoKKzBkOiBOT1AgRXYgfCBHcnBQCiswZTogRkVNTVMKKyMgM0ROb3chIHVzZXMgdGhlIGxhc3QgaW1tIGJ5dGUgYXMgb3Bjb2RlIGV4dGVuc2lvbi4KKzBmOiAzRE5vdyEgUHEsUXEsSWIKKyMgMHgwZiAweDEwLTB4MWYKKzEwOiBtb3Z1cHMgVnBzLFdwcyAoVkVYKSB8IG1vdnNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBtb3Z1cGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgbW92c2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorMTE6IG1vdnVwcyBXcHMsVnBzIChWRVgpIHwgbW92c3MgV3NzLFZzcyAoRjMpLChWRVgpLChvMTI4KSB8IG1vdnVwZCBXcGQsVnBkICg2NiksKFZFWCkgfCBtb3ZzZCBXc2QsVnNkIChGMiksKFZFWCksKG8xMjgpCisxMjogbW92bHBzIFZxLE1xIChWRVgpLChvMTI4KSB8IG1vdmxwZCBWcSxNcSAoNjYpLChWRVgpLChvMTI4KSB8IG1vdmhscHMgVnEsVXEgKFZFWCksKG8xMjgpIHwgbW92ZGR1cCBWcSxXcSAoRjIpLChWRVgpIHwgbW92c2xkdXAgVnEsV3EgKEYzKSwoVkVYKQorMTM6IG1wdmxwcyBNcSxWcSAoVkVYKSwobzEyOCkgfCBtb3ZscGQgTXEsVnEgKDY2KSwoVkVYKSwobzEyOCkKKzE0OiB1bnBja2xwcyBWcHMsV3EgKFZFWCkgfCB1bnBja2xwZCBWcGQsV3EgKDY2KSwoVkVYKQorMTU6IHVucGNraHBzIFZwcyxXcSAoVkVYKSB8IHVucGNraHBkIFZwZCxXcSAoNjYpLChWRVgpCisxNjogbW92aHBzIFZxLE1xIChWRVgpLChvMTI4KSB8IG1vdmhwZCBWcSxNcSAoNjYpLChWRVgpLChvMTI4KSB8IG1vdmxzcHMgVnEsVXEgKFZFWCksKG8xMjgpIHwgbW92c2hkdXAgVnEsV3EgKEYzKSwoVkVYKQorMTc6IG1vdmhwcyBNcSxWcSAoVkVYKSwobzEyOCkgfCBtb3ZocGQgTXEsVnEgKDY2KSwoVkVYKSwobzEyOCkKKzE4OiBHcnAxNiAoMUEpCisxOToKKzFhOgorMWI6CisxYzoKKzFkOgorMWU6CisxZjogTk9QIEV2CisjIDB4MGYgMHgyMC0weDJmCisyMDogTU9WIFJkLENkCisyMTogTU9WIFJkLERkCisyMjogTU9WIENkLFJkCisyMzogTU9WIERkLFJkCisyNDoKKzI1OgorMjY6CisyNzoKKzI4OiBtb3ZhcHMgVnBzLFdwcyAoVkVYKSB8IG1vdmFwZCBWcGQsV3BkICg2NiksKFZFWCkKKzI5OiBtb3ZhcHMgV3BzLFZwcyAoVkVYKSB8IG1vdmFwZCBXcGQsVnBkICg2NiksKFZFWCkKKzJhOiBjdnRwaTJwcyBWcHMsUXBpIHwgY3Z0c2kyc3MgVnNzLEVkL3EgKEYzKSwoVkVYKSwobzEyOCkgfCBjdnRwaTJwZCBWcGQsUXBpICg2NikgfCBjdnRzaTJzZCBWc2QsRWQvcSAoRjIpLChWRVgpLChvMTI4KQorMmI6IG1vdm50cHMgTXBzLFZwcyAoVkVYKSB8IG1vdm50cGQgTXBkLFZwZCAoNjYpLChWRVgpCisyYzogY3Z0dHBzMnBpIFBwaSxXcHMgfCBjdnR0c3Myc2kgIEdkL3EsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgY3Z0dHBkMnBpIFBwaSxXcGQgKDY2KSB8IGN2dHRzZDJzaSBHZC9xLFdzZCAoRjIpLChWRVgpLChvMTI4KQorMmQ6IGN2dHBzMnBpIFBwaSxXcHMgfCBjdnRzczJzaSBHZC9xLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IGN2dHBkMnBpIFFwaSxXcGQgKDY2KSB8IGN2dHNkMnNpIEdkL3EsV3NkIChGMiksKFZFWCksKG8xMjgpCisyZTogdWNvbWlzcyBWc3MsV3NzIChWRVgpLChvMTI4KSB8IHVjb21pc2QgIFZzZCxXc2QgKDY2KSwoVkVYKSwobzEyOCkKKzJmOiBjb21pc3MgVnNzLFdzcyAoVkVYKSwobzEyOCkgfCBjb21pc2QgIFZzZCxXc2QgKDY2KSwoVkVYKSwobzEyOCkKKyMgMHgwZiAweDMwLTB4M2YKKzMwOiBXUk1TUgorMzE6IFJEVFNDCiszMjogUkRNU1IKKzMzOiBSRFBNQworMzQ6IFNZU0VOVEVSCiszNTogU1lTRVhJVAorMzY6CiszNzogR0VUU0VDCiszODogZXNjYXBlICMgMy1ieXRlIGVzY2FwZSAxCiszOToKKzNhOiBlc2NhcGUgIyAzLWJ5dGUgZXNjYXBlIDIKKzNiOgorM2M6CiszZDoKKzNlOgorM2Y6CisjIDB4MGYgMHg0MC0weDRmCis0MDogQ01PVk8gR3YsRXYKKzQxOiBDTU9WTk8gR3YsRXYKKzQyOiBDTU9WQi9DL05BRSBHdixFdgorNDM6IENNT1ZBRS9OQi9OQyBHdixFdgorNDQ6IENNT1ZFL1ogR3YsRXYKKzQ1OiBDTU9WTkUvTlogR3YsRXYKKzQ2OiBDTU9WQkUvTkEgR3YsRXYKKzQ3OiBDTU9WQS9OQkUgR3YsRXYKKzQ4OiBDTU9WUyBHdixFdgorNDk6IENNT1ZOUyBHdixFdgorNGE6IENNT1ZQL1BFIEd2LEV2Cis0YjogQ01PVk5QL1BPIEd2LEV2Cis0YzogQ01PVkwvTkdFIEd2LEV2Cis0ZDogQ01PVk5ML0dFIEd2LEV2Cis0ZTogQ01PVkxFL05HIEd2LEV2Cis0ZjogQ01PVk5MRS9HIEd2LEV2CisjIDB4MGYgMHg1MC0weDVmCis1MDogbW92bXNrcHMgR2QvcSxVcHMgKFZFWCkgfCBtb3Ztc2twZCBHZC9xLFVwZCAoNjYpLChWRVgpCis1MTogc3FydHBzIFZwcyxXcHMgKFZFWCkgfCBzcXJ0c3MgVnNzLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IHNxcnRwZCBWcGQsV3BkICg2NiksKFZFWCkgfCBzcXJ0c2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNTI6IHJzcXJ0cHMgVnBzLFdwcyAoVkVYKSB8IHJzcXJ0c3MgVnNzLFdzcyAoRjMpLChWRVgpLChvMTI4KQorNTM6IHJjcHBzIFZwcyxXcHMgKFZFWCkgfCByY3BzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpCis1NDogYW5kcHMgVnBzLFdwcyAoVkVYKSB8IGFuZHBkIFZwZCxXcGQgKDY2KSwoVkVYKQorNTU6IGFuZG5wcyBWcHMsV3BzIChWRVgpIHwgYW5kbnBkIFZwZCxXcGQgKDY2KSwoVkVYKQorNTY6IG9ycHMgVnBzLFdwcyAoVkVYKSB8IG9ycGQgVnBkLFdwZCAoNjYpLChWRVgpCis1NzogeG9ycHMgVnBzLFdwcyAoVkVYKSB8IHhvcnBkIFZwZCxXcGQgKDY2KSwoVkVYKQorNTg6IGFkZHBzIFZwcyxXcHMgKFZFWCkgfCBhZGRzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgYWRkcGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgYWRkc2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNTk6IG11bHBzIFZwcyxXcHMgKFZFWCkgfCBtdWxzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgbXVscGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgbXVsc2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNWE6IGN2dHBzMnBkIFZwZCxXcHMgKFZFWCkgfCBjdnRzczJzZCBWc2QsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgY3Z0cGQycHMgVnBzLFdwZCAoNjYpLChWRVgpIHwgY3Z0c2Qyc3MgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNWI6IGN2dGRxMnBzIFZwcyxXZHEgKFZFWCkgfCBjdnRwczJkcSBWZHEsV3BzICg2NiksKFZFWCkgfCBjdnR0cHMyZHEgVmRxLFdwcyAoRjMpLChWRVgpCis1Yzogc3VicHMgVnBzLFdwcyAoVkVYKSB8IHN1YnNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBzdWJwZCBWcGQsV3BkICg2NiksKFZFWCkgfCBzdWJzZCBWc2QsV3NkIChGMiksKFZFWCksKG8xMjgpCis1ZDogbWlucHMgVnBzLFdwcyAoVkVYKSB8IG1pbnNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBtaW5wZCBWcGQsV3BkICg2NiksKFZFWCkgfCBtaW5zZCBWc2QsV3NkIChGMiksKFZFWCksKG8xMjgpCis1ZTogZGl2cHMgVnBzLFdwcyAoVkVYKSB8IGRpdnNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBkaXZwZCBWcGQsV3BkICg2NiksKFZFWCkgfCBkaXZzZCBWc2QsV3NkIChGMiksKFZFWCksKG8xMjgpCis1ZjogbWF4cHMgVnBzLFdwcyAoVkVYKSB8IG1heHNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBtYXhwZCBWcGQsV3BkICg2NiksKFZFWCkgfCBtYXhzZCBWc2QsV3NkIChGMiksKFZFWCksKG8xMjgpCisjIDB4MGYgMHg2MC0weDZmCis2MDogcHVucGNrbGJ3IFBxLFFkIHwgcHVucGNrbGJ3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzYxOiBwdW5wY2tsd2QgUHEsUWQgfCBwdW5wY2tsd2QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjI6IHB1bnBja2xkcSBQcSxRZCB8IHB1bnBja2xkcSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2MzogcGFja3Nzd2IgUHEsUXEgfCBwYWNrc3N3YiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2NDogcGNtcGd0YiBQcSxRcSB8IHBjbXBndGIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjU6IHBjbXBndHcgUHEsUXEgfCBwY21wZ3R3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzY2OiBwY21wZ3RkIFBxLFFxIHwgcGNtcGd0ZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2NzogcGFja3Vzd2IgUHEsUXEgfCBwYWNrdXN3YiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2ODogcHVucGNraGJ3IFBxLFFkIHwgcHVucGNraGJ3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzY5OiBwdW5wY2tod2QgUHEsUWQgfCBwdW5wY2tod2QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNmE6IHB1bnBja2hkcSBQcSxRZCB8IHB1bnBja2hkcSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2YjogcGFja3NzZHcgUHEsUWQgfCBwYWNrc3NkdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2YzogcHVucGNrbHFkcSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2ZDogcHVucGNraHFkcSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2ZTogbW92ZC9xLyBQZCxFZC9xIHwgbW92ZC9xIFZkcSxFZC9xICg2NiksKFZFWCksKG8xMjgpCis2ZjogbW92cSBQcSxRcSB8IG1vdmRxYSBWZHEsV2RxICg2NiksKFZFWCkgfCBtb3ZkcXUgVmRxLFdkcSAoRjMpLChWRVgpCisjIDB4MGYgMHg3MC0weDdmCis3MDogcHNodWZ3IFBxLFFxLEliIHwgcHNodWZkIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkgfCBwc2h1Zmh3IFZkcSxXZHEsSWIgKEYzKSwoVkVYKSwobzEyOCkgfCBwc2h1Zmx3IFZkcVdkcSxJYiAoRjIpLChWRVgpLChvMTI4KQorNzE6IEdycDEyICgxQSkKKzcyOiBHcnAxMyAoMUEpCis3MzogR3JwMTQgKDFBKQorNzQ6IHBjbXBlcWIgUHEsUXEgfCBwY21wZXFiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzc1OiBwY21wZXF3IFBxLFFxIHwgcGNtcGVxdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis3NjogcGNtcGVxZCBQcSxRcSB8IHBjbXBlcWQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNzc6IGVtbXMvdnplcm91cHBlci92emVyb2FsbCAoVkVYKQorNzg6IFZNUkVBRCBFZC9xLEdkL3EKKzc5OiBWTVdSSVRFIEdkL3EsRWQvcQorN2E6Cis3YjoKKzdjOiBoYWRkcHMgVnBzLFdwcyAoRjIpLChWRVgpIHwgaGFkZHBkIFZwZCxXcGQgKDY2KSwoVkVYKQorN2Q6IGhzdWJwcyBWcHMsV3BzIChGMiksKFZFWCkgfCBoc3VicGQgVnBkLFdwZCAoNjYpLChWRVgpCis3ZTogbW92ZC9xIEVkL3EsUGQgfCBtb3ZkL3EgRWQvcSxWZHEgKDY2KSwoVkVYKSwobzEyOCkgfCBtb3ZxIFZxLFdxIChGMyksKFZFWCksKG8xMjgpCis3ZjogbW92cSBRcSxQcSB8IG1vdmRxYSBXZHEsVmRxICg2NiksKFZFWCkgfCBtb3ZkcXUgV2RxLFZkcSAoRjMpLChWRVgpCisjIDB4MGYgMHg4MC0weDhmCis4MDogSk8gSnogKGY2NCkKKzgxOiBKTk8gSnogKGY2NCkKKzgyOiBKQi9KTkFFL0pDIEp6IChmNjQpCis4MzogSk5CL0pBRS9KTkMgSnogKGY2NCkKKzg0OiBKWi9KRSBKeiAoZjY0KQorODU6IEpOWi9KTkUgSnogKGY2NCkKKzg2OiBKQkUvSk5BIEp6IChmNjQpCis4NzogSk5CRS9KQSBKeiAoZjY0KQorODg6IEpTIEp6IChmNjQpCis4OTogSk5TIEp6IChmNjQpCis4YTogSlAvSlBFIEp6IChmNjQpCis4YjogSk5QL0pQTyBKeiAoZjY0KQorOGM6IEpML0pOR0UgSnogKGY2NCkKKzhkOiBKTkwvSkdFIEp6IChmNjQpCis4ZTogSkxFL0pORyBKeiAoZjY0KQorOGY6IEpOTEUvSkcgSnogKGY2NCkKKyMgMHgwZiAweDkwLTB4OWYKKzkwOiBTRVRPIEViCis5MTogU0VUTk8gRWIKKzkyOiBTRVRCL0MvTkFFIEViCis5MzogU0VUQUUvTkIvTkMgRWIKKzk0OiBTRVRFL1ogRWIKKzk1OiBTRVRORS9OWiBFYgorOTY6IFNFVEJFL05BIEViCis5NzogU0VUQS9OQkUgRWIKKzk4OiBTRVRTIEViCis5OTogU0VUTlMgRWIKKzlhOiBTRVRQL1BFIEViCis5YjogU0VUTlAvUE8gRWIKKzljOiBTRVRML05HRSBFYgorOWQ6IFNFVE5ML0dFIEViCis5ZTogU0VUTEUvTkcgRWIKKzlmOiBTRVROTEUvRyBFYgorIyAweDBmIDB4YTAtMHhhZgorYTA6IFBVU0ggRlMgKGQ2NCkKK2ExOiBQT1AgRlMgKGQ2NCkKK2EyOiBDUFVJRAorYTM6IEJUIEV2LEd2CithNDogU0hMRCBFdixHdixJYgorYTU6IFNITEQgRXYsR3YsQ0wKK2E2OiBHcnBQRExLCithNzogR3JwUk5HCithODogUFVTSCBHUyAoZDY0KQorYTk6IFBPUCBHUyAoZDY0KQorYWE6IFJTTQorYWI6IEJUUyBFdixHdgorYWM6IFNIUkQgRXYsR3YsSWIKK2FkOiBTSFJEIEV2LEd2LENMCithZTogR3JwMTUgKDFBKSwoMUMpCithZjogSU1VTCBHdixFdgorIyAweDBmIDB4YjAtMHhiZgorYjA6IENNUFhDSEcgRWIsR2IKK2IxOiBDTVBYQ0hHIEV2LEd2CitiMjogTFNTIEd2LE1wCitiMzogQlRSIEV2LEd2CitiNDogTEZTIEd2LE1wCitiNTogTEdTIEd2LE1wCitiNjogTU9WWlggR3YsRWIKK2I3OiBNT1ZaWCBHdixFdworYjg6IEpNUEUgfCBQT1BDTlQgR3YsRXYgKEYzKQorYjk6IEdycDEwICgxQSkKK2JhOiBHcnA4IEV2LEliICgxQSkKK2JiOiBCVEMgRXYsR3YKK2JjOiBCU0YgR3YsRXYKK2JkOiBCU1IgR3YsRXYKK2JlOiBNT1ZTWCBHdixFYgorYmY6IE1PVlNYIEd2LEV3CisjIDB4MGYgMHhjMC0weGNmCitjMDogWEFERCBFYixHYgorYzE6IFhBREQgRXYsR3YKK2MyOiBjbXBwcyBWcHMsV3BzLEliIChWRVgpIHwgY21wc3MgVnNzLFdzcyxJYiAoRjMpLChWRVgpLChvMTI4KSB8IGNtcHBkIFZwZCxXcGQsSWIgKDY2KSwoVkVYKSB8IGNtcHNkIFZzZCxXc2QsSWIgKEYyKSwoVkVYKQorYzM6IG1vdm50aSBNZC9xLEdkL3EKK2M0OiBwaW5zcncgUHEsUmQvcS9NdyxJYiB8IHBpbnNydyBWZHEsUmQvcS9NdyxJYiAoNjYpLChWRVgpLChvMTI4KQorYzU6IHBleHRydyBHZCxOcSxJYiB8IHBleHRydyBHZCxVZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKK2M2OiBzaHVmcHMgVnBzLFdwcyxJYiAoVkVYKSB8IHNodWZwZCBWcGQsV3BkLEliICg2NiksKFZFWCkKK2M3OiBHcnA5ICgxQSkKK2M4OiBCU1dBUCBSQVgvRUFYL1I4L1I4RAorYzk6IEJTV0FQIFJDWC9FQ1gvUjkvUjlECitjYTogQlNXQVAgUkRYL0VEWC9SMTAvUjEwRAorY2I6IEJTV0FQIFJCWC9FQlgvUjExL1IxMUQKK2NjOiBCU1dBUCBSU1AvRVNQL1IxMi9SMTJECitjZDogQlNXQVAgUkJQL0VCUC9SMTMvUjEzRAorY2U6IEJTV0FQIFJTSS9FU0kvUjE0L1IxNEQKK2NmOiBCU1dBUCBSREkvRURJL1IxNS9SMTVECisjIDB4MGYgMHhkMC0weGRmCitkMDogYWRkc3VicHMgVnBzLFdwcyAoRjIpLChWRVgpIHwgYWRkc3VicGQgVnBkLFdwZCAoNjYpLChWRVgpCitkMTogcHNybHcgUHEsUXEgfCBwc3JsdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkMjogcHNybGQgUHEsUXEgfCBwc3JsZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkMzogcHNybHEgUHEsUXEgfCBwc3JscSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkNDogcGFkZHEgUHEsUXEgfCBwYWRkcSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkNTogcG11bGx3IFBxLFFxIHwgcG11bGx3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2Q2OiBtb3ZxIFdxLFZxICg2NiksKFZFWCksKG8xMjgpIHwgbW92cTJkcSBWZHEsTnEgKEYzKSB8IG1vdmRxMnEgUHEsVXEgKEYyKQorZDc6IHBtb3Ztc2tiIEdkLE5xIHwgcG1vdm1za2IgR2QsVWRxICg2NiksKFZFWCksKG8xMjgpCitkODogcHN1YnVzYiBQcSxRcSB8IHBzdWJ1c2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZDk6IHBzdWJ1c3cgUHEsUXEgfCBwc3VidXN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RhOiBwbWludWIgUHEsUXEgfCBwbWludWIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGI6IHBhbmQgUHEsUXEgfCBwYW5kIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RjOiBwYWRkdXNiIFBxLFFxIHwgcGFkZHVzYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkZDogcGFkZHVzdyBQcSxRcSB8IHBhZGR1c3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGU6IHBtYXh1YiBQcSxRcSB8IHBtYXh1YiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkZjogcGFuZG4gUHEsUXEgfCBwYW5kbiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisjIDB4MGYgMHhlMC0weGVmCitlMDogcGF2Z2IgUHEsUXEgfCBwYXZnYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlMTogcHNyYXcgUHEsUXEgfCBwc3JhdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlMjogcHNyYWQgUHEsUXEgfCBwc3JhZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlMzogcGF2Z3cgUHEsUXEgfCBwYXZndyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlNDogcG11bGh1dyBQcSxRcSB8IHBtdWxodXcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTU6IHBtdWxodyBQcSxRcSB8IHBtdWxodyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlNjogY3Z0cGQyZHEgVmRxLFdwZCAoRjIpLChWRVgpIHwgY3Z0dHBkMmRxIFZkcSxXcGQgKDY2KSwoVkVYKSB8IGN2dGRxMnBkIFZwZCxXZHEgKEYzKSwoVkVYKQorZTc6IG1vdm50cSBNcSxQcSB8IG1vdm50ZHEgTWRxLFZkcSAoNjYpLChWRVgpCitlODogcHN1YnNiIFBxLFFxIHwgcHN1YnNiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2U5OiBwc3Vic3cgUHEsUXEgfCBwc3Vic3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZWE6IHBtaW5zdyBQcSxRcSB8IHBtaW5zdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlYjogcG9yIFBxLFFxIHwgcG9yIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2VjOiBwYWRkc2IgUHEsUXEgfCBwYWRkc2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZWQ6IHBhZGRzdyBQcSxRcSB8IHBhZGRzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlZTogcG1heHN3IFBxLFFxIHwgcG1heHN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2VmOiBweG9yIFBxLFFxIHwgcHhvciBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisjIDB4MGYgMHhmMC0weGZmCitmMDogbGRkcXUgVmRxLE1kcSAoRjIpLChWRVgpCitmMTogcHNsbHcgUHEsUXEgfCBwc2xsdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmMjogcHNsbGQgUHEsUXEgfCBwc2xsZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmMzogcHNsbHEgUHEsUXEgfCBwc2xscSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmNDogcG11bHVkcSBQcSxRcSB8IHBtdWx1ZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjU6IHBtYWRkd2QgUHEsUXEgfCBwbWFkZHdkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2Y2OiBwc2FkYncgUHEsUXEgfCBwc2FkYncgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjc6IG1hc2ttb3ZxIFBxLE5xIHwgbWFza21vdmRxdSBWZHEsVWRxICg2NiksKFZFWCksKG8xMjgpCitmODogcHN1YmIgUHEsUXEgfCBwc3ViYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmOTogcHN1YncgUHEsUXEgfCBwc3VidyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmYTogcHN1YmQgUHEsUXEgfCBwc3ViZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmYjogcHN1YnEgUHEsUXEgfCBwc3VicSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmYzogcGFkZGIgUHEsUXEgfCBwYWRkYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmZDogcGFkZHcgUHEsUXEgfCBwYWRkdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmZTogcGFkZGQgUHEsUXEgfCBwYWRkZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmZjoKK0VuZFRhYmxlCisKK1RhYmxlOiAzLWJ5dGUgb3Bjb2RlIDEgKDB4MGYgMHgzOCkKK1JlZmVycmVyOiAzLWJ5dGUgZXNjYXBlIDEKK0FWWGNvZGU6IDIKKyMgMHgwZiAweDM4IDB4MDAtMHgwZgorMDA6IHBzaHVmYiBQcSxRcSB8IHBzaHVmYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswMTogcGhhZGR3IFBxLFFxIHwgcGhhZGR3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzAyOiBwaGFkZGQgUHEsUXEgfCBwaGFkZGQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMDM6IHBoYWRkc3cgUHEsUXEgfCBwaGFkZHN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzA0OiBwbWFkZHVic3cgUHEsUXEgfCBwbWFkZHVic3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMDU6IHBoc3VidyBQcSxRcSB8IHBoc3VidyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswNjogcGhzdWJkIFBxLFFxIHwgcGhzdWJkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzA3OiBwaHN1YnN3IFBxLFFxIHwgcGhzdWJzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswODogcHNpZ25iIFBxLFFxIHwgcHNpZ25iIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzA5OiBwc2lnbncgUHEsUXEgfCBwc2lnbncgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMGE6IHBzaWduZCBQcSxRcSB8IHBzaWduZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswYjogcG11bGhyc3cgUHEsUXEgfCBwbXVsaHJzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswYzogVnBlcm1pbHBzIC9yICg2NiksKG9WRVgpCiswZDogVnBlcm1pbHBkIC9yICg2NiksKG9WRVgpCiswZTogdnRlc3RwcyAvciAoNjYpLChvVkVYKQorMGY6IHZ0ZXN0cGQgL3IgKDY2KSwob1ZFWCkKKyMgMHgwZiAweDM4IDB4MTAtMHgxZgorMTA6IHBibGVuZHZiIFZkcSxXZHEgKDY2KQorMTE6CisxMjoKKzEzOgorMTQ6IGJsZW5kdnBzIFZkcSxXZHEgKDY2KQorMTU6IGJsZW5kdnBkIFZkcSxXZHEgKDY2KQorMTY6CisxNzogcHRlc3QgVmRxLFdkcSAoNjYpLChWRVgpCisxODogdmJyb2FkY2FzdHNzIC9yICg2NiksKG9WRVgpCisxOTogdmJyb2FkY2FzdHNkIC9yICg2NiksKG9WRVgpLChvMjU2KQorMWE6IHZicm9hZGNhc3RmMTI4IC9yICg2NiksKG9WRVgpLChvMjU2KQorMWI6CisxYzogcGFic2IgUHEsUXEgfCBwYWJzYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisxZDogcGFic3cgUHEsUXEgfCBwYWJzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisxZTogcGFic2QgUHEsUXEgfCBwYWJzZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisxZjoKKyMgMHgwZiAweDM4IDB4MjAtMHgyZgorMjA6IHBtb3ZzeGJ3IFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzIxOiBwbW92c3hiZCBWZHEsVWRxL01kICg2NiksKFZFWCksKG8xMjgpCisyMjogcG1vdnN4YnEgVmRxLFVkcS9NdyAoNjYpLChWRVgpLChvMTI4KQorMjM6IHBtb3ZzeHdkIFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzI0OiBwbW92c3h3cSBWZHEsVWRxL01kICg2NiksKFZFWCksKG8xMjgpCisyNTogcG1vdnN4ZHEgVmRxLFVkcS9NcSAoNjYpLChWRVgpLChvMTI4KQorMjY6CisyNzoKKzI4OiBwbXVsZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMjk6IHBjbXBlcXEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMmE6IG1vdm50ZHFhIFZkcSxNZHEgKDY2KSwoVkVYKSwobzEyOCkKKzJiOiBwYWNrdXNkdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCisyYzogdm1hc2ttb3ZwcyhsZCkgL3IgKDY2KSwob1ZFWCkKKzJkOiB2bWFza21vdnBkKGxkKSAvciAoNjYpLChvVkVYKQorMmU6IHZtYXNrbW92cHMoc3QpIC9yICg2NiksKG9WRVgpCisyZjogdm1hc2ttb3ZwZChzdCkgL3IgKDY2KSwob1ZFWCkKKyMgMHgwZiAweDM4IDB4MzAtMHgzZgorMzA6IHBtb3Z6eGJ3IFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzMxOiBwbW92enhiZCBWZHEsVWRxL01kICg2NiksKFZFWCksKG8xMjgpCiszMjogcG1vdnp4YnEgVmRxLFVkcS9NdyAoNjYpLChWRVgpLChvMTI4KQorMzM6IHBtb3Z6eHdkIFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzM0OiBwbW92enh3cSBWZHEsVWRxL01kICg2NiksKFZFWCksKG8xMjgpCiszNTogcG1vdnp4ZHEgVmRxLFVkcS9NcSAoNjYpLChWRVgpLChvMTI4KQorMzY6CiszNzogcGNtcGd0cSBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszODogcG1pbnNiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzM5OiBwbWluc2QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorM2E6IHBtaW51dyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszYjogcG1pbnVkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzNjOiBwbWF4c2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorM2Q6IHBtYXhzZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszZTogcG1heHV3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzNmOiBwbWF4dWQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorIyAweDBmIDB4MzggMHg0MC0weDhmCis0MDogcG11bGxkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzQxOiBwaG1pbnBvc3V3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzgwOiBJTlZFUFQgR2QvcSxNZHEgKDY2KQorODE6IElOVlBJRCBHZC9xLE1kcSAoNjYpCisjIDB4MGYgMHgzOCAweDkwLTB4YmYgKEZNQSkKKzk2OiB2Zm1hZGRzdWIxMzJwZC9wcyAvciAoNjYpLChWRVgpCis5NzogdmZtc3ViYWRkMTMycGQvcHMgL3IgKDY2KSwoVkVYKQorOTg6IHZmbWFkZDEzMnBkL3BzIC9yICg2NiksKFZFWCkKKzk5OiB2Zm1hZGQxMzJzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorOWE6IHZmbXN1YjEzMnBkL3BzIC9yICg2NiksKFZFWCkKKzliOiB2Zm1zdWIxMzJzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorOWM6IHZmbm1hZGQxMzJwZC9wcyAvciAoNjYpLChWRVgpCis5ZDogdmZubWFkZDEzMnNkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCis5ZTogdmZubXN1YjEzMnBkL3BzIC9yICg2NiksKFZFWCkKKzlmOiB2Zm5tc3ViMTMyc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2E2OiB2Zm1hZGRzdWIyMTNwZC9wcyAvciAoNjYpLChWRVgpCithNzogdmZtc3ViYWRkMjEzcGQvcHMgL3IgKDY2KSwoVkVYKQorYTg6IHZmbWFkZDIxM3BkL3BzIC9yICg2NiksKFZFWCkKK2E5OiB2Zm1hZGQyMTNzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYWE6IHZmbXN1YjIxM3BkL3BzIC9yICg2NiksKFZFWCkKK2FiOiB2Zm1zdWIyMTNzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYWM6IHZmbm1hZGQyMTNwZC9wcyAvciAoNjYpLChWRVgpCithZDogdmZubWFkZDIxM3NkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCithZTogdmZubXN1YjIxM3BkL3BzIC9yICg2NiksKFZFWCkKK2FmOiB2Zm5tc3ViMjEzc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2I2OiB2Zm1hZGRzdWIyMzFwZC9wcyAvciAoNjYpLChWRVgpCitiNzogdmZtc3ViYWRkMjMxcGQvcHMgL3IgKDY2KSwoVkVYKQorYjg6IHZmbWFkZDIzMXBkL3BzIC9yICg2NiksKFZFWCkKK2I5OiB2Zm1hZGQyMzFzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYmE6IHZmbXN1YjIzMXBkL3BzIC9yICg2NiksKFZFWCkKK2JiOiB2Zm1zdWIyMzFzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYmM6IHZmbm1hZGQyMzFwZC9wcyAvciAoNjYpLChWRVgpCitiZDogdmZubWFkZDIzMXNkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCitiZTogdmZubXN1YjIzMXBkL3BzIC9yICg2NiksKFZFWCkKK2JmOiB2Zm5tc3ViMjMxc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKKyMgMHgwZiAweDM4IDB4YzAtMHhmZgorZGI6IGFlc2ltYyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkYzogYWVzZW5jIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RkOiBhZXNlbmNsYXN0IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RlOiBhZXNkZWMgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGY6IGFlc2RlY2xhc3QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjA6IE1PVkJFIEd2LE12IHwgQ1JDMzIgR2QsRWIgKEYyKQorZjE6IE1PVkJFIE12LEd2IHwgQ1JDMzIgR2QsRXYgKEYyKQorRW5kVGFibGUKKworVGFibGU6IDMtYnl0ZSBvcGNvZGUgMiAoMHgwZiAweDNhKQorUmVmZXJyZXI6IDMtYnl0ZSBlc2NhcGUgMgorQVZYY29kZTogMworIyAweDBmIDB4M2EgMHgwMC0weGZmCiswNDogdnBlcm1pbHBzIC9yLEliICg2NiksKG9WRVgpCiswNTogdnBlcm1pbHBkIC9yLEliICg2NiksKG9WRVgpCiswNjogdnBlcm0yZjEyOCAvcixJYiAoNjYpLChvVkVYKSwobzI1NikKKzA4OiByb3VuZHBzIFZkcSxXZHEsSWIgKDY2KSwoVkVYKQorMDk6IHJvdW5kcGQgVmRxLFdkcSxJYiAoNjYpLChWRVgpCiswYTogcm91bmRzcyBWc3MsV3NzLEliICg2NiksKFZFWCksKG8xMjgpCiswYjogcm91bmRzZCBWc2QsV3NkLEliICg2NiksKFZFWCksKG8xMjgpCiswYzogYmxlbmRwcyBWZHEsV2RxLEliICg2NiksKFZFWCkKKzBkOiBibGVuZHBkIFZkcSxXZHEsSWIgKDY2KSwoVkVYKQorMGU6IHBibGVuZHcgVmRxLFdkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorMGY6IHBhbGlnbnIgUHEsUXEsSWIgfCBwYWxpZ25yIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzE0OiBwZXh0cmIgUmQvTWIsVmRxLEliICg2NiksKFZFWCksKG8xMjgpCisxNTogcGV4dHJ3IFJkL013LFZkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorMTY6IHBleHRyZC9wZXh0cnEgRWQvcSxWZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzE3OiBleHRyYWN0cHMgRWQsVmRxLEliICg2NiksKFZFWCksKG8xMjgpCisxODogdmluc2VydGYxMjggL3IsSWIgKDY2KSwob1ZFWCksKG8yNTYpCisxOTogdmV4dHJhY3RmMTI4IC9yLEliICg2NiksKG9WRVgpLChvMjU2KQorMjA6IHBpbnNyYiBWZHEsUmQvcS9NYixJYiAoNjYpLChWRVgpLChvMTI4KQorMjE6IGluc2VydHBzIFZkcSxVZHEvTWQsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzIyOiBwaW5zcmQvcGluc3JxIFZkcSxFZC9xLEliICg2NiksKFZFWCksKG8xMjgpCis0MDogZHBwcyBWZHEsV2RxLEliICg2NiksKFZFWCkKKzQxOiBkcHBkIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzQyOiBtcHNhZGJ3IFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzQ0OiBwY2xtdWxxIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzRhOiB2YmxlbmR2cHMgL3IsSWIgKDY2KSwob1ZFWCkKKzRiOiB2YmxlbmR2cGQgL3IsSWIgKDY2KSwob1ZFWCkKKzRjOiB2cGJsZW5kdmIgL3IsSWIgKDY2KSwob1ZFWCksKG8xMjgpCis2MDogcGNtcGVzdHJtIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzYxOiBwY21wZXN0cmkgVmRxLFdkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorNjI6IHBjbXBpc3RybSBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCis2MzogcGNtcGlzdHJpIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKK2RmOiBhZXNrZXlnZW5hc3Npc3QgVmRxLFdkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDEKKzA6IEFERAorMTogT1IKKzI6IEFEQworMzogU0JCCis0OiBBTkQKKzU6IFNVQgorNjogWE9SCis3OiBDTVAKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxQQorMDogUE9QCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMgorMDogUk9MCisxOiBST1IKKzI6IFJDTAorMzogUkNSCis0OiBTSEwvU0FMCis1OiBTSFIKKzY6Cis3OiBTQVIKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAzXzEKKzA6IFRFU1QgRWIsSWIKKzE6CisyOiBOT1QgRWIKKzM6IE5FRyBFYgorNDogTVVMIEFMLEViCis1OiBJTVVMIEFMLEViCis2OiBESVYgQUwsRWIKKzc6IElESVYgQUwsRWIKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAzXzIKKzA6IFRFU1QgRXYsSXoKKzE6CisyOiBOT1QgRXYKKzM6IE5FRyBFdgorNDogTVVMIHJBWCxFdgorNTogSU1VTCByQVgsRXYKKzY6IERJViByQVgsRXYKKzc6IElESVYgckFYLEV2CitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwNAorMDogSU5DIEViCisxOiBERUMgRWIKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnA1CiswOiBJTkMgRXYKKzE6IERFQyBFdgorMjogQ0FMTE4gRXYgKGY2NCkKKzM6IENBTExGIEVwCis0OiBKTVBOIEV2IChmNjQpCis1OiBKTVBGIEVwCis2OiBQVVNIIEV2IChkNjQpCis3OgorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDYKKzA6IFNMRFQgUnYvTXcKKzE6IFNUUiBSdi9NdworMjogTExEVCBFdworMzogTFRSIEV3Cis0OiBWRVJSIEV3Cis1OiBWRVJXIEV3CitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwNworMDogU0dEVCBNcyB8IFZNQ0FMTCAoMDAxKSwoMTFCKSB8IFZNTEFVTkNIICgwMTApLCgxMUIpIHwgVk1SRVNVTUUgKDAxMSksKDExQikgfCBWTVhPRkYgKDEwMCksKDExQikKKzE6IFNJRFQgTXMgfCBNT05JVE9SICgwMDApLCgxMUIpIHwgTVdBSVQgKDAwMSkKKzI6IExHRFQgTXMgfCBYR0VUQlYgKDAwMCksKDExQikgfCBYU0VUQlYgKDAwMSksKDExQikKKzM6IExJRFQgTXMKKzQ6IFNNU1cgTXcvUnYKKzU6Cis2OiBMTVNXIEV3Cis3OiBJTlZMUEcgTWIgfCBTV0FQR1MgKG82NCksKDAwMCksKDExQikgfCBSRFRTQ1AgKDAwMSksKDExQikKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnA4Cis0OiBCVAorNTogQlRTCis2OiBCVFIKKzc6IEJUQworRW5kVGFibGUKKworR3JwVGFibGU6IEdycDkKKzE6IENNUFhDSEc4Qi8xNkIgTXEvTWRxCis2OiBWTVBUUkxEIE1xIHwgVk1DTEVBUiBNcSAoNjYpIHwgVk1YT04gTXEgKEYzKQorNzogVk1QVFJTVCBNcQorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDEwCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMTEKKzA6IE1PVgorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDEyCisyOiBwc3JsdyBOcSxJYiAoMTFCKSB8IHBzcmx3IFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorNDogcHNyYXcgTnEsSWIgKDExQikgfCBwc3JhdyBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKKzY6IHBzbGx3IE5xLEliICgxMUIpIHwgcHNsbHcgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMTMKKzI6IHBzcmxkIE5xLEliICgxMUIpIHwgcHNybGQgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCis0OiBwc3JhZCBOcSxJYiAoMTFCKSB8IHBzcmFkIFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorNjogcHNsbGQgTnEsSWIgKDExQikgfCBwc2xsZCBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxNAorMjogcHNybHEgTnEsSWIgKDExQikgfCBwc3JscSBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKKzM6IHBzcmxkcSBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKKzY6IHBzbGxxIE5xLEliICgxMUIpIHwgcHNsbHEgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCis3OiBwc2xsZHEgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMTUKKzA6IGZ4c2F2ZQorMTogZnhzdG9yCisyOiBsZG14Y3NyIChWRVgpCiszOiBzdG14Y3NyIChWRVgpCis0OiBYU0FWRQorNTogWFJTVE9SIHwgbGZlbmNlICgxMUIpCis2OiBtZmVuY2UgKDExQikKKzc6IGNsZmx1c2ggfCBzZmVuY2UgKDExQikKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxNgorMDogcHJlZmV0Y2ggTlRBCisxOiBwcmVmZXRjaCBUMAorMjogcHJlZmV0Y2ggVDEKKzM6IHByZWZldGNoIFQyCitFbmRUYWJsZQorCisjIEFNRCdzIFByZWZldGNoIEdyb3VwCitHcnBUYWJsZTogR3JwUAorMDogUFJFRkVUQ0gKKzE6IFBSRUZFVENIVworRW5kVGFibGUKKworR3JwVGFibGU6IEdycFBETEsKKzA6IE1PTlRNVUwKKzE6IFhTSEExCisyOiBYU0hBMgorRW5kVGFibGUKKworR3JwVGFibGU6IEdycFJORworMDogeHN0b3JlLXJuZworMTogeGNyeXB0LWVjYgorMjogeGNyeXB0LWNiYworNDogeGNyeXB0LWNmYgorNTogeGNyeXB0LW9mYgorRW5kVGFibGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGY0Y2VlOTAuLjhmNGUyYWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMzgsNyArMzgsOCBAQAogICogUmV0dXJucyAwIGlmIG1taW90cmFjZSBpcyBkaXNhYmxlZCwgb3IgaWYgdGhlIGZhdWx0IGlzIG5vdAogICogaGFuZGxlZCBieSBtbWlvdHJhY2U6CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGttbWlvX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBfX2twcm9iZXMKK2ttbWlvX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKHVubGlrZWx5KGlzX2ttbWlvX2FjdGl2ZSgpKSkKIAkJaWYgKGttbWlvX2hhbmRsZXIocmVncywgYWRkcikgPT0gMSkKQEAgLTQ2LDcgKzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIGludCBfX2twcm9iZXMgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTI0MCw3ICsyNDEsNyBAQAogICoKICAqICAgSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2Mgb3IgbW9kdWxlIG1hcHBpbmcgYXJlYQogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IHZtYWxsb2NfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIG5vaW5saW5lIF9fa3Byb2JlcyBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwZ2RfcGFkZHI7CiAJcG1kX3QgKnBtZF9rOwpAQCAtMzU3LDcgKzM1OCw3IEBACiAgKgogICogVGhpcyBhc3N1bWVzIG5vIGxhcmdlIHBhZ2VzIGluIHRoZXJlLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IHZtYWxsb2NfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIG5vaW5saW5lIF9fa3Byb2JlcyBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJcGdkX3QgKnBnZCwgKnBnZF9yZWY7CiAJcHVkX3QgKnB1ZCwgKnB1ZF9yZWY7CkBAIC04NjAsNyArODYxLDcgQEAKICAqIFRoZXJlIGFyZSBubyBzZWN1cml0eSBpbXBsaWNhdGlvbnMgdG8gbGVhdmluZyBhIHN0YWxlIFRMQiB3aGVuCiAgKiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhIHBhZ2UuCiAgKi8KLXN0YXRpYyBub2lubGluZSBpbnQKK3N0YXRpYyBub2lubGluZSBfX2twcm9iZXMgaW50CiBzcHVyaW91c19mYXVsdCh1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlwZ2RfdCAqcGdkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IDMzNGU2M2MuLjJmZWI5YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTE3MCw4ICsxNzAsNyBAQAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBoeXNfYWRkciArIHNpemUpLAogCQkJCXByb3RfdmFsLCBuZXdfcHJvdF92YWwpOwotCQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gZXJyX2ZyZWVfbWVtdHlwZTsKIAkJfQogCQlwcm90X3ZhbCA9IG5ld19wcm90X3ZhbDsKIAl9CkBAIC0xOTcsMjYgKzE5NiwyNSBAQAogCSAqLwogCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKIAlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycl9mcmVlX21lbXR5cGU7CiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7CiAKLQlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwcm90X3ZhbCkpIHsKLQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCWZyZWVfdm1fYXJlYShhcmVhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkKKwkJZ290byBlcnJfZnJlZV9hcmVhOwogCi0JaWYgKGlvcmVtYXBfcGFnZV9yYW5nZSh2YWRkciwgdmFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIHByb3QpKSB7Ci0JCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCQlmcmVlX3ZtX2FyZWEoYXJlYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpCisJCWdvdG8gZXJyX2ZyZWVfYXJlYTsKIAogCXJldF9hZGRyID0gKHZvaWQgX19pb21lbSAqKSAodmFkZHIgKyBvZmZzZXQpOwogCW1taW90cmFjZV9pb3JlbWFwKHVuYWxpZ25lZF9waHlzX2FkZHIsIHVuYWxpZ25lZF9zaXplLCByZXRfYWRkcik7CiAKIAlyZXR1cm4gcmV0X2FkZHI7CitlcnJfZnJlZV9hcmVhOgorCWZyZWVfdm1fYXJlYShhcmVhKTsKK2Vycl9mcmVlX21lbXR5cGU6CisJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvTWFrZWZpbGUgYi9hcmNoL3g4Ni90b29scy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg4ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdG9vbHMvTWFrZWZpbGUKQEAgLTAsMCArMSwyMiBAQAorUEhPTlkgKz0gcG9zdHRlc3QKKworaWZlcSAoJChLQlVJTERfVkVSQk9TRSksMSkKKyAgcG9zdGVzdF92ZXJib3NlID0gLXYKK2Vsc2UKKyAgcG9zdGVzdF92ZXJib3NlID0KK2VuZGlmCisKK3F1aWV0X2NtZF9wb3N0dGVzdCA9IFRFU1QgICAgJEAKKyAgICAgIGNtZF9wb3N0dGVzdCA9ICQoT0JKRFVNUCkgLWQgLWogLnRleHQgJChvYmp0cmVlKS92bWxpbnV4IHwgYXdrIC1mICQoc3JjdHJlZSkvYXJjaC94ODYvdG9vbHMvZGlzdGlsbC5hd2sgfCAkKG9iaikvdGVzdF9nZXRfbGVuIC0kKENPTkZJR182NEJJVCkgJChwb3N0dGVzdF92ZXJib3NlKQorCitwb3N0dGVzdDogJChvYmopL3Rlc3RfZ2V0X2xlbiB2bWxpbnV4CisJJChjYWxsIGNtZCxwb3N0dGVzdCkKKworaG9zdHByb2dzLXkJOj0gdGVzdF9nZXRfbGVuCisKKyMgLUkgbmVlZGVkIGZvciBnZW5lcmF0ZWQgQyBzb3VyY2UgYW5kIEMgc291cmNlIHdoaWNoIGluIHRoZSBrZXJuZWwgdHJlZS4KK0hPU1RDRkxBR1NfdGVzdF9nZXRfbGVuLm8gOj0gLVdhbGwgLUkkKG9ianRyZWUpL2FyY2gveDg2L2xpYi8gLUkkKHNyY3RyZWUpL2FyY2gveDg2L2luY2x1ZGUvIC1JJChzcmN0cmVlKS9hcmNoL3g4Ni9saWIvIC1JJChzcmN0cmVlKS9pbmNsdWRlLworCisjIERlcGVuZGVuY2llcyBhcmUgYWxzbyBuZWVkZWQuCiskKG9iaikvdGVzdF9nZXRfbGVuLm86ICQoc3JjdHJlZSkvYXJjaC94ODYvbGliL2luc24uYyAkKHNyY3RyZWUpL2FyY2gveDg2L2xpYi9pbmF0LmMgJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0X3R5cGVzLmggJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0LmggJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmggJChvYmp0cmVlKS9hcmNoL3g4Ni9saWIvaW5hdC10YWJsZXMuYworCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9kaXN0aWxsLmF3ayBiL2FyY2gveDg2L3Rvb2xzL2Rpc3RpbGwuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxM2MwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni90b29scy9kaXN0aWxsLmF3awpAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vYXdrIC1mCisjIFVzYWdlOiBvYmpkdW1wIC1kIGEub3V0IHwgYXdrIC1mIGRpc3RpbGwuYXdrIHwgLi90ZXN0X2dldF9sZW4KKyMgRGlzdGlsbHMgdGhlIGRpc2Fzc2VtYmx5IGFzIGZvbGxvd3M6CisjIC0gUmVtb3ZlcyBhbGwgbGluZXMgZXhjZXB0IHRoZSBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLgorIyAtIEZvciBpbnN0cnVjdGlvbnMgdGhhdCBleGNlZWQgMSBsaW5lICg3IGJ5dGVzKSwgY3JhbXMgYWxsIHRoZSBoZXggYnl0ZXMKKyMgaW50byBhIHNpbmdsZSBsaW5lLgorIyAtIFJlbW92ZSBiYWQob3IgcHJlZml4IG9ubHkpIGluc3RydWN0aW9ucworCitCRUdJTiB7CisJcHJldl9hZGRyID0gIiIKKwlwcmV2X2hleCA9ICIiCisJcHJldl9tbmVtb25pYyA9ICIiCisJYmFkX2V4cHIgPSAiKFxcKGJhZFxcKXxecmV4fF4uYnl0ZXxecmVwKHp8bnopJHxebG9jayR8XmVzJHxeY3MkfF5zcyR8XmRzJHxeZnMkfF5ncyR8XmRhdGEoMTZ8MzIpJHxeYWRkcigxNnwzMnw2NCkpIgorCWZ3YWl0X2V4cHIgPSAiXjliICIKKwlmd2FpdF9zdHI9IjliXHRmd2FpdCIKK30KKworL14gKlswLTlhLWZdKyA8W14+XSo+Oi8geworCSMgU3ltYm9sIGVudHJ5CisJcHJpbnRmKCIlcyVzXG4iLCAkMiwgJDEpCit9CisKKy9eICpbMC05YS1mXSs6LyB7CisJaWYgKHNwbGl0KCQwLCBmaWVsZCwgIlx0IikgPCAzKSB7CisJCSMgVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc2FtZSBpbnNuLgorCQlwcmV2X2hleCA9IHByZXZfaGV4IGZpZWxkWzJdCisJfSBlbHNlIHsKKwkJIyBTa2lwIGJhZCBpbnN0cnVjdGlvbnMKKwkJaWYgKG1hdGNoKHByZXZfbW5lbW9uaWMsIGJhZF9leHByKSkKKwkJCXByZXZfYWRkciA9ICIiCisJCSMgU3BsaXQgZndhaXQgZnJvbSBvdGhlciBmKiBpbnN0cnVjdGlvbnMKKwkJaWYgKG1hdGNoKHByZXZfaGV4LCBmd2FpdF9leHByKSAmJiBwcmV2X21uZW1vbmljICE9ICJmd2FpdCIpIHsKKwkJCXByaW50ZiAiJXNcdCVzXG4iLCBwcmV2X2FkZHIsIGZ3YWl0X3N0cgorCQkJc3ViKGZ3YWl0X2V4cHIsICIiLCBwcmV2X2hleCkKKwkJfQorCQlpZiAocHJldl9hZGRyICE9ICIiKQorCQkJcHJpbnRmICIlc1x0JXNcdCVzXG4iLCBwcmV2X2FkZHIsIHByZXZfaGV4LCBwcmV2X21uZW1vbmljCisJCXByZXZfYWRkciA9IGZpZWxkWzFdCisJCXByZXZfaGV4ID0gZmllbGRbMl0KKwkJcHJldl9tbmVtb25pYyA9IGZpZWxkWzNdCisJfQorfQorCitFTkQgeworCWlmIChwcmV2X2FkZHIgIT0gIiIpCisJCXByaW50ZiAiJXNcdCVzXHQlc1xuIiwgcHJldl9hZGRyLCBwcmV2X2hleCwgcHJldl9tbmVtb25pYworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrIGIvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGU5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni90b29scy9nZW4taW5zbi1hdHRyLXg4Ni5hd2sKQEAgLTAsMCArMSwzODAgQEAKKyMhL2Jpbi9hd2sgLWYKKyMgZ2VuLWluc24tYXR0ci14ODYuYXdrOiBJbnN0cnVjdGlvbiBhdHRyaWJ1dGUgdGFibGUgZ2VuZXJhdG9yCisjIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyMKKyMgVXNhZ2U6IGF3ayAtZiBnZW4taW5zbi1hdHRyLXg4Ni5hd2sgeDg2LW9wY29kZS1tYXAudHh0ID4gaW5hdC10YWJsZXMuYworCisjIEF3ayBpbXBsZW1lbnRhdGlvbiBzYW5pdHkgY2hlY2sKK2Z1bmN0aW9uIGNoZWNrX2F3a19pbXBsZW1lbnQoKSB7CisJaWYgKCFtYXRjaCgiYWJjIiwgIltbOmxvd2VyOl1dKyIpKQorCQlyZXR1cm4gIllvdXIgYXdrIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0b3ItY2xhc3MuIgorCWlmIChzcHJpbnRmKCIleCIsIDApICE9ICIwIikKKwkJcmV0dXJuICJZb3VyIGF3ayBoYXMgYSBwcmludGYtZm9ybWF0IHByb2JsZW0uIgorCXJldHVybiAiIgorfQorCisjIENsZWFyIHdvcmtpbmcgdmFycworZnVuY3Rpb24gY2xlYXJfdmFycygpIHsKKwlkZWxldGUgdGFibGUKKwlkZWxldGUgbHB0YWJsZTIKKwlkZWxldGUgbHB0YWJsZTEKKwlkZWxldGUgbHB0YWJsZTMKKwllaWQgPSAtMSAjIGVzY2FwZSBpZAorCWdpZCA9IC0xICMgZ3JvdXAgaWQKKwlhaWQgPSAtMSAjIEFWWCBpZAorCXRuYW1lID0gIiIKK30KKworQkVHSU4geworCSMgSW1wbGVtZW50YXRpb24gZXJyb3IgY2hlY2tpbmcKKwlhd2tjaGVja2VkID0gY2hlY2tfYXdrX2ltcGxlbWVudCgpCisJaWYgKGF3a2NoZWNrZWQgIT0gIiIpIHsKKwkJcHJpbnQgIkVycm9yOiAiIGF3a2NoZWNrZWQgPiAiL2Rldi9zdGRlcnIiCisJCXByaW50ICJQbGVhc2UgdHJ5IHRvIHVzZSBnYXdrLiIgPiAiL2Rldi9zdGRlcnIiCisJCWV4aXQgMQorCX0KKworCSMgU2V0dXAgZ2VuZXJhdGluZyB0YWJsZXMKKwlwcmludCAiLyogeDg2IG9wY29kZSBtYXAgZ2VuZXJhdGVkIGZyb20geDg2LW9wY29kZS1tYXAudHh0ICovIgorCXByaW50ICIvKiBEbyBub3QgY2hhbmdlIHRoaXMgY29kZS4gKi9cbiIKKwlnZ2lkID0gMQorCWdlaWQgPSAxCisJZ2FpZCA9IDAKKwlkZWxldGUgZXRhYmxlCisJZGVsZXRlIGd0YWJsZQorCWRlbGV0ZSBhdGFibGUKKworCW9wbmRfZXhwciA9ICJeW1s6YWxwaGE6XS9dIgorCWV4dF9leHByID0gIl5cXCgiCisJc2VwX2V4cHIgPSAiXlxcfCQiCisJZ3JvdXBfZXhwciA9ICJeR3JwW1s6YWxudW06XV0rIgorCisJaW1tX2V4cHIgPSAiXltJSkFPXVtbOmxvd2VyOl1dIgorCWltbV9mbGFnWyJJYiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fQllURSkiCisJaW1tX2ZsYWdbIkpiIl0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9CWVRFKSIKKwlpbW1fZmxhZ1siSXciXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX1dPUkQpIgorCWltbV9mbGFnWyJJZCJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fRFdPUkQpIgorCWltbV9mbGFnWyJJcSJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fUVdPUkQpIgorCWltbV9mbGFnWyJBcCJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fUFRSKSIKKwlpbW1fZmxhZ1siSXoiXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX1ZXT1JEMzIpIgorCWltbV9mbGFnWyJKeiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fVldPUkQzMikiCisJaW1tX2ZsYWdbIkl2Il0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9WV09SRCkiCisJaW1tX2ZsYWdbIk9iIl0gPSAiSU5BVF9NT0ZGU0VUIgorCWltbV9mbGFnWyJPdiJdID0gIklOQVRfTU9GRlNFVCIKKworCW1vZHJtX2V4cHIgPSAiXihbQ0RFR01OUFFSU1VWVy9dW1s6bG93ZXI6XV0rfE5UQXxUWzAxMl0pIgorCWZvcmNlNjRfZXhwciA9ICJcXChbZGZdNjRcXCkiCisJcmV4X2V4cHIgPSAiXlJFWChcXC5bWFJXQl0rKSoiCisJZnB1X2V4cHIgPSAiXkVTQyIgIyBUT0RPCisKKwlscHJlZml4MV9leHByID0gIlxcKDY2XFwpIgorCWxwcmVmaXgyX2V4cHIgPSAiXFwoRjNcXCkiCisJbHByZWZpeDNfZXhwciA9ICJcXChGMlxcKSIKKwltYXhfbHByZWZpeCA9IDQKKworCXZleG9rX2V4cHIgPSAiXFwoVkVYXFwpIgorCXZleG9ubHlfZXhwciA9ICJcXChvVkVYXFwpIgorCisJcHJlZml4X2V4cHIgPSAiXFwoUHJlZml4XFwpIgorCXByZWZpeF9udW1bIk9wZXJhbmQtU2l6ZSJdID0gIklOQVRfUEZYX09QTkRTWiIKKwlwcmVmaXhfbnVtWyJSRVBORSJdID0gIklOQVRfUEZYX1JFUE5FIgorCXByZWZpeF9udW1bIlJFUC9SRVBFIl0gPSAiSU5BVF9QRlhfUkVQRSIKKwlwcmVmaXhfbnVtWyJMT0NLIl0gPSAiSU5BVF9QRlhfTE9DSyIKKwlwcmVmaXhfbnVtWyJTRUc9Q1MiXSA9ICJJTkFUX1BGWF9DUyIKKwlwcmVmaXhfbnVtWyJTRUc9RFMiXSA9ICJJTkFUX1BGWF9EUyIKKwlwcmVmaXhfbnVtWyJTRUc9RVMiXSA9ICJJTkFUX1BGWF9FUyIKKwlwcmVmaXhfbnVtWyJTRUc9RlMiXSA9ICJJTkFUX1BGWF9GUyIKKwlwcmVmaXhfbnVtWyJTRUc9R1MiXSA9ICJJTkFUX1BGWF9HUyIKKwlwcmVmaXhfbnVtWyJTRUc9U1MiXSA9ICJJTkFUX1BGWF9TUyIKKwlwcmVmaXhfbnVtWyJBZGRyZXNzLVNpemUiXSA9ICJJTkFUX1BGWF9BRERSU1oiCisJcHJlZml4X251bVsiMmJ5dGVzLVZFWCJdID0gIklOQVRfUEZYX1ZFWDIiCisJcHJlZml4X251bVsiM2J5dGVzLVZFWCJdID0gIklOQVRfUEZYX1ZFWDMiCisKKwljbGVhcl92YXJzKCkKK30KKworZnVuY3Rpb24gc2VtYW50aWNfZXJyb3IobXNnKSB7CisJcHJpbnQgIlNlbWFudGljIGVycm9yIGF0ICIgTlIgIjogIiBtc2cgPiAiL2Rldi9zdGRlcnIiCisJZXhpdCAxCit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykgeworCXByaW50ICJERUJVRzogIiBtc2cKK30KKworZnVuY3Rpb24gYXJyYXlfc2l6ZShhcnIsICAgaSxjKSB7CisJYyA9IDAKKwlmb3IgKGkgaW4gYXJyKQorCQljKysKKwlyZXR1cm4gYworfQorCisvXlRhYmxlOi8geworCXByaW50ICIvKiAiICQwICIgKi8iCisJaWYgKHRuYW1lICE9ICIiKQorCQlzZW1hbnRpY19lcnJvcigiSGl0IFRhYmxlOiBiZWZvcmUgRW5kVGFibGU6LiIpOworfQorCisvXlJlZmVycmVyOi8geworCWlmIChORiAhPSAxKSB7CisJCSMgZXNjYXBlIG9wY29kZSB0YWJsZQorCQlyZWYgPSAiIgorCQlmb3IgKGkgPSAyOyBpIDw9IE5GOyBpKyspCisJCQlyZWYgPSByZWYgJGkKKwkJZWlkID0gZXNjYXBlW3JlZl0KKwkJdG5hbWUgPSBzcHJpbnRmKCJpbmF0X2VzY2FwZV90YWJsZV8lZCIsIGVpZCkKKwl9Cit9CisKKy9eQVZYY29kZTovIHsKKwlpZiAoTkYgIT0gMSkgeworCQkjIEFWWC9lc2NhcGUgb3Bjb2RlIHRhYmxlCisJCWFpZCA9ICQyCisJCWlmIChnYWlkIDw9IGFpZCkKKwkJCWdhaWQgPSBhaWQgKyAxCisJCWlmICh0bmFtZSA9PSAiIikJIyBBVlggb25seSBvcGNvZGUgdGFibGUKKwkJCXRuYW1lID0gc3ByaW50ZigiaW5hdF9hdnhfdGFibGVfJWQiLCAkMikKKwl9CisJaWYgKGFpZCA9PSAtMSAmJiBlaWQgPT0gLTEpCSMgcHJpbWFyeSBvcGNvZGUgdGFibGUKKwkJdG5hbWUgPSAiaW5hdF9wcmltYXJ5X3RhYmxlIgorfQorCisvXkdycFRhYmxlOi8geworCXByaW50ICIvKiAiICQwICIgKi8iCisJaWYgKCEoJDIgaW4gZ3JvdXApKQorCQlzZW1hbnRpY19lcnJvcigiTm8gZ3JvdXA6ICIgJDIgKQorCWdpZCA9IGdyb3VwWyQyXQorCXRuYW1lID0gImluYXRfZ3JvdXBfdGFibGVfIiBnaWQKK30KKworZnVuY3Rpb24gcHJpbnRfdGFibGUodGJsLG5hbWUsZm10LG4pCit7CisJcHJpbnQgImNvbnN0IGluc25fYXR0cl90ICIgbmFtZSAiID0geyIKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlkID0gc3ByaW50ZihmbXQsIGkpCisJCWlmICh0YmxbaWRdKQorCQkJcHJpbnQgIglbIiBpZCAiXSA9ICIgdGJsW2lkXSAiLCIKKwl9CisJcHJpbnQgIn07IgorfQorCisvXkVuZFRhYmxlLyB7CisJaWYgKGdpZCAhPSAtMSkgeworCQkjIHByaW50IGdyb3VwIHRhYmxlcworCQlpZiAoYXJyYXlfc2l6ZSh0YWJsZSkgIT0gMCkgeworCQkJcHJpbnRfdGFibGUodGFibGUsIHRuYW1lICJbSU5BVF9HUk9VUF9UQUJMRV9TSVpFXSIsCisJCQkJICAgICIweCV4IiwgOCkKKwkJCWd0YWJsZVtnaWQsMF0gPSB0bmFtZQorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUxKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMSwgdG5hbWUgIl8xW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDFdID0gdG5hbWUgIl8xIgorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUyKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMiwgdG5hbWUgIl8yW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDJdID0gdG5hbWUgIl8yIgorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUzKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMywgdG5hbWUgIl8zW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDNdID0gdG5hbWUgIl8zIgorCQl9CisJfSBlbHNlIHsKKwkJIyBwcmludCBwcmltYXJ5L2VzY2FwZWQgdGFibGVzCisJCWlmIChhcnJheV9zaXplKHRhYmxlKSAhPSAwKSB7CisJCQlwcmludF90YWJsZSh0YWJsZSwgdG5hbWUgIltJTkFUX09QQ09ERV9UQUJMRV9TSVpFXSIsCisJCQkJICAgICIweCUwMngiLCAyNTYpCisJCQlldGFibGVbZWlkLDBdID0gdG5hbWUKKwkJCWlmIChhaWQgPj0gMCkKKwkJCQlhdGFibGVbYWlkLDBdID0gdG5hbWUKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMSkgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTEsdG5hbWUgIl8xW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsMV0gPSB0bmFtZSAiXzEiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwxXSA9IHRuYW1lICJfMSIKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMikgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTIsdG5hbWUgIl8yW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsMl0gPSB0bmFtZSAiXzIiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwyXSA9IHRuYW1lICJfMiIKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMykgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTMsdG5hbWUgIl8zW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsM10gPSB0bmFtZSAiXzMiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwzXSA9IHRuYW1lICJfMyIKKwkJfQorCX0KKwlwcmludCAiIgorCWNsZWFyX3ZhcnMoKQorfQorCitmdW5jdGlvbiBhZGRfZmxhZ3Mob2xkLG5ldykgeworCWlmIChvbGQgJiYgbmV3KQorCQlyZXR1cm4gb2xkICIgfCAiIG5ldworCWVsc2UgaWYgKG9sZCkKKwkJcmV0dXJuIG9sZAorCWVsc2UKKwkJcmV0dXJuIG5ldworfQorCisjIGNvbnZlcnQgb3BlcmFuZHMgdG8gZmxhZ3MuCitmdW5jdGlvbiBjb252ZXJ0X29wZXJhbmRzKG9wbmQsICAgICAgIGksaW1tLG1vZCkKK3sKKwlpbW0gPSBudWxsCisJbW9kID0gbnVsbAorCWZvciAoaSBpbiBvcG5kKSB7CisJCWkgID0gb3BuZFtpXQorCQlpZiAobWF0Y2goaSwgaW1tX2V4cHIpID09IDEpIHsKKwkJCWlmICghaW1tX2ZsYWdbaV0pCisJCQkJc2VtYW50aWNfZXJyb3IoIlVua25vd24gaW1tIG9wbmQ6ICIgaSkKKwkJCWlmIChpbW0pIHsKKwkJCQlpZiAoaSAhPSAiSWIiKQorCQkJCQlzZW1hbnRpY19lcnJvcigiU2Vjb25kIElNTSBlcnJvciIpCisJCQkJaW1tID0gYWRkX2ZsYWdzKGltbSwgIklOQVRfU0NORElNTSIpCisJCQl9IGVsc2UKKwkJCQlpbW0gPSBpbW1fZmxhZ1tpXQorCQl9IGVsc2UgaWYgKG1hdGNoKGksIG1vZHJtX2V4cHIpKQorCQkJbW9kID0gIklOQVRfTU9EUk0iCisJfQorCXJldHVybiBhZGRfZmxhZ3MoaW1tLCBtb2QpCit9CisKKy9eWzAtOWEtZl0rXDovIHsKKwlpZiAoTlIgPT0gMSkKKwkJbmV4dAorCSMgZ2V0IGluZGV4CisJaWR4ID0gIjB4IiBzdWJzdHIoJDEsIDEsIGluZGV4KCQxLCI6IikgLSAxKQorCWlmIChpZHggaW4gdGFibGUpCisJCXNlbWFudGljX2Vycm9yKCJSZWRlZmluZSAiIGlkeCAiIGluICIgdG5hbWUpCisKKwkjIGNoZWNrIGlmIGVzY2FwZWQgb3Bjb2RlCisJaWYgKCJlc2NhcGUiID09ICQyKSB7CisJCWlmICgkMyAhPSAiIyIpCisJCQlzZW1hbnRpY19lcnJvcigiTm8gZXNjYXBlZCBuYW1lIikKKwkJcmVmID0gIiIKKwkJZm9yIChpID0gNDsgaSA8PSBORjsgaSsrKQorCQkJcmVmID0gcmVmICRpCisJCWlmIChyZWYgaW4gZXNjYXBlKQorCQkJc2VtYW50aWNfZXJyb3IoIlJlZGVmaW5lIGVzY2FwZSAoIiByZWYgIikiKQorCQllc2NhcGVbcmVmXSA9IGdlaWQKKwkJZ2VpZCsrCisJCXRhYmxlW2lkeF0gPSAiSU5BVF9NQUtFX0VTQ0FQRSgiIGVzY2FwZVtyZWZdICIpIgorCQluZXh0CisJfQorCisJdmFyaWFudCA9IG51bGwKKwkjIGNvbnZlcnRzCisJaSA9IDIKKwl3aGlsZSAoaSA8PSBORikgeworCQlvcGNvZGUgPSAkKGkrKykKKwkJZGVsZXRlIG9wbmRzCisJCWV4dCA9IG51bGwKKwkJZmxhZ3MgPSBudWxsCisJCW9wbmQgPSBudWxsCisJCSMgcGFyc2Ugb25lIG9wY29kZQorCQlpZiAobWF0Y2goJGksIG9wbmRfZXhwcikpIHsKKwkJCW9wbmQgPSAkaQorCQkJc3BsaXQoJChpKyspLCBvcG5kcywgIiwiKQorCQkJZmxhZ3MgPSBjb252ZXJ0X29wZXJhbmRzKG9wbmRzKQorCQl9CisJCWlmIChtYXRjaCgkaSwgZXh0X2V4cHIpKQorCQkJZXh0ID0gJChpKyspCisJCWlmIChtYXRjaCgkaSwgc2VwX2V4cHIpKQorCQkJaSsrCisJCWVsc2UgaWYgKGkgPCBORikKKwkJCXNlbWFudGljX2Vycm9yKCRpICIgaXMgbm90IGEgc2VwYXJhdG9yIikKKworCQkjIGNoZWNrIGlmIGdyb3VwIG9wY29kZQorCQlpZiAobWF0Y2gob3Bjb2RlLCBncm91cF9leHByKSkgeworCQkJaWYgKCEob3Bjb2RlIGluIGdyb3VwKSkgeworCQkJCWdyb3VwW29wY29kZV0gPSBnZ2lkCisJCQkJZ2dpZCsrCisJCQl9CisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfTUFLRV9HUk9VUCgiIGdyb3VwW29wY29kZV0gIikiKQorCQl9CisJCSMgY2hlY2sgZm9yY2Uob3IgZGVmYXVsdCkgNjRiaXQKKwkJaWYgKG1hdGNoKGV4dCwgZm9yY2U2NF9leHByKSkKKwkJCWZsYWdzID0gYWRkX2ZsYWdzKGZsYWdzLCAiSU5BVF9GT1JDRTY0IikKKworCQkjIGNoZWNrIFJFWCBwcmVmaXgKKwkJaWYgKG1hdGNoKG9wY29kZSwgcmV4X2V4cHIpKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX01BS0VfUFJFRklYKElOQVRfUEZYX1JFWCkiKQorCisJCSMgY2hlY2sgY29wcm9jZXNzb3IgZXNjYXBlIDogVE9ETworCQlpZiAobWF0Y2gob3Bjb2RlLCBmcHVfZXhwcikpCisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfTU9EUk0iKQorCisJCSMgY2hlY2sgVkVYIG9ubHkgY29kZQorCQlpZiAobWF0Y2goZXh0LCB2ZXhvbmx5X2V4cHIpKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX1ZFWE9LIHwgSU5BVF9WRVhPTkxZIikKKworCQkjIGNoZWNrIFZFWCBvbmx5IGNvZGUKKwkJaWYgKG1hdGNoKGV4dCwgdmV4b2tfZXhwcikpCisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfVkVYT0siKQorCisJCSMgY2hlY2sgcHJlZml4ZXMKKwkJaWYgKG1hdGNoKGV4dCwgcHJlZml4X2V4cHIpKSB7CisJCQlpZiAoIXByZWZpeF9udW1bb3Bjb2RlXSkKKwkJCQlzZW1hbnRpY19lcnJvcigiVW5rbm93biBwcmVmaXg6ICIgb3Bjb2RlKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX01BS0VfUFJFRklYKCIgcHJlZml4X251bVtvcGNvZGVdICIpIikKKwkJfQorCQlpZiAobGVuZ3RoKGZsYWdzKSA9PSAwKQorCQkJY29udGludWUKKwkJIyBjaGVjayBpZiBsYXN0IHByZWZpeAorCQlpZiAobWF0Y2goZXh0LCBscHJlZml4MV9leHByKSkgeworCQkJbHB0YWJsZTFbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlMVtpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSBpZiAobWF0Y2goZXh0LCBscHJlZml4Ml9leHByKSkgeworCQkJbHB0YWJsZTJbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlMltpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSBpZiAobWF0Y2goZXh0LCBscHJlZml4M19leHByKSkgeworCQkJbHB0YWJsZTNbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlM1tpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSB7CisJCQl0YWJsZVtpZHhdID0gYWRkX2ZsYWdzKHRhYmxlW2lkeF0sZmxhZ3MpCisJCX0KKwl9CisJaWYgKHZhcmlhbnQpCisJCXRhYmxlW2lkeF0gPSBhZGRfZmxhZ3ModGFibGVbaWR4XSx2YXJpYW50KQorfQorCitFTkQgeworCWlmIChhd2tjaGVja2VkICE9ICIiKQorCQlleGl0IDEKKwkjIHByaW50IGVzY2FwZSBvcGNvZGUgbWFwJ3MgYXJyYXkKKwlwcmludCAiLyogRXNjYXBlIG9wY29kZSBtYXAgYXJyYXkgKi8iCisJcHJpbnQgImNvbnN0IGluc25fYXR0cl90IGNvbnN0ICppbmF0X2VzY2FwZV90YWJsZXNbSU5BVF9FU0NfTUFYICsgMV0iIFwKKwkgICAgICAiW0lOQVRfTFNUUEZYX01BWCArIDFdID0geyIKKwlmb3IgKGkgPSAwOyBpIDwgZ2VpZDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbWF4X2xwcmVmaXg7IGorKykKKwkJCWlmIChldGFibGVbaSxqXSkKKwkJCQlwcmludCAiCVsiaSJdWyJqIl0gPSAiZXRhYmxlW2ksal0iLCIKKwlwcmludCAifTtcbiIKKwkjIHByaW50IGdyb3VwIG9wY29kZSBtYXAncyBhcnJheQorCXByaW50ICIvKiBHcm91cCBvcGNvZGUgbWFwIGFycmF5ICovIgorCXByaW50ICJjb25zdCBpbnNuX2F0dHJfdCBjb25zdCAqaW5hdF9ncm91cF90YWJsZXNbSU5BVF9HUlBfTUFYICsgMV0iXAorCSAgICAgICJbSU5BVF9MU1RQRlhfTUFYICsgMV0gPSB7IgorCWZvciAoaSA9IDA7IGkgPCBnZ2lkOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBtYXhfbHByZWZpeDsgaisrKQorCQkJaWYgKGd0YWJsZVtpLGpdKQorCQkJCXByaW50ICIJWyJpIl1bImoiXSA9ICJndGFibGVbaSxqXSIsIgorCXByaW50ICJ9O1xuIgorCSMgcHJpbnQgQVZYIG9wY29kZSBtYXAncyBhcnJheQorCXByaW50ICIvKiBBVlggb3Bjb2RlIG1hcCBhcnJheSAqLyIKKwlwcmludCAiY29uc3QgaW5zbl9hdHRyX3QgY29uc3QgKmluYXRfYXZ4X3RhYmxlc1tYODZfVkVYX01fTUFYICsgMV0iXAorCSAgICAgICJbSU5BVF9MU1RQRlhfTUFYICsgMV0gPSB7IgorCWZvciAoaSA9IDA7IGkgPCBnYWlkOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBtYXhfbHByZWZpeDsgaisrKQorCQkJaWYgKGF0YWJsZVtpLGpdKQorCQkJCXByaW50ICIJWyJpIl1bImoiXSA9ICJhdGFibGVbaSxqXSIsIgorCXByaW50ICJ9OyIKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIxNGRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5CisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgdW5saWtlbHkoY29uZCkgKGNvbmQpCisKKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGluYXQuYz4KKyNpbmNsdWRlIDxpbnNuLmM+CisKKy8qCisgKiBUZXN0IG9mIGluc3RydWN0aW9uIGFuYWx5c2lzIGluIGdlbmVyYWwgYW5kIGluc25fZ2V0X2xlbmd0aCgpIGluCisgKiBwYXJ0aWN1bGFyLiAgU2VlIGlmIGluc25fZ2V0X2xlbmd0aCgpIGFuZCB0aGUgZGlzYXNzZW1ibGVyIGFncmVlCisgKiBvbiB0aGUgbGVuZ3RoIG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaW4gYW4gZWxmIGRpc2Fzc2VtYmx5LgorICoKKyAqIFVzYWdlOiBvYmpkdW1wIC1kIGEub3V0IHwgYXdrIC1mIGRpc3RpbGwuYXdrIHwgLi90ZXN0X2dldF9sZW4KKyAqLworCitjb25zdCBjaGFyICpwcm9nOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCB4ODZfNjQ7CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogb2JqZHVtcCAtZCBhLm91dCB8IGF3ayAtZiBkaXN0aWxsLmF3ayB8IgorCQkiICVzIFsteXwtbl0gWy12XSBcbiIsIHByb2cpOworCWZwcmludGYoc3RkZXJyLCAiXHQteQk2NGJpdCBtb2RlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LW4JMzJiaXQgbW9kZVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC12CXZlcmJvc2UgbW9kZVxuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgbWFsZm9ybWVkX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxpbmVfbnIpCit7CisJZnByaW50ZihzdGRlcnIsICIlczogbWFsZm9ybWVkIGxpbmUgJWQ6XG4lcyIsIHByb2csIGxpbmVfbnIsIGxpbmUpOworCWV4aXQoMyk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZmllbGQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmluZGVudCwKKwkJICAgICAgIHN0cnVjdCBpbnNuX2ZpZWxkICpmaWVsZCkKK3sKKwlmcHJpbnRmKGZwLCAiJXMuJXMgPSB7XG4iLCBpbmRlbnQsIG5hbWUpOworCWZwcmludGYoZnAsICIlc1x0LnZhbHVlID0gJWQsIGJ5dGVzW10gPSB7JXgsICV4LCAleCwgJXh9LFxuIiwKKwkJaW5kZW50LCBmaWVsZC0+dmFsdWUsIGZpZWxkLT5ieXRlc1swXSwgZmllbGQtPmJ5dGVzWzFdLAorCQlmaWVsZC0+Ynl0ZXNbMl0sIGZpZWxkLT5ieXRlc1szXSk7CisJZnByaW50ZihmcCwgIiVzXHQuZ290ID0gJWQsIC5uYnl0ZXMgPSAlZH0sXG4iLCBpbmRlbnQsCisJCWZpZWxkLT5nb3QsIGZpZWxkLT5uYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2luc24oRklMRSAqZnAsIHN0cnVjdCBpbnNuICppbnNuKQoreworCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHsgXG4iKTsKKwlkdW1wX2ZpZWxkKGZwLCAicHJlZml4ZXMiLCAiXHQiLAkmaW5zbi0+cHJlZml4ZXMpOworCWR1bXBfZmllbGQoZnAsICJyZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnJleF9wcmVmaXgpOworCWR1bXBfZmllbGQoZnAsICJ2ZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnZleF9wcmVmaXgpOworCWR1bXBfZmllbGQoZnAsICJvcGNvZGUiLCAiXHQiLAkJJmluc24tPm9wY29kZSk7CisJZHVtcF9maWVsZChmcCwgIm1vZHJtIiwgIlx0IiwJCSZpbnNuLT5tb2RybSk7CisJZHVtcF9maWVsZChmcCwgInNpYiIsICJcdCIsCQkmaW5zbi0+c2liKTsKKwlkdW1wX2ZpZWxkKGZwLCAiZGlzcGxhY2VtZW50IiwgIlx0IiwJJmluc24tPmRpc3BsYWNlbWVudCk7CisJZHVtcF9maWVsZChmcCwgImltbWVkaWF0ZTEiLCAiXHQiLAkmaW5zbi0+aW1tZWRpYXRlMSk7CisJZHVtcF9maWVsZChmcCwgImltbWVkaWF0ZTIiLCAiXHQiLAkmaW5zbi0+aW1tZWRpYXRlMik7CisJZnByaW50ZihmcCwgIlx0LmF0dHIgPSAleCwgLm9wbmRfYnl0ZXMgPSAlZCwgLmFkZHJfYnl0ZXMgPSAlZCxcbiIsCisJCWluc24tPmF0dHIsIGluc24tPm9wbmRfYnl0ZXMsIGluc24tPmFkZHJfYnl0ZXMpOworCWZwcmludGYoZnAsICJcdC5sZW5ndGggPSAlZCwgLng4Nl82NCA9ICVkLCAua2FkZHIgPSAlcH1cbiIsCisJCWluc24tPmxlbmd0aCwgaW5zbi0+eDg2XzY0LCBpbnNuLT5rYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjOworCXByb2cgPSBhcmd2WzBdOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAieW52IikpICE9IC0xKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICd5JzoKKwkJCXg4Nl82NCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQl4ODZfNjQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJdmVyYm9zZSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgQlVGU0laRSAyNTYKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgbGluZVtCVUZTSVpFXSwgc3ltW0JVRlNJWkVdID0gIjx1bmtub3duPiI7CisJdW5zaWduZWQgY2hhciBpbnNuX2J1ZlsxNl07CisJc3RydWN0IGluc24gaW5zbjsKKwlpbnQgaW5zbnMgPSAwLCBjOworCWludCB3YXJuaW5ncyA9IDA7CisKKwlwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOworCisJd2hpbGUgKGZnZXRzKGxpbmUsIEJVRlNJWkUsIHN0ZGluKSkgeworCQljaGFyIGNvcHlbQlVGU0laRV0sICpzLCAqdGFiMSwgKnRhYjI7CisJCWludCBuYiA9IDA7CisJCXVuc2lnbmVkIGludCBiOworCisJCWlmIChsaW5lWzBdID09ICc8JykgeworCQkJLyogU3ltYm9sIGxpbmUgKi8KKwkJCXN0cmNweShzeW0sIGxpbmUpOworCQkJY29udGludWU7CisJCX0KKworCQlpbnNucysrOworCQltZW1zZXQoaW5zbl9idWYsIDAsIDE2KTsKKwkJc3RyY3B5KGNvcHksIGxpbmUpOworCQl0YWIxID0gc3RyY2hyKGNvcHksICdcdCcpOworCQlpZiAoIXRhYjEpCisJCQltYWxmb3JtZWRfbGluZShsaW5lLCBpbnNucyk7CisJCXMgPSB0YWIxICsgMTsKKwkJcyArPSBzdHJzcG4ocywgIiAiKTsKKwkJdGFiMiA9IHN0cmNocihzLCAnXHQnKTsKKwkJaWYgKCF0YWIyKQorCQkJbWFsZm9ybWVkX2xpbmUobGluZSwgaW5zbnMpOworCQkqdGFiMiA9ICdcMCc7CS8qIENoYXJhY3RlcnMgYmV5b25kIHRhYjIgYXJlbid0IGV4YW1pbmVkICovCisJCXdoaWxlIChzIDwgdGFiMikgeworCQkJaWYgKHNzY2FuZihzLCAiJXgiLCAmYikgPT0gMSkgeworCQkJCWluc25fYnVmW25iKytdID0gKHVuc2lnbmVkIGNoYXIpIGI7CisJCQkJcyArPSAzOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJLyogRGVjb2RlIGFuIGluc3RydWN0aW9uICovCisJCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHg4Nl82NCk7CisJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CisJCWlmIChpbnNuLmxlbmd0aCAhPSBuYikgeworCQkJd2FybmluZ3MrKzsKKwkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogJXMgZm91bmQgZGlmZmVyZW5jZSBhdCAlc1xuIiwKKwkJCQlwcm9nLCBzeW0pOworCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiAlcyIsIGxpbmUpOworCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBvYmpkdW1wIHNheXMgJWQgYnl0ZXMsIGJ1dCAiCisJCQkJImluc25fZ2V0X2xlbmd0aCgpIHNheXMgJWRcbiIsIG5iLAorCQkJCWluc24ubGVuZ3RoKTsKKwkJCWlmICh2ZXJib3NlKQorCQkJCWR1bXBfaW5zbihzdGRlcnIsICZpbnNuKTsKKwkJfQorCX0KKwlpZiAod2FybmluZ3MpCisJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogZGVjb2RlZCBhbmQgY2hlY2tlZCAlZCIKKwkJCSIgaW5zdHJ1Y3Rpb25zIHdpdGggJWQgd2FybmluZ3NcbiIsIGluc25zLCB3YXJuaW5ncyk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlN1Y2NlZWQ6IGRlY29kZWQgYW5kIGNoZWNrZWQgJWQiCisJCQkiIGluc3RydWN0aW9uc1xuIiwgaW5zbnMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDM0Mzk2MTYuLmRmYmY3MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIHZvaWQgeGVuX2NwdWlkKHVuc2lnbmVkIGludCAqYXgsIHVuc2lnbmVkIGludCAqYngsCiAJCSAgICAgIHVuc2lnbmVkIGludCAqY3gsIHVuc2lnbmVkIGludCAqZHgpCiB7CisJdW5zaWduZWQgbWFza2VieCA9IH4wOwogCXVuc2lnbmVkIG1hc2tlY3ggPSB+MDsKIAl1bnNpZ25lZCBtYXNrZWR4ID0gfjA7CiAKQEAgLTE4NSw5ICsxODYsMTYgQEAKIAkgKiBNYXNrIG91dCBpbmNvbnZlbmllbnQgZmVhdHVyZXMsIHRvIHRyeSBhbmQgZGlzYWJsZSBhcyBtYW55CiAJICogdW5zdXBwb3J0ZWQga2VybmVsIHN1YnN5c3RlbXMgYXMgcG9zc2libGUuCiAJICovCi0JaWYgKCpheCA9PSAxKSB7CisJc3dpdGNoICgqYXgpIHsKKwljYXNlIDE6CiAJCW1hc2tlY3ggPSBjcHVpZF9sZWFmMV9lY3hfbWFzazsKIAkJbWFza2VkeCA9IGNwdWlkX2xlYWYxX2VkeF9tYXNrOworCQlicmVhazsKKworCWNhc2UgMHhiOgorCQkvKiBTdXBwcmVzcyBleHRlbmRlZCB0b3BvbG9neSBzdHVmZiAqLworCQltYXNrZWJ4ID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJYXNtKFhFTl9FTVVMQVRFX1BSRUZJWCAiY3B1aWQiCkBAIC0xOTcsNiArMjA1LDcgQEAKIAkJICAiPWQiICgqZHgpCiAJCTogIjAiICgqYXgpLCAiMiIgKCpjeCkpOwogCisJKmJ4ICY9IG1hc2tlYng7CiAJKmN4ICY9IG1hc2tlY3g7CiAJKmR4ICY9IG1hc2tlZHg7CiB9CkBAIC0xMDc1LDYgKzEwODQsOCBAQAogCSAqIFNldCB1cCBzb21lIHBhZ2V0YWJsZSBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcgdG8gc2V0IGFueSBwdGVzLgogCSAqLwogCisJeGVuX2luaXRfbW11X29wcygpOworCiAJLyogUHJldmVudCB1bndhbnRlZCBiaXRzIGZyb20gYmVpbmcgc2V0IGluIFBURXMuICovCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX0dMT0JBTDsKIAlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQpAQCAtMTA5OSw3ICsxMTEwLDYgQEAKIAkgKi8KIAl4ZW5fc2V0dXBfc3RhY2twcm90ZWN0b3IoKTsKIAotCXhlbl9pbml0X21tdV9vcHMoKTsKIAl4ZW5faW5pdF9pcnFfb3BzKCk7CiAJeGVuX2luaXRfY3B1aWRfbWFzaygpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCBhYzBmYTEwLi43MWRhNTExIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50IGZmID0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCWludCByd19mbGFnczsKIAotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDA2OWE2MTAuLmFhMWU5NTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAJQ0ZRX0NGUVFfRkxBR19zbGljZV9uZXcsCS8qIG5vIHJlcXVlc3RzIGRpc3BhdGNoZWQgaW4gc2xpY2UgKi8KIAlDRlFfQ0ZRUV9GTEFHX3N5bmMsCQkvKiBzeW5jaHJvbm91cyBxdWV1ZSAqLwogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGhhcyBkb25lIGEgY29vcCBqdW1wIG9mIHRoZSBxdWV1ZSAqLworCUNGUV9DRlFRX0ZMQUdfY29vcF9wcmVlbXB0LAkvKiBjb29wIHByZWVtcHQgKi8KIH07CiAKICNkZWZpbmUgQ0ZRX0NGUVFfRk5TKG5hbWUpCQkJCQkJXApAQCAtMjIyLDYgKzIyMyw3IEBACiBDRlFfQ0ZRUV9GTlMoc2xpY2VfbmV3KTsKIENGUV9DRlFRX0ZOUyhzeW5jKTsKIENGUV9DRlFRX0ZOUyhjb29wKTsKK0NGUV9DRlFRX0ZOUyhjb29wX3ByZWVtcHQpOwogI3VuZGVmIENGUV9DRlFRX0ZOUwogCiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKQEAgLTk0NSwxMCArOTQ3LDEzIEBACiB7CiAJaWYgKCFjZnFxKSB7CiAJCWNmcXEgPSBjZnFfZ2V0X25leHRfcXVldWUoY2ZxZCk7Ci0JCWlmIChjZnFxKQorCQlpZiAoY2ZxcSAmJiAhY2ZxX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpKQogCQkJY2ZxX2NsZWFyX2NmcXFfY29vcChjZnFxKTsKIAl9CiAKKwlpZiAoY2ZxcSkKKwkJY2ZxX2NsZWFyX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpOworCiAJX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShjZnFkLCBjZnFxKTsKIAlyZXR1cm4gY2ZxcTsKIH0KQEAgLTIwNTEsNyArMjA1Niw3IEBACiAJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCiAJICovCiAJaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCkBAIC0yMDY2LDggKzIwNzEsMTYgQEAKIAkgKiBpZiB0aGlzIHJlcXVlc3QgaXMgYXMtZ29vZCBhcyBvbmUgd2Ugd291bGQgZXhwZWN0IGZyb20gdGhlCiAJICogY3VycmVudCBjZnFxLCBsZXQgaXQgcHJlZW1wdAogCSAqLwotCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpKQorCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpICYmICghY2ZxX2NmcXFfY29vcChuZXdfY2ZxcSkgfHwKKwkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPT0gMSkpIHsKKwkJLyoKKwkJICogTWFyayBuZXcgcXVldWUgY29vcF9wcmVlbXB0LCBzbyBpdHMgY29vcCBmbGFnIHdpbGwgbm90IGJlCisJCSAqIGNsZWFyZWQgd2hlbiBuZXcgcXVldWUgZ2V0cyBzY2hlZHVsZWQgYXQgdGhlIHZlcnkgZmlyc3QgdGltZQorCQkgKi8KKwkJY2ZxX21hcmtfY2ZxcV9jb29wX3ByZWVtcHQobmV3X2NmcXEpOworCQljZnFfbWFya19jZnFxX2Nvb3AobmV3X2NmcXEpOwogCQlyZXR1cm4gdHJ1ZTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCmluZGV4IGI4OGRiNmQuLjZiNWNjNGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCiAvKioKLSAqIHNjcmliYmxlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQorICogcHFfc2NyaWJibGVfcGFnZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgb3IgUSBidWZmZXIgZm9yCisgKiBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKICAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzY3JpYmJsZTsKLQotc3RhdGljIGJvb2wgaXNfcmFpZDZfemVyb19ibG9jayhzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlyZXR1cm4gcCA9PSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Ci19CitzdGF0aWMgc3RydWN0IHBhZ2UgKnBxX3NjcmliYmxlX3BhZ2U7CiAKIC8qIHRoZSBzdHJ1Y3QgcGFnZSAqYmxvY2tzW10gcGFyYW1ldGVyIHBhc3NlZCB0byBhc3luY19nZW5fc3luZHJvbWUoKQogICogYW5kIGFzeW5jX3N5bmRyb21lX3ZhbCgpIGNvbnRhaW5zIHRoZSAnUCcgZGVzdGluYXRpb24gYWRkcmVzcyBhdApAQCAtODMsNyArNzksNyBAQAogCSAqIHNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5CiAJICovCiAJZm9yIChpID0gMCwgaWR4ID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKQorCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZG1hX3NyY1tpZHhdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBibG9ja3NbaV0sIG9mZnNldCwgbGVuLAogCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjAsOSArMTU2LDkgQEAKIAkJc3JjcyA9ICh2b2lkICoqKSBibG9ja3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkgewogCQkJQlVHX09OKGkgPiBkaXNrcyAtIDMpOyAvKiBQIG9yIFEgY2FuJ3QgYmUgemVybyAqLwotCQkJc3Jjc1tpXSA9IGJsb2Nrc1tpXTsKKwkJCXNyY3NbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOwogCQl9IGVsc2UKIAkJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKSArIG9mZnNldDsKIAl9CkBAIC0xODYsMTAgKzE4MiwxNCBAQAogICogYmxvY2tzW2Rpc2tzLTFdIHRvIE5VTEwuICBXaGVuIFAgb3IgUSBpcyBvbWl0dGVkICdsZW4nIG11c3QgYmUgPD0KICAqIFBBR0VfU0laRSBhcyBhIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhpcyBzaXplIGlzIHVzZWQgaW4gdGhlCiAgKiBzeW5jaHJvbm91cyBwYXRoLiAgJ2Rpc2tzJyBhbHdheXMgYWNjb3VudHMgZm9yIGJvdGggZGVzdGluYXRpb24KLSAqIGJ1ZmZlcnMuCisgKiBidWZmZXJzLiAgSWYgYW55IHNvdXJjZSBidWZmZXJzIChibG9ja3NbaV0gd2hlcmUgaSA8IGRpc2tzIC0gMikgYXJlCisgKiBzZXQgdG8gTlVMTCB0aG9zZSBidWZmZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmFpZDZfemVyb19wYWdlCisgKiBpbiB0aGUgc3luY2hyb25vdXMgcGF0aCBhbmQgb21pdHRlZCBpbiB0aGUgaGFyZHdhcmUtYXN5bmNocm9ub3VzCisgKiBwYXRoLgogICoKICAqICdibG9ja3MnIG5vdGU6IGlmIHN1Ym1pdC0+c2NyaWJibGUgaXMgTlVMTCB0aGVuIHRoZSBjb250ZW50cyBvZgotICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJyaWRkZW4KKyAqICdibG9ja3MnIG1heSBiZSBvdmVyd3JpdHRlbiB0byBwZXJmb3JtIGFkZHJlc3MgY29udmVyc2lvbnMKKyAqIChkbWFfbWFwX3BhZ2UoKSBvciBwYWdlX2FkZHJlc3MoKSkuCiAgKi8KIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBhc3luY19nZW5fc3luZHJvbWUoc3RydWN0IHBhZ2UgKipibG9ja3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBkaXNrcywKQEAgLTIyNywxMSArMjI3LDExIEBACiAJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCiAJaWYgKCFQKGJsb2NrcywgZGlza3MpKSB7Ci0JCVAoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUChibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlpZiAoIVEoYmxvY2tzLCBkaXNrcykpIHsKLQkJUShibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlRKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWRvX3N5bmNfZ2VuX3N5bmRyb21lKGJsb2Nrcywgb2Zmc2V0LCBkaXNrcywgbGVuLCBzdWJtaXQpOwpAQCAtMjY1LDggKzI2NSwxMCBAQAogCQkJCQkJICAgICAgbGVuKTsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlID0gY2hhbiA/IGNoYW4tPmRldmljZSA6IE5VTEw7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwl1bnNpZ25lZCBjaGFyIGNvZWZzW2Rpc2tzLTJdOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzID0gc3VibWl0LT5jYl9mbiA/IERNQV9QUkVQX0lOVEVSUlVQVCA6IDA7CiAJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IE5VTEw7CisJaW50IHNyY19jbnQgPSAwOwogCiAJQlVHX09OKGRpc2tzIDwgNCk7CiAKQEAgLTI4NSwyMiArMjg3LDMyIEBACiAJCQkgX19mdW5jX18sIGRpc2tzLCBsZW4pOwogCQlpZiAoIVAoYmxvY2tzLCBkaXNrcykpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfUFFfRElTQUJMRV9QOworCQllbHNlCisJCQlwcVswXSA9IGRtYV9tYXBfcGFnZShkZXYsIFAoYmxvY2tzLCBkaXNrcyksCisJCQkJCSAgICAgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghUShibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisJCWVsc2UKKwkJCXBxWzFdID0gZG1hX21hcF9wYWdlKGRldiwgUShibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwogCQlpZiAoc3VibWl0LT5mbGFncyAmIEFTWU5DX1RYX0ZFTkNFKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX0ZFTkNFOwotCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykKIAkJCWlmIChsaWtlbHkoYmxvY2tzW2ldKSkgewotCQkJCUJVR19PTihpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpOwotCQkJCWRtYV9zcmNbaV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCi0JCQkJCQkJICBvZmZzZXQsIGxlbiwKLQkJCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQkJCWRtYV9zcmNbc3JjX2NudF0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCisJCQkJCQkJCW9mZnNldCwgbGVuLAorCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCQljb2Vmc1tzcmNfY250XSA9IHJhaWQ2X2dmZXhwW2ldOworCQkJCXNyY19jbnQrKzsKIAkJCX0KIAogCQlmb3IgKDs7KSB7CiAJCQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3BxX3ZhbChjaGFuLCBwcSwgZG1hX3NyYywKLQkJCQkJCQkgICAgZGlza3MgLSAyLAotCQkJCQkJCSAgICByYWlkNl9nZmV4cCwKKwkJCQkJCQkgICAgc3JjX2NudCwKKwkJCQkJCQkgICAgY29lZnMsCiAJCQkJCQkJICAgIGxlbiwgcHFyZXMsCiAJCQkJCQkJICAgIGRtYV9mbGFncyk7CiAJCQlpZiAobGlrZWx5KHR4KSkKQEAgLTM3Myw5ICszODUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY19wcV9pbml0KHZvaWQpCiB7Ci0Jc2NyaWJibGUgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXBxX3NjcmliYmxlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCi0JaWYgKHNjcmliYmxlKQorCWlmIChwcV9zY3JpYmJsZV9wYWdlKQogCQlyZXR1cm4gMDsKIAogCXByX2VycigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBzcGFyZSBwYWdlXG4iLCBfX2Z1bmNfXyk7CkBAIC0zODUsNyArMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3BxX2V4aXQodm9pZCkKIHsKLQlwdXRfcGFnZShzY3JpYmJsZSk7CisJcHV0X3BhZ2UocHFfc2NyaWJibGVfcGFnZSk7CiB9CiAKIG1vZHVsZV9pbml0KGFzeW5jX3BxX2luaXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwppbmRleCA2ZDczZGRlLi45NDNmMmFiIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwpAQCAtMTMxLDggKzEzMSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl80KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzQoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICphLCAqYjsKQEAgLTE0Myw4ICsxNDMsOCBAQAogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7CiAKLQlwID0gYmxvY2tzWzQtMl07Ci0JcSA9IGJsb2Nrc1s0LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAogCWEgPSBibG9ja3NbZmFpbGFdOwogCWIgPSBibG9ja3NbZmFpbGJdOwpAQCAtMTcwLDggKzE3MCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl81KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzUoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICpnLCAqZHAsICpkcTsKQEAgLTE4MSwyMSArMTgxLDIyIEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOwotCWludCB1bmluaXRpYWxpemVkX3Zhcihnb29kKTsKLQlpbnQgaTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWdvb2Rfc3JjcyA9IDA7CisJZ29vZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWlmIChpID09IGZhaWxhIHx8IGkgPT0gZmFpbGIpCiAJCQljb250aW51ZTsKLQkJZWxzZSB7Ci0JCQlnb29kID0gaTsKLQkJCWJyZWFrOwotCQl9CisJCWdvb2QgPSBpOworCQlnb29kX3NyY3MrKzsKIAl9Ci0JQlVHX09OKGkgPj0gMyk7CisJQlVHX09OKGdvb2Rfc3JjcyA+IDEpOwogCi0JcCA9IGJsb2Nrc1s1LTJdOwotCXEgPSBibG9ja3NbNS0xXTsKKwlwID0gYmxvY2tzW2Rpc2tzLTJdOworCXEgPSBibG9ja3NbZGlza3MtMV07CiAJZyA9IGJsb2Nrc1tnb29kXTsKIAogCS8qIENvbXB1dGUgc3luZHJvbWUgd2l0aCB6ZXJvIGZvciB0aGUgbWlzc2luZyBkYXRhIHBhZ2VzCkBAIC0yNjMsMTAgKzI2NCwxMCBAQAogCSAqIGRlbHRhIHAgYW5kIGRlbHRhIHEKIAkgKi8KIAlkcCA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0yXSA9IGRwOwogCWRxID0gYmxvY2tzW2ZhaWxiXTsKLQlibG9ja3NbZmFpbGJdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxiXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTFdID0gZHE7CiAKIAlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwgc2NyaWJibGUpOwpAQCAtMzIzLDYgKzMyNCw4IEBACiBhc3luY19yYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCiAJCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKKwlpbnQgbm9uX3plcm9fc3JjcywgaTsKKwogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKGZhaWxiIDwgZmFpbGEpCiAJCXN3YXAoZmFpbGEsIGZhaWxiKTsKQEAgLTMzNCwxMSArMzM3LDEzIEBACiAJICovCiAJaWYgKCFzdWJtaXQtPnNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQgKikgcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgcHRycyk7CiAKQEAgLTM0NywxOSArMzUyLDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXN3aXRjaCAoZGlza3MpIHsKLQljYXNlIDQ6CisJbm9uX3plcm9fc3JjcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTIgJiYgbm9uX3plcm9fc3JjcyA8IDQ7IGkrKykKKwkJaWYgKGJsb2Nrc1tpXSkKKwkJCW5vbl96ZXJvX3NyY3MrKzsKKwlzd2l0Y2ggKG5vbl96ZXJvX3NyY3MpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQkvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgc291cmNlcyAtIHRoZSBmYWlsZWQgZGV2aWNlcy4gKi8KKwkJQlVHKCk7CisKKwljYXNlIDI6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHplcm8gc291cmNlIHBxCiAJCSAqIG9wZXJhdGlvbiAoaW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzIGNhc2UpLCBzbwotCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgNCBkaXNrIHNwZWNpYWwgY2FzZQorCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNCBkaXNrIGFycmF5IHdpdGgKKwkJICogYm90aCBkYXRhIGRpc2tzIG1pc3NpbmcuCiAJCSAqLwotCQlyZXR1cm4gX18yZGF0YV9yZWNvdl80KGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKLQljYXNlIDU6CisJCXJldHVybiBfXzJkYXRhX3JlY292XzQoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKKwljYXNlIDM6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHNpbmdsZQogCQkgKiBzb3VyY2UgcHEgb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMKLQkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA1IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGNhc2UpLCBzbyBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNSBkaXNrCisJCSAqIGFycmF5IHdpdGggMiBvZiAzIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzUoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCQlyZXR1cm4gX18yZGF0YV9yZWNvdl81KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfbihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwogCX0KQEAgLTM4NSw2ICs0MDEsNyBAQAogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiA9IHN1Ym1pdC0+Y2JfZm47CiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCXN0cnVjdCBwYWdlICpzcmNzWzJdOwogCiAJcHJfZGVidWcoIiVzOiBkaXNrczogJWQgbGVuOiAlenVcbiIsIF9fZnVuY19fLCBkaXNrcywgYnl0ZXMpOwpAQCAtMzk0LDExICs0MTEsMTMgQEAKIAkgKi8KIAlpZiAoIXNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJCWVsc2UKKwkJCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CiAKIAkJcmFpZDZfZGF0YXBfcmVjb3YoZGlza3MsIGJ5dGVzLCBmYWlsYSwgcHRycyk7CiAKQEAgLTQwNyw2ICs0MjYsMjAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoaSA9PSBmYWlsYSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYmxvY2tzW2ldKSB7CisJCQlnb29kID0gaTsKKwkJCWdvb2Rfc3JjcysrOworCQkJaWYgKGdvb2Rfc3JjcyA+IDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJQlVHX09OKGdvb2Rfc3JjcyA9PSAwKTsKKwogCXAgPSBibG9ja3NbZGlza3MtMl07CiAJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIApAQCAtNDE0LDE0ICs0NDcsMTMgQEAKIAkgKiBVc2UgdGhlIGRlYWQgZGF0YSBwYWdlIGFzIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBkZWx0YSBxCiAJICovCiAJZHEgPSBibG9ja3NbZmFpbGFdOwotCWJsb2Nrc1tmYWlsYV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGFdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAotCS8qIGluIHRoZSA0IGRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKLQkgKiBtdWx0aXBsaWNhdGlvbgorCS8qIGluIHRoZSA0LWRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKKwkgKiBtdWx0aXBsaWNhdGlvbiB3aXRoIHRoZSBvbmUgZ29vZCBkYXRhIGJsb2NrLgogCSAqLwotCWlmIChkaXNrcyA9PSA0KSB7Ci0JCWludCBnb29kID0gZmFpbGEgPT0gMCA/IDEgOiAwOworCWlmIChnb29kX3NyY3MgPT0gMSkgewogCQlzdHJ1Y3QgcGFnZSAqZyA9IGJsb2Nrc1tnb29kXTsKIAogCQlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwppbmRleCBiNDU5YTkwLi43OTE4MmRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCkBAIC00NCwyMCArNDQsMjMgQEAKIAl2b2lkICpjYl9wYXJhbV9vcmlnID0gc3VibWl0LT5jYl9wYXJhbTsKIAllbnVtIGFzeW5jX3R4X2ZsYWdzIGZsYWdzX29yaWcgPSBzdWJtaXQtPmZsYWdzOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzOwotCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgeG9yX3NyY19jbnQgPSAwOwogCWRtYV9hZGRyX3QgZG1hX2Rlc3Q7CiAKIAkvKiBtYXAgdGhlIGRlc3QgYmlkcmVjdGlvbmFsIGluIGNhc2UgaXQgaXMgcmUtdXNlZCBhcyBhIHNvdXJjZSAqLwogCWRtYV9kZXN0ID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBkZXN0LCBvZmZzZXQsIGxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKIAkJLyogb25seSBtYXAgdGhlIGRlc3Qgb25jZSAqLworCQlpZiAoIXNyY19saXN0W2ldKQorCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShzcmNfbGlzdFtpXSA9PSBkZXN0KSkgewotCQkJZG1hX3NyY1tpXSA9IGRtYV9kZXN0OworCQkJZG1hX3NyY1t4b3Jfc3JjX2NudCsrXSA9IGRtYV9kZXN0OwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKLQkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCiAJd2hpbGUgKHNyY19jbnQpIHsKIAkJc3VibWl0LT5mbGFncyA9IGZsYWdzX29yaWc7CkBAIC0xMjMsNyArMTI2LDcgQEAKIAkgICAgaW50IHNyY19jbnQsIHNpemVfdCBsZW4sIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJaW50IGk7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJaW50IHNyY19vZmYgPSAwOwogCXZvaWQgKmRlc3RfYnVmOwogCXZvaWQgKipzcmNzOwpAQCAtMTM1LDggKzEzOCw5IEBACiAKIAkvKiBjb252ZXJ0IHRvIGJ1ZmZlciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCi0JCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OwotCisJCWlmIChzcmNfbGlzdFtpXSkKKwkJCXNyY3NbeG9yX3NyY19jbnQrK10gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OworCXNyY19jbnQgPSB4b3Jfc3JjX2NudDsKIAkvKiBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCWRlc3RfYnVmID0gcGFnZV9hZGRyZXNzKGRlc3QpICsgb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDBlZDQyZDguLjkzZDJjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCWRlcGVuZHMgb24gWDg2CiAJaGVscAogCSAgQUNQSSA0LjAgZGVmaW5lcyBwcm9jZXNzb3IgQWdncmVnYXRvciwgd2hpY2ggZW5hYmxlcyBPUyB0byBwZXJmb3JtCi0JICBzcGVjZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKKwkgIHNwZWNpZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKIAkgIHByb2Nlc3NvcnMgaW4gdGhlIHBsYXRmb3JtLiBDdXJyZW50bHkgb25seSBsb2dpY2FsIHByb2Nlc3NvciBpZGxpbmcKIAkgIGlzIGRlZmluZWQsIHdoaWNoIGlzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gVGhpcyBkcml2ZXIKLQkgIHN1cHBvcnQgdGhlIG5ldyBkZXZpY2UuCisJICBzdXBwb3J0cyB0aGUgbmV3IGRldmljZS4KIAogY29uZmlnIEFDUElfVEhFUk1BTAogCXRyaXN0YXRlICJUaGVybWFsIFpvbmUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDk4Yjk2OTAuLmI2ZWQ2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQkJICAodTMyKSBhYy0+c3RhdGUpOworCQlhY3BpX25vdGlmaWVyX2NhbGxfY2hhaW4oZGV2aWNlLCBldmVudCwgKHUzMikgYWMtPnN0YXRlKTsKICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgogCQlrb2JqZWN0X3VldmVudCgmYWMtPmNoYXJnZXIuZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAppbmRleCA4ZTY3OWVmLi5hNDQ3MWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCkBAIC0xMDMsOSArMTAzLDkgQEAKIAogI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4MTAwMAogCi0vKiBTaXplIG9mIGNhY2hlZCBtZW1vcnkgbWFwcGluZyBmb3Igc3lzdGVtIG1lbW9yeSBvcGVyYXRpb24gcmVnaW9uICovCisvKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgdXNlIGluIG1hcHBpbmcgbWVtb3J5IGZvciBvcGVyYXRpb24gcmVnaW9ucyAqLwogCi0jZGVmaW5lIEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRSAgNDA5NgorI2RlZmluZSBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFICAgICAgICAgIDQwOTYJLyogTXVzdCBiZSBwb3dlciBvZiAyICovCiAKIC8qIG93bmVyX2lkIHRyYWNraW5nLiA4IGVudHJpZXMgYWxsb3dzIGZvciAyNTUgb3duZXJfaWRzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwppbmRleCAzYTU0YjczLi4yYmQ4M2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCkBAIC03Nyw3ICs3Nyw4IEBACiAJdm9pZCAqbG9naWNhbF9hZGRyX3B0ciA9IE5VTEw7CiAJc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQgKm1lbV9pbmZvID0gcmVnaW9uX2NvbnRleHQ7CiAJdTMyIGxlbmd0aDsKLQlhY3BpX3NpemUgd2luZG93X3NpemU7CisJYWNwaV9zaXplIG1hcF9sZW5ndGg7CisJYWNwaV9zaXplIHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aDsKICNpZmRlZiBBQ1BJX01JU0FMSUdOTUVOVF9OT1RfU1VQUE9SVEVECiAJdTMyIHJlbWFpbmRlcjsKICNlbmRpZgpAQCAtMTQ0LDI1ICsxNDUsMzkgQEAKIAkJfQogCiAJCS8qCi0JCSAqIERvbid0IGF0dGVtcHQgdG8gbWFwIG1lbW9yeSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcmVnaW9uLCBhbmQKLQkJICogY29uc3RyYWluIHRoZSBtYXhpbXVtIG1hcHBpbmcgc2l6ZSB0byBzb21ldGhpbmcgcmVhc29uYWJsZS4KKwkJICogQXR0ZW1wdCB0byBtYXAgZnJvbSB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgdG8gdGhlIGVuZCBvZiB0aGUgcmVnaW9uLgorCQkgKiBIb3dldmVyLCB3ZSB3aWxsIG5ldmVyIG1hcCBtb3JlIHRoYW4gb25lIHBhZ2UsIG5vciB3aWxsIHdlIGNyb3NzCisJCSAqIGEgcGFnZSBib3VuZGFyeS4KIAkJICovCi0JCXdpbmRvd19zaXplID0gKGFjcGlfc2l6ZSkKKwkJbWFwX2xlbmd0aCA9IChhY3BpX3NpemUpCiAJCSAgICAoKG1lbV9pbmZvLT5hZGRyZXNzICsgbWVtX2luZm8tPmxlbmd0aCkgLSBhZGRyZXNzKTsKIAotCQlpZiAod2luZG93X3NpemUgPiBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkUpIHsKLQkJCXdpbmRvd19zaXplID0gQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFOworCQkvKgorCQkgKiBJZiBtYXBwaW5nIHRoZSBlbnRpcmUgcmVtYWluaW5nIHBvcnRpb24gb2YgdGhlIHJlZ2lvbiB3aWxsIGNyb3NzCisJCSAqIGEgcGFnZSBib3VuZGFyeSwganVzdCBtYXAgdXAgdG8gdGhlIHBhZ2UgYm91bmRhcnksIGRvIG5vdCBjcm9zcy4KKwkJICogT24gc29tZSBzeXN0ZW1zLCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkgd2hpbGUgbWFwcGluZyByZWdpb25zCisJCSAqIGNhbiBjYXVzZSB3YXJuaW5ncyBpZiB0aGUgcGFnZXMgaGF2ZSBkaWZmZXJlbnQgYXR0cmlidXRlcworCQkgKiBkdWUgdG8gcmVzb3VyY2UgbWFuYWdlbWVudAorCQkgKi8KKwkJcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoID0KKwkJICAgIEFDUElfUk9VTkRfVVAoYWRkcmVzcywgQUNQSV9ERUZBVUxUX1BBR0VfU0laRSkgLSBhZGRyZXNzOworCisJCWlmICghcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoKSB7CisJCQlwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGggPSBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFOworCQl9CisKKwkJaWYgKG1hcF9sZW5ndGggPiBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGgpIHsKKwkJCW1hcF9sZW5ndGggPSBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGg7CiAJCX0KIAogCQkvKiBDcmVhdGUgYSBuZXcgbWFwcGluZyBzdGFydGluZyBhdCB0aGUgYWRkcmVzcyBnaXZlbiAqLwogCi0JCW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzID0KLQkJCWFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLCB3aW5kb3dfc2l6ZSk7CisJCW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzID0gYWNwaV9vc19tYXBfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGFkZHJlc3MsIG1hcF9sZW5ndGgpOwogCQlpZiAoIW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiQ291bGQgbm90IG1hcCBtZW1vcnkgYXQgJTguOFglOC44WCwgc2l6ZSAlWCIsCiAJCQkJICAgIEFDUElfRk9STUFUX05BVElWRV9VSU5UKGFkZHJlc3MpLAotCQkJCSAgICAodTMyKSB3aW5kb3dfc2l6ZSkpOworCQkJCSAgICAodTMyKSBtYXBfbGVuZ3RoKSk7CiAJCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IDA7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtMTcwLDcgKzE4NSw3IEBACiAJCS8qIFNhdmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG1hcHBpbmcgc2l6ZSAqLwogCiAJCW1lbV9pbmZvLT5tYXBwZWRfcGh5c2ljYWxfYWRkcmVzcyA9IGFkZHJlc3M7Ci0JCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gd2luZG93X3NpemU7CisJCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gbWFwX2xlbmd0aDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDkzMzViODcuLjBjOWM2YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTI1MSw2ICsyNTEsOSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGU7CiAKKwlpZiAoIWxpZF9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGxpZF9kZXZpY2UtPmhhbmRsZSwgIl9MSUQiLCBOVUxMLAogCQkJCSAgICAgICAmc3RhdGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMzExMjIyMS4uMWFmODA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTM4OSw2ICszODksMTcgQEAKIAogCQlwYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAJCXBjaV9kZXZfcHV0KHBkZXYpOworCisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmb3IgYSBub24tUENJIGRldmljZSB0aGF0IGhhcyBhCisJCSAqIFBDSSBwYXJlbnQgKGVnLiBhIGRpc2sgdW5kZXIgYSBQQ0kgU0FUQSBjb250cm9sbGVyKS4gIEluIHRoYXQKKwkJICogY2FzZSBwZGV2LT5zdWJvcmRpbmF0ZSB3aWxsIGJlIE5VTEwgZm9yIHRoZSBwYXJlbnQuCisJCSAqLworCQlpZiAoIXBidXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIk5vdCBhIFBDSS10by1QQ0kgYnJpZGdlXG4iKTsKKwkJCXBkZXYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KIAl9CiBvdXQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmRldmljZV9saXN0LCBub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwppbmRleCBlNmJmZDc3Li4yZWY3MDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwpAQCAtMjk0LDcgKzI5NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gZGF0YTsKKwkvKiBfUFRQIHJldHVybnMgMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZSAqLworCWlmIChkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdHJpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2MuYyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKaW5kZXggZjhiNmY1NS4uZDBkMjVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2MuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAljaGFyIHN0cmJ1Zls1XTsKIAljaGFyIHN0cls1XSA9ICIiOwotCWludCBsZW4gPSBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gY291bnQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpmb3VuZF9kZXYgPSBOVUxMOwogCiAJaWYgKGxlbiA+IDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IGM1NjdiNDYuLmVjNzQyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC03NzAsNyArNzcwLDcgQEAKIAkgICAgLm5vdGlmaWVyX2NhbGwgPSBhY3BpX2NwdV9zb2Z0X25vdGlmeSwKIH07CiAKLXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwogCWludCByZXN1bHQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCA0YzZjMTRjLi4xYzVkN2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtMTEzMywxNSArMTEzMywxNSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nICpwdGhyb3R0bGluZzsKIAorCWlmICghcHIpCisJCXJldHVybiAtRUlOVkFMOworCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAicGJsa19hZGRyZXNzWzB4JTA4eF0gZHV0eV9vZmZzZXRbJWRdIGR1dHlfd2lkdGhbJWRdXG4iLAogCQkJICBwci0+dGhyb3R0bGluZy5hZGRyZXNzLAogCQkJICBwci0+dGhyb3R0bGluZy5kdXR5X29mZnNldCwKIAkJCSAgcHItPnRocm90dGxpbmcuZHV0eV93aWR0aCkpOwogCi0JaWYgKCFwcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKgogCSAqIEV2YWx1YXRlIF9QVEMsIF9UU1MgYW5kIF9UUEMKIAkgKiBUaGV5IG11c3QgYWxsIGJlIHByZXNlbnQgb3Igbm9uZSBvZiB0aGVtIGNhbiBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCBhOTBhZmNjLi40Y2MxYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtNDEzLDYgKzQxMywzMCBAQAogCQl9LAogCX0sCiAJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBQYXZpbGlvbiBkdjQiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjQiKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgUGF2aWxpb24gZHY3IiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY3IiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIENvbXBhcSBQcmVzYXJpbyBDUTQwIE5vdGVib29rIFBDIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQ29tcGFxIFByZXNhcmlvIENRNDAgTm90ZWJvb2sgUEMiKSwKKwkJfSwKKwl9LAorCXsKIAkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAogCS5pZGVudCA9ICJQYW5hc29uaWMgQ0Y1MS0yTCIsCiAJLm1hdGNoZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IGY2ZTU0YmYuLjA1ZGZmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC0xMTA5LDcgKzExMDksMTIgQEAKIAkgKi8KIAogCS8qIERvZXMgdGhpcyBkZXZpY2Ugc3VwcG9ydCB2aWRlbyBzd2l0Y2hpbmc/ICovCi0JaWYgKHZpZGVvLT5jYXAuX0RPUykgeworCWlmICh2aWRlby0+Y2FwLl9ET1MgfHwgdmlkZW8tPmNhcC5fRE9EKSB7CisJCWlmICghdmlkZW8tPmNhcC5fRE9TKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIEZXX0JVRworCQkJCSJBQ1BJKCVzKSBkZWZpbmVzIF9ET0QgYnV0IG5vdCBfRE9TXG4iLAorCQkJCWFjcGlfZGV2aWNlX2JpZCh2aWRlby0+ZGV2aWNlKSk7CisJCX0KIAkJdmlkZW8tPmZsYWdzLm11bHRpaGVhZCA9IDE7CiAJCXN0YXR1cyA9IDA7CiAJfQpAQCAtMTIxOCw3ICsxMjIzLDcgQEAKIAl1MzIgc3RhdGUgPSAwOwogCiAKLQlpZiAoIWRldiB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghZGV2IHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTI3NSw3ICsxMjgwLDcgQEAKIAlpbnQgaTsKIAogCi0JaWYgKCFkZXYgfHwgIWRldi0+YnJpZ2h0bmVzcyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MgfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCkBAIC0xNTU3LDcgKzE1NjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBvcHQsIG9wdGlvbnM7CiAKIAotCWlmICghdmlkZW8gfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIXZpZGVvIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9IGFjcGlfdmlkZW9fYnVzX1BPU1Rfb3B0aW9ucyh2aWRlbywgJm9wdGlvbnMpOwpAQCAtMTU5Nyw3ICsxNjAyLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9wdDsKIAogCi0JaWYgKCF2aWRlbyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghdmlkZW8gfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKaW5kZXggNzAzMmYyNS4uNTc1NTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIERvZXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSAmJgorCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKIAkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQogCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGIxYTI1NzcuLmEzMjQxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTU3NSw3ICs1NzUsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAogCS8qIEFNRCAqLwotCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBTQjkwMCAqLworCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBIdWRzb24tMiAqLwogCS8qIEFNRCBpcyB1c2luZyBSQUlEIGNsYXNzIG9ubHkgZm9yIGFoY2kgY29udHJvbGxlcnMgKi8KIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSAgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmZmZiwgYm9hcmRfYWhjaSB9LApAQCAtNjA1LDYgKzYwNSw3IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1OSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU4MCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIExpbnV4IElEICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCkBAIC0yNzE3LDYgKzI3MTgsMzAgQEAKIAkJCX0sCiAJCQkuZHJpdmVyX2RhdGEgPSAiMjAwNzEwMjYiLAkvKiB5eXl5bW1kZCAqLwogCQl9LAorCQkvKgorCQkgKiBBbGwgQklPUyB2ZXJzaW9ucyBmb3IgdGhlIE1TSSBLOUEyIFBsYXRpbnVtIChNUy03Mzc2KQorCQkgKiBzdXBwb3J0IDY0Yml0IERNQS4KKwkJICoKKwkJICogQklPUyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS41IGhhZCB0aGUgTWFudWZhY3R1cmVyIERNSQorCQkgKiBmaWVsZHMgYXMgIk1JQ1JPLVNUQVIgSU5URVJBTlRJT05BTCBDTy4sTFREIi4KKwkJICogVGhpcyBzcGVsbGluZyBtaXN0YWtlIHdhcyBmaXhlZCBpbiBCSU9TIHZlcnNpb24gMS41LCBzbworCQkgKiAxLjUgYW5kIGxhdGVyIGhhdmUgdGhlIE1hbnVmYWN0dXJlciBhcworCQkgKiAiTUlDUk8tU1RBUiBJTlRFUk5BVElPTkFMIENPLixMVEQiLgorCQkgKiBTbyB0cnkgdG8gbWF0Y2ggb24gRE1JX0JPQVJEX1ZFTkRPUiBvZiAiTUlDUk8tU1RBUiBJTlRFUiIuCisJCSAqCisJCSAqIEJJT1MgdmVyc2lvbnMgZWFybGllciB0aGFuIDEuOSBoYWQgYSBCb2FyZCBQcm9kdWN0IE5hbWUKKwkJICogRE1JIGZpZWxkIG9mICJNUy03Mzc2Ii4gVGhpcyB3YXMgY2hhbmdlZCB0byBiZQorCQkgKiAiSzlBMiBQbGF0aW51bSAoTVMtNzM3NikiIGluIHZlcnNpb24gMS45LCBidXQgd2UgY2FuIHN0aWxsCisJCSAqIG1hdGNoIG9uIERNSV9CT0FSRF9OQU1FIG9mICJNUy03Mzc2Ii4KKwkJICovCisJCXsKKwkJCS5pZGVudCA9ICJNU0kgSzlBMiBQbGF0aW51bSIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwKKwkJCQkJICAiTUlDUk8tU1RBUiBJTlRFUiIpLAorCQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk1TLTczNzYiKSwKKwkJCX0sCisJCX0sCiAJCXsgfQogCX07CiAJY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKm1hdGNoOwpAQCAtMjcyOCwxOCArMjc1MywyNCBAQAogCSAgICAhbWF0Y2gpCiAJCXJldHVybiBmYWxzZTsKIAorCWlmICghbWF0Y2gtPmRyaXZlcl9kYXRhKQorCQlnb3RvIGVuYWJsZV82NGJpdDsKKwogCWRtaV9nZXRfZGF0ZShETUlfQklPU19EQVRFLCAmeWVhciwgJm1vbnRoLCAmZGF0ZSk7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNGQlMDJkJTAyZCIsIHllYXIsIG1vbnRoLCBkYXRlKTsKIAotCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApIHsKLQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogZW5hYmxpbmcgNjRiaXQgRE1BXG4iLAotCQkJICAgbWF0Y2gtPmlkZW50KTsKLQkJcmV0dXJuIHRydWU7Ci0JfSBlbHNlIHsKKwlpZiAoc3RyY21wKGJ1ZiwgbWF0Y2gtPmRyaXZlcl9kYXRhKSA+PSAwKQorCQlnb3RvIGVuYWJsZV82NGJpdDsKKwllbHNlIHsKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogQklPUyB0b28gb2xkLCAiCiAJCQkgICAiZm9yY2luZyAzMmJpdCBETUEsIHVwZGF0ZSBCSU9TXG4iLCBtYXRjaC0+aWRlbnQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQorCitlbmFibGVfNjRiaXQ6CisJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogZW5hYmxpbmcgNjRiaXQgRE1BXG4iLAorCQkgICBtYXRjaC0+aWRlbnQpOworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBhaGNpX2Jyb2tlbl9zeXN0ZW1fcG93ZXJvZmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBiNTI1YTA5Li5kYzcyNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQ5MTksMTAgKzQ5MTksMTEgQEAKICAqLwogdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKIAl1bnNpZ25lZCBpbnQgdGFnOwogCiAJV0FSTl9PTl9PTkNFKHFjID09IE5VTEwpOyAvKiBhdGFfcWNfZnJvbV90YWcgX21pZ2h0XyByZXR1cm4gTlVMTCAqLworCWFwID0gcWMtPmFwOwogCiAJcWMtPmZsYWdzID0gMDsKIAl0YWcgPSBxYy0+dGFnOwpAQCAtNDkzNCwxMSArNDkzNSwxMyBAQAogCiB2b2lkIF9fYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IGF0YV9saW5rICpsaW5rOwogCiAJV0FSTl9PTl9PTkNFKHFjID09IE5VTEwpOyAvKiBhdGFfcWNfZnJvbV90YWcgX21pZ2h0XyByZXR1cm4gTlVMTCAqLwogCVdBUk5fT05fT05DRSghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSk7CisJYXAgPSBxYy0+YXA7CisJbGluayA9IHFjLT5kZXYtPmxpbms7CiAKIAlpZiAobGlrZWx5KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKIAkJYXRhX3NnX2NsZWFuKHFjKTsKQEAgLTUwMjgsMTIgKzUwMzEsMTQgQEAKIAkJCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0ZBSUxFRDsKIAogCQlpZiAodW5saWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19GQUlMRUQpKSB7Ci0JCQlpZiAoIWF0YV90YWdfaW50ZXJuYWwocWMtPnRhZykpIHsKLQkJCQkvKiBhbHdheXMgZmlsbCByZXN1bHQgVEYgZm9yIGZhaWxlZCBxYyAqLwotCQkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKwkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCisJCQlmaWxsX3Jlc3VsdF90ZihxYyk7CisKKwkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkKIAkJCQlhdGFfcWNfc2NoZWR1bGVfZWgocWMpOwotCQkJCXJldHVybjsKLQkJCX0KKwkJCWVsc2UKKwkJCQlfX2F0YV9xY19jb21wbGV0ZShxYyk7CisJCQlyZXR1cm47CiAJCX0KIAogCQlXQVJOX09OX09OQ0UoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCAwYTk3ODIyLi5iYmEyYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMjk4MSwxMiArMjk4MSwxNCBAQAogCSAqIGRldmljZSBkZXRlY3Rpb24gbWVzc2FnZXMgYmFja3dhcmRzLgogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKLQkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkgfHwKLQkJICAgIGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpKQogCQkJY29udGludWU7CiAKIAkJZGV2LT5jbGFzcyA9IGVoYy0+Y2xhc3Nlc1tkZXYtPmRldm5vXTsKIAorCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJCWNvbnRpbnVlOworCiAJCWVoYy0+aS5mbGFncyB8PSBBVEFfRUhJX1BSSU5USU5GTzsKIAkJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOwogCQllaGMtPmkuZmxhZ3MgJj0gfkFUQV9FSElfUFJJTlRJTkZPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggYWE0YjNmNi4uYWU0NDU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgfSwKLQl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUpLCB9LAogCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IGY0OTgxNGQuLjNiYmVkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwotCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDQ1NjU3Y2EuLjg4OTg0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDE3ZjlmZjkuLjZmNTA5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzODIsNiArMTM4MiwyNSBAQAogCSAqLwogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0RFTEFZRURfRUgpCiAJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKworCS8qIFBJTyBjb21tYW5kcyBuZWVkIGV4Y2x1c2l2ZSBsaW5rOiBubyBvdGhlciBjb21tYW5kcyBbRE1BIG9yIFBJT10KKwkgKiBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKwkgKiBzZXQgZXhjbF9saW5rIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEgUElPIGNvbW1hbmQgaW4gRE1BIG1vZGUKKwkgKiBvciBhIG5vbi1OQ1EgY29tbWFuZCBpbiBOQ1EgbW9kZS4KKwkgKiBXaGVuIHdlIHJlY2VpdmUgYSBjb21tYW5kIGZyb20gdGhhdCBsaW5rLCBhbmQgdGhlcmUgYXJlIG5vCisJICogb3V0c3RhbmRpbmcgY29tbWFuZHMsIG1hcmsgYSBmbGFnIHRvIGNsZWFyIGV4Y2xfbGluayBhbmQgbGV0CisJICogdGhlIGNvbW1hbmQgZ28gdGhyb3VnaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXAtPmV4Y2xfbGluaykpIHsKKwkJaWYgKGxpbmsgPT0gYXAtPmV4Y2xfbGluaykgeworCQkJaWYgKGFwLT5ucl9hY3RpdmVfbGlua3MpCisJCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfQ0xFQVJfRVhDTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBwb3J0IGlzIGNvbXBsZXRlbHkgaWRsZSwgdGhlbiBhbGxvdyB0aGUgbmV3IHFjLgogCSAqLwpAQCAtMTM5NSw4ICsxNDE0LDE0IEBACiAJICogZG9lc24ndCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgJiYKLQkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAmJiBhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCi0JCXJldHVybiAwOworCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pKSB7CisJCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7CisJCQlhcC0+ZXhjbF9saW5rID0gbGluazsKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJfQorCX0KIAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA4NmE0MDU4Li4xZWI0ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xNTk0LDkgKzE1OTQsMjEgQEAKIAkgICAgIWF0YV9kZXZfZW5hYmxlZChsaW5rLT5kZXZpY2UpKQogCQlzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnLCBkZWFkbGluZSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JZWxzZSBpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywKLQkJCQkibnY6IHNraXBwaW5nIGhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKwllbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCQlpbnQgcmM7CisKKwkJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLCAibnY6IHNraXBwaW5nICIKKwkJCQkJImhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKworCQkvKiBtYWtlIHN1cmUgdGhlIGxpbmsgaXMgb25saW5lICovCisJCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKKwkJCQkJImxpbmsgKGVycm5vPSVkKVxuIiwgcmMpOworCX0KIAogCS8qIGRldmljZSBzaWduYXR1cmUgYWNxdWlzaXRpb24gaXMgdW5yZWxpYWJsZSAqLwogCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggYmRkNDNjNy4uMDJlZmQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC05Myw3ICs5Myw2IEBACiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDUyODcpLCB2dDgyNTEgfSwgLyogMiBzYXRhIGNobmxzIChNYXN0ZXIvU2xhdmUpICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4OTAwMCksIHZ0ODI1MSB9LAotCXsgUENJX1ZERVZJQ0UoVklBLCAweDkwNDApLCB2dDgyNTEgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA5NzNiZjJhLi42M2MxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC02ODksMTUgKzY4OSwxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcml2ZXJfYWRkX2F0dHJzKCVzKSBmYWlsZWRcbiIsCiAJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKIAl9Ci0JZXJyb3IgPSBhZGRfYmluZF9maWxlcyhkcnYpOwotCWlmIChlcnJvcikgewotCQkvKiBEaXR0byAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRfYmluZF9maWxlcyglcykgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisKKwlpZiAoIWRydi0+c3VwcHJlc3NfYmluZF9hdHRycykgeworCQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7CisJCWlmIChlcnJvcikgeworCQkJLyogRGl0dG8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisJCX0KIAl9CiAKIAlrb2JqZWN0X3VldmVudCgmcHJpdi0+a29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOworCiBvdXRfdW5yZWdpc3RlcjoKIAlrZnJlZShkcnYtPnApOwogCWRydi0+cCA9IE5VTEw7CkBAIC03MjAsNyArNzI0LDggQEAKIAlpZiAoIWRydi0+YnVzKQogCQlyZXR1cm47CiAKLQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKQorCQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOwogCWRyaXZlcl9yZW1vdmVfYXR0cnMoZHJ2LT5idXMsIGRydik7CiAJZHJpdmVyX3JlbW92ZV9maWxlKGRydiwgJmRyaXZlcl9hdHRyX3VldmVudCk7CiAJa2xpc3RfcmVtb3ZlKCZkcnYtPnAtPmtub2RlX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZWQyZWJkMy4uZjM2Nzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCXB1dF9kcml2ZXIob3RoZXIpOwogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBEcml2ZXIgJyVzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsICIKIAkJCSJhYm9ydGluZy4uLlxuIiwgZHJ2LT5uYW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0ID0gYnVzX2FkZF9kcml2ZXIoZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggZWQxNTZhMTMuLjRmYTk1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC01MjEsMTEgKzUyMSwxNSBAQAogewogCWludCByZXR2YWwsIGNvZGU7CiAKKwkvKiBtYWtlIHN1cmUgZHJpdmVyIHdvbid0IGhhdmUgYmluZC91bmJpbmQgYXR0cmlidXRlcyAqLworCWRydi0+ZHJpdmVyLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlOworCiAJLyogdGVtcG9yYXJ5IHNlY3Rpb24gdmlvbGF0aW9uIGR1cmluZyBwcm9iZSgpICovCiAJZHJ2LT5wcm9iZSA9IHByb2JlOwogCXJldHZhbCA9IGNvZGUgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIAotCS8qIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKKwkvKgorCSAqIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKIAkgKiB0aGUgbGlzdCBvZiBkcml2ZXJzIGluIG9yZGVyIHRvIHByb2JlIG5ldyBkZXZpY2VzLiAgQ2hlY2sgdG8gc2VlCiAJICogaWYgdGhlIHByb2JlIHdhcyBzdWNjZXNzZnVsLCBhbmQgbWFrZSBzdXJlIGFueSBmb3JjZWQgcHJvYmVzIG9mCiAJICogbmV3IGRldmljZXMgZmFpbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUwZGM0MDcuLjhhYTI0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNTExLDYgKzUxMSw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDM4NTU2ZjYuLmE3NzA0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNTEsOCArNTEsNiBAQAogewogCWludCByZXR2YWwgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIVxuIik7Ci0KIAlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQogCQlyZXR2YWwgPSAtRUlOVkFMOwogCWVsc2UgaWYgKGRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24pCkBAIC05Myw4ICs5MSw2IEBACiAJd2FrZV91cF9hbGwoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7CiAKICBvdXQ6Ci0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIHJldHVybnMgJWQhXG4iLCByZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBlZGRhOWVhLi5iZDExMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAJbG8tPmxvX3N0YXRlID0gTG9fdW5ib3VuZDsKIAkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCWlmIChtYXhfcGFydCA+IDApCisJaWYgKG1heF9wYXJ0ID4gMCAmJiBiZGV2KQogCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCA0M2YxOTM4Li41MTA0MmYwYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIApAQCAtMTgzLDM0ICsxODIsNiBAQAogCQl2YmxrLT52cS0+dnFfb3BzLT5raWNrKHZibGstPnZxKTsKIH0KIAotLyogcmV0dXJuIEFUQSBpZGVudGlmeSBkYXRhCi0gKi8KLXN0YXRpYyBpbnQgdmlydGJsa19pZGVudGlmeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdm9pZCAqYXJncCkKLXsKLQlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQl2b2lkICpvcGFxdWU7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlvcGFxdWUgPSBrbWFsbG9jKFZJUlRJT19CTEtfSURfQllURVMsIEdGUF9LRVJORUwpOwotCWlmICghb3BhcXVlKQotCQlnb3RvIG91dDsKLQotCWVyciA9IHZpcnRpb19jb25maWdfYnVmKHZibGstPnZkZXYsIFZJUlRJT19CTEtfRl9JREVOVElGWSwKLQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBpZGVudGlmeSksIG9wYXF1ZSwKLQkJVklSVElPX0JMS19JRF9CWVRFUyk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgb3BhcXVlLCBWSVJUSU9fQkxLX0lEX0JZVEVTKSkKLQkJZXJyID0gLUVGQVVMVDsKLQotb3V0X2tmcmVlOgotCWtmcmVlKG9wYXF1ZSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgdmlydGJsa19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKQEAgLTIyMiwxMCArMTkzLDYgQEAKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilkYXRhOwotCi0JaWYgKGNtZCA9PSBIRElPX0dFVF9JREVOVElUWSkKLQkJcmV0dXJuIHZpcnRibGtfaWRlbnRpZnkoZGlzaywgYXJncCk7CiAKIAkvKgogCSAqIE9ubHkgYWxsb3cgdGhlIGdlbmVyaWMgU0NTSSBpb2N0bHMgaWYgdGhlIGhvc3QgY2FuIHN1cHBvcnQgaXQuCkBAIC0yMzMsNyArMjAwLDggQEAKIAlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2YmxrLT52ZGV2LCBWSVJUSU9fQkxLX0ZfU0NTSSkpCiAJCXJldHVybiAtRU5PVFRZOwogCi0JcmV0dXJuIHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsIGFyZ3ApOworCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLAorCQkJICAgICAgKHZvaWQgX191c2VyICopZGF0YSk7CiB9CiAKIC8qIFdlIHByb3ZpZGUgZ2V0Z2VvIG9ubHkgdG8gcGxlYXNlIHNvbWUgb2xkIGJvb3Rsb2FkZXIvcGFydGl0aW9uaW5nIHRvb2xzICovCkBAIC0zMzIsNyArMzAwLDYgQEAKIAl9CiAKIAl2YmxrLT5kaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gdmJsazsKLQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1ZJUlQsIHZibGstPmRpc2stPnF1ZXVlKTsKIAogCWlmIChpbmRleCA8IDI2KSB7CiAJCXNwcmludGYodmJsay0+ZGlzay0+ZGlza19uYW1lLCAidmQlYyIsICdhJyArIGluZGV4ICUgMjYpOwpAQCAtNDQ1LDcgKzQxMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0JMS19GX0JBUlJJRVIsIFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsCiAJVklSVElPX0JMS19GX0dFT01FVFJZLCBWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKLQlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0lERU5USUZZLCBWSVJUSU9fQkxLX0ZfRkxVU0gKKwlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNICiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggN2JhOTFhYS4uMmZiMzgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC01OTEsNiArNTkxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53YWtlcik7CiAKIAljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDA4YTZmNTAuLjZhYWQ5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0zMjMsNyArMzIzLDcgQEAKIAogY29uZmlnIFNYCiAJdHJpc3RhdGUgIlNwZWNpYWxpeCBTWCAoYW5kIFNJKSBjYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAoUENJIHx8IEVJU0EgfHwgSVNBKSAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU1ggYW5kIFNJIG11bHRpcG9ydCBzZXJpYWwgY2FyZHMuCiAJICBQbGVhc2UgcmVhZCB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NlcmlhbC9zeC50eHQ+IGZvciBkZXRhaWxzLgpAQCAtMzM0LDcgKzMzNCw3IEBACiAKIGNvbmZpZyBSSU8KIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFJJTyBzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRAorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTcGVjaWFsaXggUklPLCBhIHNtYXJ0IHNlcmlhbCBjYXJkIHdoaWNoCiAJICBkcml2ZXMgYW4gb3V0Ym9hcmQgYm94IHRoYXQgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IHBvcnRzLiAgUHJvZHVjdApAQCAtMzk1LDcgKzM5NSw3IEBACiAKIGNvbmZpZyBBMjIzMgogCXRyaXN0YXRlICJDb21tb2RvcmUgQTIyMzIgc2VyaWFsIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOX09OX1NNUAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFpPUlJPICYmIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHN1cHBvcnRzIHRoZSAyMjMyIDctcG9ydCBzZXJpYWwgY2FyZCBzaGlwcGVkIHdpdGggdGhlCiAJICBBbWlnYSAyMDAwIGFuZCBvdGhlciBab3Jyby1idXMgbWFjaGluZXMsIGRhdGluZyBmcm9tIDE5ODkuICBBdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKaW5kZXggZWJhOTk5Zi4uYTZlZTMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCkBAIC01NSw3ICs1NSw3IEBACiAJbm90aWZ5X3JlbW90ZV92aWFfZXZ0Y2huKHhlbl9zdGFydF9pbmZvLT5jb25zb2xlLmRvbVUuZXZ0Y2huKTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb25zb2xlKHVpbnQzMl90IHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCitzdGF0aWMgaW50IF9fd3JpdGVfY29uc29sZShjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CiAJWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9kOwpAQCAtNzYsNiArNzYsMjkgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAorc3RhdGljIGludCB3cml0ZV9jb25zb2xlKHVpbnQzMl90IHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldCA9IGxlbjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSB3aG9sZSBidWZmZXIgaXMgZW1pdHRlZCwgcG9sbGluZyBpZgorCSAqIG5lY2Vzc2FyeS4gIFdlIGRvbid0IGV2ZXIgd2FudCB0byByZWx5IG9uIHRoZSBodmMgZGFlbW9uCisJICogYmVjYXVzZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBjb25zb2xlIG91dHB1dCBpcyB3aGVuIHRoZQorCSAqIGtlcm5lbCBpcyBjcmlwcGxlZC4KKwkgKi8KKwl3aGlsZSAobGVuKSB7CisJCWludCBzZW50ID0gX193cml0ZV9jb25zb2xlKGRhdGEsIGxlbik7CisJCQorCQlkYXRhICs9IHNlbnQ7CisJCWxlbiAtPSBzZW50OworCisJCWlmICh1bmxpa2VseShsZW4pKQorCQkJSFlQRVJWSVNPUl9zY2hlZF9vcChTQ0hFRE9QX3lpZWxkLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHJlYWRfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0geGVuY29uc19pbnRlcmZhY2UoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMKaW5kZXggOTYyOTY4Zi4uOTE1MTU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19ybmcuaD4KIAogLyogVGhlIGhvc3Qgd2lsbCBmaWxsIGFueSBidWZmZXIgd2UgZ2l2ZSBpdCB3aXRoIHN3ZWV0LCBzd2VldCByYW5kb21uZXNzLiAgV2UKQEAgLTExNyw3ICsxMTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2aXJ0cm5nX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0cm5nX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAl2ZGV2LT5jb25maWctPnJlc2V0KHZkZXYpOwogCWh3cm5nX3VucmVnaXN0ZXIoJnZpcnRpb19od3JuZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IDBkMzI4YjUuLmEwMzVhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uc29sZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggNmIzNmVlNS4uZWQ4NmQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTE1MzIsNyArMTUzMiw3IEBACiAKIAljYXNlIFBJT19VTklNQVA6CiAJY2FzZSBHSU9fVU5JTUFQOgotCQlyZXQgPSBkb191bmltYXBfaW9jdGwoY21kLCB1cCwgcGVybSwgdmMpOworCQlyZXQgPSBjb21wYXRfdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKIAkJYnJlYWs7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGY0YWM4Mi4uYTM4ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xMTIyLDcgKzExMjIsNyBAQAogCQlkZWJ1Z2YwKCJSZWFkaW5nIEs4X0RSQU1fQkFTRV9MT1cgZmFpbGVkXG4iKTsKIAogCS8qIEV4dHJhY3QgcGFydHMgaW50byBzZXBhcmF0ZSBkYXRhIGVudHJpZXMgKi8KLQlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgodTY0KSBsb3cgJiAweEZGRkYwMDAwKSA8PCAyNDsKKwlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgodTY0KSBsb3cgJiAweEZGRkYwMDAwKSA8PCA4OwogCXB2dC0+ZHJhbV9JbnRsdkVuW2RyYW1dID0gKGxvdyA+PiA4KSAmIDB4NzsKIAlwdnQtPmRyYW1fcndfZW5bZHJhbV0gPSAobG93ICYgMHgzKTsKIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIAkgKiBFeHRyYWN0IHBhcnRzIGludG8gc2VwYXJhdGUgZGF0YSBlbnRyaWVzLiBMaW1pdCBpcyB0aGUgSElHSEVTVCBtZW1vcnkKIAkgKiBsb2NhdGlvbiBvZiB0aGUgcmVnaW9uLCBzbyBsb3dlciAyNCBiaXRzIG5lZWQgdG8gYmUgYWxsIG9uZXMKIAkgKi8KLQlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPSAoKCh1NjQpIGxvdyAmIDB4RkZGRjAwMDApIDw8IDI0KSB8IDB4MDBGRkZGRkY7CisJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KSBsb3cgJiAweEZGRkYwMDAwKSA8PCA4KSB8IDB4MDBGRkZGRkY7CiAJcHZ0LT5kcmFtX0ludGx2U2VsW2RyYW1dID0gKGxvdyA+PiA4KSAmIDB4NzsKIAlwdnQtPmRyYW1fRHN0Tm9kZVtkcmFtXSA9IChsb3cgJiAweDcpOwogfQpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAlwdnQtPmRyYW1fSW50bHZFbltkcmFtXSA9IChsb3dfYmFzZSA+PiA4KSAmIDB4NzsKIAogCXB2dC0+ZHJhbV9iYXNlW2RyYW1dID0gKCgodTY0KWhpZ2hfYmFzZSAmIDB4MDAwMDAwRkYpIDw8IDQwKSB8Ci0JCQkgICAgICAgKCgodTY0KWxvd19iYXNlICAmIDB4RkZGRjAwMDApIDw8IDI0KTsKKwkJCSAgICAgICAoKCh1NjQpbG93X2Jhc2UgICYgMHhGRkZGMDAwMCkgPDwgOCk7CiAKIAlsb3dfb2Zmc2V0ID0gSzhfRFJBTV9MSU1JVF9MT1cgKyAoZHJhbSA8PCAzKTsKIAloaWdoX29mZnNldCA9IEYxMF9EUkFNX0xJTUlUX0hJR0ggKyAoZHJhbSA8PCAzKTsKQEAgLTEzOTEsNyArMTM5MSw3IEBACiAJICogbWVtb3J5IGxvY2F0aW9uIG9mIHRoZSByZWdpb24sIHNvIGxvdyAyNCBiaXRzIG5lZWQgdG8gYmUgYWxsIG9uZXMuCiAJICovCiAJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KWhpZ2hfbGltaXQgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAotCQkJCSgoKHU2NCkgbG93X2xpbWl0ICYgMHhGRkZGMDAwMCkgPDwgMjQpIHwKKwkJCQkoKCh1NjQpIGxvd19saW1pdCAmIDB4RkZGRjAwMDApIDw8IDgpIHwKIAkJCQkweDAwRkZGRkZGOwogfQogCkBAIC0yMjU0LDcgKzIyNTQsNyBAQAogewogCXUzMiBlYyAgPSBFUlJPUl9DT0RFKGluZm8tPm5ic2wpOwogCXUzMiB4ZWMgPSBFWFRfRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKLQlpbnQgZWNjX3R5cGUgPSBpbmZvLT5uYnNoICYgKDB4MyA8PCAxMyk7CisJaW50IGVjY190eXBlID0gKGluZm8tPm5ic2ggPj4gMTMpICYgMHgzOwogCiAJLyogQmFpbCBlYXJseSBvdXQgaWYgdGhpcyB3YXMgYW4gJ29ic2VydmVkJyBlcnJvciAqLwogCWlmIChQUChlYykgPT0gSzhfTkJTTF9QUF9PQlMpCkBAIC0zMTYzLDcgKzMxNjMsNyBAQAogCW9wc3RhdGVfaW5pdCgpOwogCiAJaWYgKGNhY2hlX2s4X25vcnRoYnJpZGdlcygpIDwgMCkKLQkJZ290byBlcnJfZXhpdDsKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwogCWlmIChlcnIpCkBAIC0zMTg5LDggKzMxODksNiBAQAogCiBlcnJfMm5kX3N0YWdlOgogCWRlYnVnZjAoIjJuZCBzdGFnZSBmYWlsZWRcbiIpOwotCi1lcnJfZXhpdDoKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCmluZGV4IGQzMzUwODZmLi43N2E5NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8xLCB3aGVyZSwKIAkJCQkJJnB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCQlkZWJ1Z2YyKCJNVFIlZCB3aGVyZT0weCV4IEIxIHZhbHVlPTB4JXhcbiIsIHNsb3Rfcm93LAotCQkJCXdoZXJlLCBwdnQtPmIwX210cltzbG90X3Jvd10pOworCQkJCXdoZXJlLCBwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQl9IGVsc2UgewogCQkJcHZ0LT5iMV9tdHJbc2xvdF9yb3ddID0gMDsKIAkJfQpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqcF9jc3JvdzsKIAlpbnQgZW1wdHksIGNoYW5uZWxfY291bnQ7CiAJaW50IG1heF9jc3Jvd3M7Ci0JaW50IG10cjsKKwlpbnQgbXRyLCBtdHIxOwogCWludCBjc3Jvd19tZWdzOwogCWludCBjaGFubmVsOwogCWludCBjc3JvdzsKQEAgLTEyNTEsOSArMTI1MSwxMCBAQAogCiAJCS8qIHVzZSBicmFuY2ggMCBmb3IgdGhlIGJhc2lzICovCiAJCW10ciA9IHB2dC0+YjBfbXRyW2Nzcm93ID4+IDFdOworCQltdHIxID0gcHZ0LT5iMV9tdHJbY3Nyb3cgPj4gMV07CiAKIAkJLyogaWYgbm8gRElNTVMgb24gdGhpcyByb3csIGNvbnRpbnVlICovCi0JCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSkKKwkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpICYmICFNVFJfRElNTVNfUFJFU0VOVChtdHIxKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZBS0UgT1VUIFZBTFVFUywgRklYTUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCmluZGV4IGIwOGI2ZDguLmY5OWQxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwpAQCAtNDYsOSArNDYsMTAgQEAKIC8qIExpbWl0cyBmb3IgaTU0MDAgKi8KICNkZWZpbmUgTlVNX01UUlNfUEVSX0JSQU5DSAk0CiAjZGVmaW5lIENIQU5ORUxTX1BFUl9CUkFOQ0gJMgorI2RlZmluZSBNQVhfRElNTVNfUEVSX0NIQU5ORUwJTlVNX01UUlNfUEVSX0JSQU5DSAogI2RlZmluZQlNQVhfQ0hBTk5FTFMJCTQKLSNkZWZpbmUgTUFYX0RJTU1TCQkoTUFYX0NIQU5ORUxTICogNCkJLyogVXAgdG8gNCBESU1NJ3MgcGVyIGNoYW5uZWwgKi8KLSNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NUyAqIDIpCQkvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisjZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVNfUEVSX0NIQU5ORUwpCiAKIC8qIERldmljZSAxNiwKICAqIEZ1bmN0aW9uIDA6IFN5c3RlbSBBZGRyZXNzCkBAIC0zMzEsNyArMzMyLDYgQEAKIAogc3RydWN0IGk1NDAwX2RpbW1faW5mbyB7CiAJaW50IG1lZ2FieXRlczsJCS8qIHNpemUsIDAgbWVhbnMgbm90IHByZXNlbnQgICovCi0JaW50IGR1YWxfcmFuazsKIH07CiAKIC8qIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC04NDksMTEgKzg0OSw5IEBACiAJaW50IG47CiAKIAkvKiBUaGVyZSBpcyBvbmUgTVRSIGZvciBlYWNoIHNsb3QgcGFpciBvZiBGQi1ESU1NcywKLQkgICBFYWNoIHNsb3QgbWF5IGhhdmUgb25lIG9yIHR3byByYW5rcyAoMiBjc3Jvd3MpLAogCSAgIEVhY2ggc2xvdCBwYWlyIG1heSBiZSBhdCBicmFuY2ggMCBvciBicmFuY2ggMS4KLQkgICBTbywgY3Nyb3cgc2hvdWxkIGJlIGRpdmlkZWQgYnkgZWlnaHQKIAkgKi8KLQluID0gY3Nyb3cgPj4gMzsKKwluID0gY3Nyb3c7CiAKIAlpZiAobiA+PSBOVU1fTVRSU19QRVJfQlJBTkNIKSB7CiAJCWRlYnVnZjAoIkVSUk9SOiB0cnlpbmcgdG8gYWNjZXNzIGFuIGludmFsaWQgY3Nyb3c6ICVkXG4iLApAQCAtOTA1LDI1ICs5MDMsMjIgQEAKIAkJYW1iX3ByZXNlbnRfcmVnID0gZGV0ZXJtaW5lX2FtYl9wcmVzZW50X3JlZyhwdnQsIGNoYW5uZWwpOwogCiAJCS8qIERldGVybWluZSBpZiB0aGVyZSBpcyBhIERJTU0gcHJlc2VudCBpbiB0aGlzIERJTU0gc2xvdCAqLwotCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgKGNzcm93ID4+IDEpKSkgewotCQkJZGluZm8tPmR1YWxfcmFuayA9IE1UUl9ESU1NX1JBTksobXRyKTsKKwkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IGNzcm93KSkgeworCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuaworCQkJICogb24gdGhlIERSQU0gKi8KKwkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBSQU5LIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JBTksobXRyKTsKIAotCQkJaWYgKCEoKGRpbmZvLT5kdWFsX3JhbmsgPT0gMCkgJiYKLQkJCQkoKGNzcm93ICYgMHgxKSA9PSAweDEpKSkgewotCQkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKLQkJCQkgKiBvbiB0aGUgRFJBTSAqLwotCQkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KKwkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KKwkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KIAotCQkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCi0JCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLwotCQkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KLQotCQkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwotCQkJfQorCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7CiAJCX0KIAl9CiB9CkBAIC05NTEsMTIgKzk0NiwxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MgKHdoaWNoIGlzICMgb2YgRElNTVMgKiAyKQorCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTCiAJICogYW5kIGNhbGN1bGF0ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRElNTQogCSAqIFN0YXJ0IHdpdGggdGhlIGhpZ2hlc3QgY3Nyb3cgZmlyc3QsIHRvIGRpc3BsYXkgaXQgZmlyc3QKIAkgKiBhbmQgd29yayB0b3dhcmQgdGhlIDB0aCBjc3JvdwogCSAqLwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCWZvciAoY3Nyb3cgPSBtYXhfY3Nyb3dzIC0gMTsgY3Nyb3cgPj0gMDsgY3Nyb3ctLSkgewogCiAJCS8qIG9uIGFuIG9kZCBjc3JvdywgZmlyc3Qgb3V0cHV0IGEgJ2JvdW5kYXJ5JyBtYXJrZXIsCkBAIC0xMDY0LDcgKzEwNTksNyBAQAogCiAJLyogR2V0IHRoZSBzZXQgb2YgTVRSWzAtM10gcmVncyBieSBlYWNoIGJyYW5jaCAqLwogCWZvciAoc2xvdF9yb3cgPSAwOyBzbG90X3JvdyA8IE5VTV9NVFJTX1BFUl9CUkFOQ0g7IHNsb3Rfcm93KyspIHsKLQkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MzIpKTsKKwkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MTYpKTsKIAogCQkvKiBCcmFuY2ggMCBzZXQgb2YgTVRSIHJlZ2lzdGVycyAqLwogCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8wLCB3aGVyZSwKQEAgLTExNDYsNyArMTE0MSw3IEBACiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAogCWNoYW5uZWxfY291bnQgPSBwdnQtPm1heGNoOwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCiAJZW1wdHkgPSAxOwkJLyogQXNzdW1lIE5PIG1lbW9yeSAqLwogCkBAIC0xMjE1LDI4ICsxMjEwLDYgQEAKIH0KIAogLyoKLSAqIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2Nzcm93cywgJm51bV9jaGFubmVscykKLSAqCi0gKglhc2sgdGhlIGRldmljZSBob3cgbWFueSBjaGFubmVscyBhcmUgcHJlc2VudCBhbmQgaG93IG1hbnkgQ1NST1dTCi0gKgkgYXMgd2VsbAotICovCi1zdGF0aWMgdm9pZCBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWludCAqbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQlpbnQgKm51bV9jaGFubmVscykKLXsKLQl1OCB2YWx1ZTsKLQotCS8qIE5lZWQgdG8gcmV0cmlldmUganVzdCBob3cgbWFueSBjaGFubmVscyBhbmQgZGltbXMgcGVyIGNoYW5uZWwgYXJlCi0JICogc3VwcG9ydGVkIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2xsZXIKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhESU1NUEVSQ0gsICZ2YWx1ZSk7Ci0JKm51bV9kaW1tc19wZXJfY2hhbm5lbCA9IChpbnQpdmFsdWUgKiAyOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYQ0gsICZ2YWx1ZSk7Ci0JKm51bV9jaGFubmVscyA9IChpbnQpdmFsdWU7Ci19Ci0KLS8qCiAgKglpNTQwMF9wcm9iZTEJUHJvYmUgZm9yIE9ORSBpbnN0YW5jZSBvZiBkZXZpY2UgdG8gc2VlIGlmIGl0IGlzCiAgKgkJCXByZXNlbnQuCiAgKglyZXR1cm46CkBAIC0xMjYzLDIyICsxMjM2LDE2IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEFzayB0aGUgZGV2aWNlcyBmb3IgdGhlIG51bWJlciBvZiBDU1JPV1MgYW5kIENIQU5ORUxTIHNvCi0JICogdGhhdCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBtZW1vcnkgcmVzb3VyY2VzLCBldGMKLQkgKgotCSAqIFRoZSBDaGlwc2V0IHdpbGwgcmVwb3J0IHdoYXQgaXQgY2FuIGhhbmRsZSB3aGljaCB3aWxsIGJlIGdyZWF0ZXIKLQkgKiBvciBlcXVhbCB0byB3aGF0IHRoZSBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXIgd2lsbCBpbXBsZW1lbnQuCi0JICoKLQkgKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKKwkvKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCiAJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwotCWk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQkmbnVtX2NoYW5uZWxzKTsKLQludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsICogMjsKKwludW1fZGltbXNfcGVyX2NoYW5uZWwgPSBNQVhfRElNTVNfUEVSX0NIQU5ORUw7CisJbnVtX2NoYW5uZWxzID0gTUFYX0NIQU5ORUxTOworCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWw7CiAKIAlkZWJ1Z2YwKCJNQzogJXMoKTogTnVtYmVyIG9mIC0gQ2hhbm5lbHM9ICVkICBESU1NUz0gJWQgIENTUk9XUz0gJWRcbiIsCiAJCV9fZnVuY19fLCBudW1fY2hhbm5lbHMsIG51bV9kaW1tc19wZXJfY2hhbm5lbCwgbnVtX2Nzcm93cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMTU3ZjY1MC4uY2YyNzQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgIm1wYzg1eHhfZWRhYy5oIgogCiBzdGF0aWMgaW50IGVkYWNfZGV2X2lkeDsKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGVkYWNfcGNpX2lkeDsKKyNlbmRpZgogc3RhdGljIGludCBlZGFjX21jX2lkeDsKIAogc3RhdGljIHUzMiBvcmlnX2Rkcl9lcnJfZGlzYWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDY2MmVkOTIuLjUwZGUwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAkJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKIAkJCQlkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7Ci0JCWlmIChkZXYpIHsKKwkJaWYgKCFJU19FUlIoZGV2KSkgewogCQkJaWYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlKQogCQkJCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkJJmdwaW9fYXR0cl9ncm91cCk7CkBAIC02NzksNyArNjc5LDcgQEAKIAkJCWlmIChzdGF0dXMgIT0gMCkKIAkJCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogCQl9IGVsc2UKLQkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCXNldF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncyk7CiAJfQpAQCAtODAwLDExICs4MDAsMTEgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLCBjaGlwLAogCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7Ci0JaWYgKGRldikgeworCWlmICghSVNfRVJSKGRldikpIHsKIAkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJJmdwaW9jaGlwX2F0dHJfZ3JvdXApOwogCX0gZWxzZQotCQlzdGF0dXMgPSAtRU5PREVWOworCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJY2hpcC0+ZXhwb3J0ZWQgPSAoc3RhdHVzID09IDApOwogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwppbmRleCBhZmFkMTQ3Li40OTM4NGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCkBAIC00NjAsNyArNDYwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBncGlvX3R3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisvKiBDYW5ub3QgdXNlIF9fZGV2ZXhpdCBhcyBncGlvX3R3bDQwMzBfcHJvYmUoKSBjYWxscyB1cyAqLworc3RhdGljIGludCBncGlvX3R3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBzdGF0dXM7CkBAIC00OTMsNyArNDk0LDcgQEAKIAkuZHJpdmVyLm5hbWUJPSAidHdsNDAzMF9ncGlvIiwKIAkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLnByb2JlCQk9IGdwaW9fdHdsNDAzMF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdwaW9fdHdsNDAzMF9yZW1vdmUpLAorCS5yZW1vdmUJCT0gZ3Bpb190d2w0MDMwX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdwaW9fdHdsNDAzMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggMWZlNGUxZC4uYmJmZDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzMxLDYgKzMzMSw3IEBACiAJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAogCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAogCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rlcyk7CiAJcmV0dXJuIG1vZGU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCmluZGV4IDNjMGQyYjMuLmNlYTY2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC02MjYsNiArNjI2LDEyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIGl0IGlzIGluY29ycmVjdCBpZiBoc3luYy92c3luYyB3aWR0aCBpcyB6ZXJvICovCisJaWYgKCFoc3luY19wdWxzZV93aWR0aCB8fCAhdnN5bmNfcHVsc2Vfd2lkdGgpIHsKKwkJRFJNX0RFQlVHX0tNUygiSW5jb3JyZWN0IERldGFpbGVkIHRpbWluZy4gIgorCQkJCSJXcm9uZyBIc3luYy9Wc3luYyBwdWxzZSB3aWR0aFxuIik7CisJCXJldHVybiBOVUxMOworCX0KIAltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7CiAJaWYgKCFtb2RlKQogCQlyZXR1cm4gTlVMTDsKQEAgLTY0Nyw2ICs2NTMsMTUgQEAKIAltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArIHZzeW5jX3B1bHNlX3dpZHRoOwogCW1vZGUtPnZ0b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsgdmJsYW5rOwogCisJLyogcGVyZm9ybSB0aGUgYmFzaWMgY2hlY2sgZm9yIHRoZSBkZXRhaWxlZCB0aW1pbmcgKi8KKwlpZiAobW9kZS0+aHN5bmNfZW5kID4gbW9kZS0+aHRvdGFsIHx8CisJCW1vZGUtPnZzeW5jX2VuZCA+IG1vZGUtPnZ0b3RhbCkgeworCQlkcm1fbW9kZV9kZXN0cm95KGRldiwgbW9kZSk7CisJCURSTV9ERUJVR19LTVMoIkluY29ycmVjdCBkZXRhaWxlZCB0aW1pbmcuICIKKwkJCQkiU3luYyBpcyBiZXlvbmQgdGhlIGJsYW5rLlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwogCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwogCiAJaWYgKHB0LT5taXNjICYgRFJNX0VESURfUFRfSU5URVJMQUNFRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDIzZGM5YzEuLmRjOGUzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtNDU0LDIyICs0NTQsMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQpOwogCi1zdGF0aWMgdm9pZCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCitzdGF0aWMgaW50IHNldGNvbHJlZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJICAgICB1MTYgYmx1ZSwgdTE2IHJlZ25vLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKIAlpbnQgcGluZGV4OwogCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikgeworCQl1MzIgKnBhbGV0dGU7CisJCXUzMiB2YWx1ZTsKKwkJLyogcGxhY2UgY29sb3IgaW4gcHN1ZWRvcGFsZXR0ZSAqLworCQlpZiAocmVnbm8gPiAxNikKKwkJCXJldHVybiAtRUlOVkFMOworCQlwYWxldHRlID0gKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlOworCQlyZWQgPj49ICgxNiAtIGluZm8tPnZhci5yZWQubGVuZ3RoKTsKKwkJZ3JlZW4gPj49ICgxNiAtIGluZm8tPnZhci5ncmVlbi5sZW5ndGgpOworCQlibHVlID4+PSAoMTYgLSBpbmZvLT52YXIuYmx1ZS5sZW5ndGgpOworCQl2YWx1ZSA9IChyZWQgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKKwkJCShncmVlbiA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CisJCQkoYmx1ZSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOworCQlwYWxldHRlW3JlZ25vXSA9IHZhbHVlOworCQlyZXR1cm4gMDsKKwl9CisKIAlwaW5kZXggPSByZWdubzsKIAogCWlmIChmYi0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKIAkJcGluZGV4ID0gcmVnbm8gPDwgMzsKIAogCQlpZiAoZmItPmRlcHRoID09IDE2ICYmIHJlZ25vID4gNjMpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGZiLT5kZXB0aCA9PSAxNSAmJiByZWdubyA+IDMxKQotCQkJcmV0dXJuOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKGZiLT5kZXB0aCA9PSAxNikgewogCQkJdTE2IHIsIGcsIGI7CkBAIC00OTMsMTMgKzUxMCw3IEBACiAKIAlpZiAoZmItPmRlcHRoICE9IDE2KQogCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcGluZGV4KTsKLQotCWlmIChyZWdubyA8IDE2ICYmIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKSB7Ci0JCSgodTMyICopIGZiLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0KLQkJCShyZWdubyA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAotCQkJKHJlZ25vIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCShyZWdubyA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwotCX0KKwlyZXR1cm4gMDsKIH0KIAogaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC01MzYsNyArNTQ3LDkgQEAKIAkJCWlmICh0cmFuc3ApCiAJCQkJaHRyYW5zcCA9ICp0cmFuc3ArKzsKIAotCQkJc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJcmMgPSBzZXRjb2xyZWcoY3J0YywgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgc3RhcnQrKywgaW5mbyk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOwogCQl9CiAJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOwogCX0KQEAgLTU1NSw2ICs1NjgsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IGk7CisJaW50IHJldDsKIAogCWlmIChyZWdubyA+IDI1NSkKIAkJcmV0dXJuIDE7CkBAIC01NjgsOCArNTgyLDEwIEBACiAJCWlmIChpID09IGZiX2hlbHBlci0+Y3J0Y19jb3VudCkKIAkJCWNvbnRpbnVlOwogCisJCXJldCA9IHNldGNvbHJlZyhjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubywgaW5mbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCXNldGNvbHJlZyhjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubywgaW5mbyk7CiAJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY5MSw3ICs3MDcsNyBAQAogCiAJCWlmIChjcnRjLT5mYiA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5mYikgewogCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm8tPm1vZGVfc2V0KTsKKwkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKCZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldCk7CiAJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpAQCAtOTI4LDcgKzk0NCw3IEBACiB7CiAJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJaW5mby0+Zml4LnZpc3VhbCA9IGRlcHRoID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOgotCQlGQl9WSVNVQUxfRElSRUNUQ09MT1I7CisJCUZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKIAlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwogCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA5MmFlYjkxLi5lNWIxMzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTEyMjcsOCArMTIyNyw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogVHJ5IHRvIHNldCB1cCBGQkMgd2l0aCBhIHJlYXNvbmFibGUgY29tcHJlc3NlZCBidWZmZXIgc2l6ZSAqLwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAoSVNfSTlYWChkZXYpIHx8IElTX0k5NjVHKGRldikgfHwgSVNfR000NShkZXYpKSAmJgotCSAgICBpOTE1X3Bvd2Vyc2F2ZSkgeworCWlmIChJOTE1X0hBU19GQkMoZGV2KSAmJiBpOTE1X3Bvd2Vyc2F2ZSkgewogCQlpbnQgY2ZiX3NpemU7CiAKIAkJLyogVHJ5IHRvIGdldCBhbiA4TSBidWZmZXIuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGI5MzgxNGMuLjdmNDM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtODksNyArODksOCBAQAogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMTsKKwkvKiBNb2Rlc2V0IG9uIHJlc3VtZSwgbm90IGxpZCBldmVudHMgKi8KKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQsNyArMTI1LDcgQEAKIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwogCX0KIAotCWRldl9wcml2LT5zdXNwZW5kZWQgPSAwOworCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNjAzNWQzZC4uNTcyMDRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yNzQsNyArMjc0LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyBkaXNwbGF5OwogCiAJLyogUmVnaXN0ZXIgc3RhdGUgKi8KLQlib29sIHN1c3BlbmRlZDsKKwlib29sIG1vZGVzZXRfb25fbGlkOwogCXU4IHNhdmVMQkI7CiAJdTMyIHNhdmVEU1BBQ05UUjsKIAl1MzIgc2F2ZURTUEJDTlRSOwpAQCAtMjk2LDYgKzI5NiwxMiBAQAogCXUzMiBzYXZlVkJMQU5LX0E7CiAJdTMyIHNhdmVWU1lOQ19BOwogCXUzMiBzYXZlQkNMUlBBVF9BOworCXUzMiBzYXZlVFJBTlNfSFRPVEFMX0E7CisJdTMyIHNhdmVUUkFOU19IQkxBTktfQTsKKwl1MzIgc2F2ZVRSQU5TX0hTWU5DX0E7CisJdTMyIHNhdmVUUkFOU19WVE9UQUxfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZCTEFOS19BOworCXUzMiBzYXZlVFJBTlNfVlNZTkNfQTsKIAl1MzIgc2F2ZVBJUEVBU1RBVDsKIAl1MzIgc2F2ZURTUEFTVFJJREU7CiAJdTMyIHNhdmVEU1BBU0laRTsKQEAgLTMwNCw4ICszMTAsMTEgQEAKIAl1MzIgc2F2ZURTUEFTVVJGOwogCXUzMiBzYXZlRFNQQVRJTEVPRkY7CiAJdTMyIHNhdmVQRklUX1BHTV9SQVRJT1M7CisJdTMyIHNhdmVCTENfSElTVF9DVEw7CiAJdTMyIHNhdmVCTENfUFdNX0NUTDsKIAl1MzIgc2F2ZUJMQ19QV01fQ1RMMjsKKwl1MzIgc2F2ZUJMQ19DUFVfUFdNX0NUTDsKKwl1MzIgc2F2ZUJMQ19DUFVfUFdNX0NUTDI7CiAJdTMyIHNhdmVGUEIwOwogCXUzMiBzYXZlRlBCMTsKIAl1MzIgc2F2ZURQTExfQjsKQEAgLTMxNyw2ICszMjYsMTIgQEAKIAl1MzIgc2F2ZVZCTEFOS19COwogCXUzMiBzYXZlVlNZTkNfQjsKIAl1MzIgc2F2ZUJDTFJQQVRfQjsKKwl1MzIgc2F2ZVRSQU5TX0hUT1RBTF9COworCXUzMiBzYXZlVFJBTlNfSEJMQU5LX0I7CisJdTMyIHNhdmVUUkFOU19IU1lOQ19COworCXUzMiBzYXZlVFJBTlNfVlRPVEFMX0I7CisJdTMyIHNhdmVUUkFOU19WQkxBTktfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZTWU5DX0I7CiAJdTMyIHNhdmVQSVBFQlNUQVQ7CiAJdTMyIHNhdmVEU1BCU1RSSURFOwogCXUzMiBzYXZlRFNQQlNJWkU7CkBAIC0zNDIsNiArMzU3LDcgQEAKIAl1MzIgc2F2ZVBGSVRfQ09OVFJPTDsKIAl1MzIgc2F2ZV9wYWxldHRlX2FbMjU2XTsKIAl1MzIgc2F2ZV9wYWxldHRlX2JbMjU2XTsKKwl1MzIgc2F2ZURQRkNfQ0JfQkFTRTsKIAl1MzIgc2F2ZUZCQ19DRkJfQkFTRTsKIAl1MzIgc2F2ZUZCQ19MTF9CQVNFOwogCXUzMiBzYXZlRkJDX0NPTlRST0w7CkBAIC0zNDksNiArMzY1LDEyIEBACiAJdTMyIHNhdmVJRVI7CiAJdTMyIHNhdmVJSVI7CiAJdTMyIHNhdmVJTVI7CisJdTMyIHNhdmVERUlFUjsKKwl1MzIgc2F2ZURFSU1SOworCXUzMiBzYXZlR1RJRVI7CisJdTMyIHNhdmVHVElNUjsKKwl1MzIgc2F2ZUZESV9SWEFfSU1SOworCXUzMiBzYXZlRkRJX1JYQl9JTVI7CiAJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CiAJdTMyIHNhdmVEX1NUQVRFOwogCXUzMiBzYXZlRFNQQ0xLX0dBVEVfRDsKQEAgLTM4Miw2ICs0MDQsMTYgQEAKIAl1MzIgc2F2ZVBJUEVCX0RQX0xJTktfTTsKIAl1MzIgc2F2ZVBJUEVBX0RQX0xJTktfTjsKIAl1MzIgc2F2ZVBJUEVCX0RQX0xJTktfTjsKKwl1MzIgc2F2ZUZESV9SWEFfQ1RMOworCXUzMiBzYXZlRkRJX1RYQV9DVEw7CisJdTMyIHNhdmVGRElfUlhCX0NUTDsKKwl1MzIgc2F2ZUZESV9UWEJfQ1RMOworCXUzMiBzYXZlUEZBX0NUTF8xOworCXUzMiBzYXZlUEZCX0NUTF8xOworCXUzMiBzYXZlUEZBX1dJTl9TWjsKKwl1MzIgc2F2ZVBGQl9XSU5fU1o7CisJdTMyIHNhdmVQRkFfV0lOX1BPUzsKKwl1MzIgc2F2ZVBGQl9XSU5fUE9TOwogCiAJc3RydWN0IHsKIAkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CkBAIC00OTIsNiArNTI0LDggQEAKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9waHlzX29iamVjdCAqcGh5c19vYmpzW0k5MTVfTUFYX1BIWVNfT0JKRUNUXTsKIAl9IG1tOwogCXN0cnVjdCBzZHZvX2RldmljZV9tYXBwaW5nIHNkdm9fbWFwcGluZ3NbMl07CisJLyogaW5kaWNhdGUgd2hldGhlciB0aGUgTFZEU19CT1JERVIgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90ICovCisJdW5zaWduZWQgaW50IGx2ZHNfYm9yZGVyX2JpdHM7CiAKIAkvKiBSZWNsb2NraW5nIHN1cHBvcnQgKi8KIAlib29sIHJlbmRlcl9yZWNsb2NrX2F2YWlsOwpAQCAtOTgxLDcgKzEwMTUsMTAgQEAKIAogI2RlZmluZSBIQVNfRldfQkxDKGRldikgKElTX0k5WFgoZGV2KSB8fCBJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQogI2RlZmluZSBIQVNfUElQRV9DWFNSKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lHRE5HKGRldikpCi0jZGVmaW5lIEk5MTVfSEFTX0ZCQyhkZXYpIChJU19NT0JJTEUoZGV2KSAmJiAoSVNfSTlYWChkZXYpIHx8IElTX0k5NjVHKGRldikpKQorI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgXAorCQkJICAgKElTX0k5WFgoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmIFwKKwkJCSAgICFJU19JR0QoZGV2KSAmJiBcCisJCQkgICAhSVNfSUdETkcoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDQ2NmRkYi4uMTY4N2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC05NjgsNiArOTY4LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIEVuYWJsZSBib3JkZXIgZm9yIHVuc2NhbGVkIChvciBhc3BlY3Qtc2NhbGVkKSBkaXNwbGF5ICovCisjZGVmaW5lICAgTFZEU19CT1JERVJfRU5BQkxFCQkoMSA8PCAxNSkKIC8qCiAgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKICAqIHBpeGVsLgpAQCAtMTA3OCw2ICsxMDgwLDggQEAKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCiAjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSwkJKDB4ZmZmZikKIAorI2RlZmluZSBCTENfSElTVF9DVEwJCTB4NjEyNjAKKwogLyogVFYgcG9ydCBjb250cm9sICovCiAjZGVmaW5lIFRWX0NUTAkJCTB4NjgwMDAKIC8qKiBFbmFibGVzIHRoZSBUViBlbmNvZGVyICovCkBAIC0xNzgwLDYgKzE3ODQsMTEgQEAKICNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLwogI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCiAjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorI2RlZmluZSAgIFBJUEVfQlBDX01BU0sgCQkJKDcgPDwgNSkgLyogSXJvbmxha2UgKi8KKyNkZWZpbmUgICBQSVBFXzhCUEMJCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEwQlBDCQkJCSgxIDw8IDUpCisjZGVmaW5lICAgUElQRV82QlBDCQkJCSgyIDw8IDUpCisjZGVmaW5lICAgUElQRV8xMkJQQwkJCQkoMyA8PCA1KQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTE3OTAsMTcgKzE3OTksMjkgQEAKICNkZWZpbmUgICBEU1BBUkJfQUVORF9TSElGVAkwCiAKICNkZWZpbmUgRFNQRlcxCQkJMHg3MDAzNAorI2RlZmluZSAgIERTUEZXX1NSX1NISUZUCTIzCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQl9TSElGVAkxNgorI2RlZmluZSAgIERTUEZXX1BMQU5FQl9TSElGVAk4CiAjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JBX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfU0hJRlQJMTYKICNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2RlZmluZSAgIERTUEZXX0hQTExfU1JfRU4JKDE8PDMxKQorI2RlZmluZSAgIERTUEZXX0NVUlNPUl9TUl9TSElGVAkyNAogI2RlZmluZSAgIElHRF9TRUxGX1JFRlJFU0hfRU4JKDE8PDMwKQogCiAvKiBGSUZPIHdhdGVybWFyayBzaXplcyBldGMgKi8KKyNkZWZpbmUgRzRYX0ZJRk9fTElORV9TSVpFCTY0CiAjZGVmaW5lIEk5MTVfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTgzMF9GSUZPX0xJTkVfU0laRQkzMgorCisjZGVmaW5lIEc0WF9GSUZPX1NJWkUJCTEyNwogI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3IC8qIDk0NSAmIDk2NSAqLwogI2RlZmluZSBJOTE1X0ZJRk9fU0laRQkJOTUKICNkZWZpbmUgSTg1NUdNX0ZJRk9fU0laRQkxMjcgLyogSW4gY2FjaGVsaW5lcyAqLwogI2RlZmluZSBJODMwX0ZJRk9fU0laRQkJOTUKKworI2RlZmluZSBHNFhfTUFYX1dNCQkweDNmCiAjZGVmaW5lIEk5MTVfTUFYX1dNCQkweDNmCiAKICNkZWZpbmUgSUdEX0RJU1BMQVlfRklGTwk1MTIgLyogaW4gNjRieXRlIHVuaXQgKi8KQEAgLTIwMzAsNiArMjA1MSwxMSBAQAogI2RlZmluZSBQRkFfQ1RMXzEgICAgICAgICAgICAgICAweDY4MDgwCiAjZGVmaW5lIFBGQl9DVExfMSAgICAgICAgICAgICAgIDB4Njg4ODAKICNkZWZpbmUgIFBGX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSAgUEZfRklMVEVSX01BU0sJCSgzPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9QUk9HUkFNTUVECSgwPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9NRURfM3gzCSgxPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9FREdFX0VOSEFOQ0UJKDI8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfU09GVEVOCSgzPDwyMykKICNkZWZpbmUgUEZBX1dJTl9TWgkJMHg2ODA3NAogI2RlZmluZSBQRkJfV0lOX1NaCQkweDY4ODc0CiAjZGVmaW5lIFBGQV9XSU5fUE9TCQkweDY4MDcwCkBAIC0yMTQ5LDExICsyMTc1LDExIEBACiAjZGVmaW5lICBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0sJCSgzPDwxMykKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICAgICAgICgwPDwxMSkKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICAgICAgICgyPDwxMSkKLSNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9NQVNLCQkJKDI8PDExKQorI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMzw8MTEpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgICAoMDw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX0NLNTA1X0VOQUJMRQkJKDE8PDkpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgICAoMjw8OSkKLSNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMjw8OSkKKyNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMzw8OSkKICNkZWZpbmUgIERSRUZfU1VQRVJTUFJFQURfU09VUkNFX0RJU0FCTEUgICAgICAgICgwPDw3KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgKDI8PDcpCiAjZGVmaW5lICBEUkVGX1NTQzRfRE9XTlNQUkVBRCAgICAgICAgICAgICAgICAgICAoMDw8NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYmQ2ZDhkOS4uOTkyZDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTMyLDExICszMiwxNSBAQAogc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJZHBsbF9yZWc7CiAKLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQSkgJiBEUExMX1ZDT19FTkFCTEUpOwotCWVsc2UKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9CKSAmIERQTExfVkNPX0VOQUJMRSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9yZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gUENIX0RQTExfQTogUENIX0RQTExfQjsKKwl9IGVsc2UgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBEUExMX0E6IERQTExfQjsKKwl9CisKKwlyZXR1cm4gKEk5MTVfUkVBRChkcGxsX3JlZykgJiBEUExMX1ZDT19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKQEAgLTQ5LDYgKzUzLDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTY4LDYgKzc1LDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTIzMiwxMCArMjQyLDE2IEBACiAJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLwogCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CiAJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOwotCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKLQlkZXZfcHJpdi0+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+c2F2ZUlNUik7CisJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCA0MzM3NDE0Li45NmNkMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTEsMjAgKzM1MSwxOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBiZGJfZHJpdmVyX2ZlYXR1cmVzICpkcml2ZXI7CiAKLQkvKiBzZXQgZGVmYXVsdCBmb3IgY2hpcHMgd2l0aG91dCBlRFAgKi8KLQlpZiAoIVNVUFBPUlRTX0VEUChkZXYpKSB7Ci0JCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAlkcml2ZXIgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfRFJJVkVSX0ZFQVRVUkVTKTsKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkKKwlpZiAoZHJpdmVyICYmIFNVUFBPUlRTX0VEUChkZXYpICYmCisJICAgIGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkgewogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7CisJfQogCi0JaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmR1YWxfZnJlcXVlbmN5KQogCQlkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggM2MxNDI0MC4uM2JhNjU0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk0Myw2ICs5NDMsNyBAQAogICAgIGNsb2NrLm0gPSA1ICogKGNsb2NrLm0xICsgMikgKyAoY2xvY2subTIgKyAyKTsKICAgICBjbG9jay5wID0gKGNsb2NrLnAxICogY2xvY2sucDIpOwogICAgIGNsb2NrLmRvdCA9IDk2MDAwICogY2xvY2subSAvIChjbG9jay5uICsgMikgLyBjbG9jay5wOworICAgIGNsb2NrLnZjbyA9IDA7CiAgICAgbWVtY3B5KGJlc3RfY2xvY2ssICZjbG9jaywgc2l6ZW9mKGludGVsX2Nsb2NrX3QpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyNjAsOSArMTI2MSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByZS1pOTY1IG5lZWRzIHRvIGluc3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQgKi8KLQlpZiAoIUlTX0k5NjVHKGRldikgJiYKLQkgICAgb2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCisJLyogSW5zdGFsbCBhIGZlbmNlIGZvciB0aWxlZCBzY2FuLW91dC4gUHJlLWk5NjUgYWx3YXlzIG5lZWRzIGEgZmVuY2UsCisJICogd2hlcmVhcyA5NjUrIG9ubHkgcmVxdWlyZXMgYSBmZW5jZSBpZiB1c2luZyBmcmFtZWJ1ZmZlciBjb21wcmVzc2lvbi4KKwkgKiBGb3Igc2ltcGxpY2l0eSwgd2UgYWx3YXlzIGluc3RhbGwgYSBmZW5jZSBhcyB0aGUgY29zdCBpcyBub3QgdGhhdCBvbmVyb3VzLgorCSAqLworCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKIAkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTEzLDcgKzE1MTYsNyBAQAogCQkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJCXRlbXAgPSBJOTE1X1JFQUQocGZfY3RsX3JlZyk7Ci0JCQlJOTE1X1dSSVRFKHBmX2N0bF9yZWcsIHRlbXAgfCBQRl9FTkFCTEUpOworCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFIHwgUEZfRklMVEVSX01FRF8zeDMpOwogCiAJCQkvKiBjdXJyZW50bHkgZnVsbCBhc3BlY3QgKi8KIAkJCUk5MTVfV1JJVEUocGZfd2luX3BvcywgMCk7CkBAIC0xODAxLDYgKzE4MDQsOCBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKKwkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKKwogCQkvKiBFbmFibGUgdGhlIERQTEwgKi8KIAkJdGVtcCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgewpAQCAtMTgzOCw3ICsxODQzLDYgQEAKIAogCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0byBlbmFibGUgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KIAkJLy9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8KLQkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKIAlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOwpAQCAtMjA4Miw3ICsyMDg2LDcgQEAKICNkZWZpbmUgTElOS19OIDB4ODAwMDAKIAogc3RhdGljIHZvaWQKLWlnZG5nX2NvbXB1dGVfbV9uKGludCBieXRlc19wZXJfcGl4ZWwsIGludCBubGFuZXMsCitpZ2RuZ19jb21wdXRlX21fbihpbnQgYml0c19wZXJfcGl4ZWwsIGludCBubGFuZXMsCiAJCWludCBwaXhlbF9jbG9jaywgaW50IGxpbmtfY2xvY2ssCiAJCXN0cnVjdCBmZGlfbV9uICptX24pCiB7CkBAIC0yMDkyLDcgKzIwOTYsOCBAQAogCiAJdGVtcCA9ICh1NjQpIERBVEFfTiAqIHBpeGVsX2Nsb2NrOwogCXRlbXAgPSBkaXZfdTY0KHRlbXAsIGxpbmtfY2xvY2spOwotCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYnl0ZXNfcGVyX3BpeGVsLCBubGFuZXMpOworCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYml0c19wZXJfcGl4ZWwsIG5sYW5lcyk7CisJbV9uLT5nbWNoX20gPj49IDM7IC8qIGNvbnZlcnQgdG8gYnl0ZXNfcGVyX3BpeGVsICovCiAJbV9uLT5nbWNoX24gPSBEQVRBX047CiAJZmRpX3JlZHVjZV9yYXRpbygmbV9uLT5nbWNoX20sICZtX24tPmdtY2hfbik7CiAKQEAgLTIxNDAsNiArMjE0NSwxMyBAQAogCUlHRF9DVVJTT1JfR1VBUkRfV00sCiAJSUdEX0ZJRk9fTElORV9TSVpFCiB9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0geworCUc0WF9GSUZPX1NJWkUsCisJRzRYX01BWF9XTSwKKwlHNFhfTUFYX1dNLAorCTIsCisJRzRYX0ZJRk9fTElORV9TSVpFLAorfTsKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBpOTQ1X3dtX2luZm8gPSB7CiAJSTk0NV9GSUZPX1NJWkUsCiAJSTkxNV9NQVhfV00sCkBAIC0yNDMwLDE3ICsyNDQyLDc0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVudXNlZCwgaW50IHVudXNlZDIsCi0JCQkgIGludCB1bnVzZWQzLCBpbnQgdW51c2VkNCkKK3N0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgIGludCBwbGFuZWFfY2xvY2ssCisJCQkgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHBpeGVsX3NpemUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZndfYmxjX3NlbGYgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpOworCWludCB0b3RhbF9zaXplLCBjYWNoZWxpbmVfc2l6ZTsKKwlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIGN1cnNvcmFfd20sIGN1cnNvcmJfd20sIGN1cnNvcl9zcjsKKwlzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBwbGFuZWFfcGFyYW1zLCBwbGFuZWJfcGFyYW1zOworCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOworCWludCBzcl9jbG9jaywgc3JfZW50cmllcyA9IDAsIGVudHJpZXNfcmVxdWlyZWQ7CiAKLQlpZiAoaTkxNV9wb3dlcnNhdmUpCi0JCWZ3X2JsY19zZWxmIHw9IEZXX0JMQ19TRUxGX0VOOwotCWVsc2UKLQkJZndfYmxjX3NlbGYgJj0gfkZXX0JMQ19TRUxGX0VOOwotCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmKTsKKwkvKiBDcmVhdGUgY29waWVzIG9mIHRoZSBiYXNlIHNldHRpbmdzIGZvciBlYWNoIHBpcGUgKi8KKwlwbGFuZWFfcGFyYW1zID0gcGxhbmViX3BhcmFtcyA9IGc0eF93bV9pbmZvOworCisJLyogR3JhYiBhIGNvdXBsZSBvZiBnbG9iYWwgdmFsdWVzIGJlZm9yZSB3ZSBvdmVyd3JpdGUgdGhlbSAqLworCXRvdGFsX3NpemUgPSBwbGFuZWFfcGFyYW1zLmZpZm9fc2l6ZTsKKwljYWNoZWxpbmVfc2l6ZSA9IHBsYW5lYV9wYXJhbXMuY2FjaGVsaW5lX3NpemU7CisKKwkvKgorCSAqIE5vdGU6IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IGZvciB2YXJpb3VzIGNsb2NrICYKKwkgKiBsYXRlbmN5IHZhbHVlcy4KKwkgKiBjbG9ja3MgZ28gZnJvbSBhIGZldyB0aG91c2FuZCB0byBzZXZlcmFsIGh1bmRyZWQgdGhvdXNhbmQuCisJICogbGF0ZW5jeSBpcyB1c3VhbGx5IGEgZmV3IHRob3VzYW5kCisJICovCisJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmVhX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICogbGF0ZW5jeV9ucykgLworCQkxMDAwOworCWVudHJpZXNfcmVxdWlyZWQgLz0gRzRYX0ZJRk9fTElORV9TSVpFOworCXBsYW5lYV93bSA9IGVudHJpZXNfcmVxdWlyZWQgKyBwbGFuZWFfcGFyYW1zLmd1YXJkX3NpemU7CisKKwllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWJfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKiBsYXRlbmN5X25zKSAvCisJCTEwMDA7CisJZW50cmllc19yZXF1aXJlZCAvPSBHNFhfRklGT19MSU5FX1NJWkU7CisJcGxhbmViX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYl9wYXJhbXMuZ3VhcmRfc2l6ZTsKKworCWN1cnNvcmFfd20gPSBjdXJzb3JiX3dtID0gMTY7CisJY3Vyc29yX3NyID0gMzI7CisKKwlEUk1fREVCVUcoIkZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZFxuIiwgcGxhbmVhX3dtLCBwbGFuZWJfd20pOworCisJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLworCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgeworCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KKwkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CisKKwkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKKworCQkvKiBVc2UgbnMvdXMgdGhlbiBkaXZpZGUgdG8gcHJlc2VydmUgcHJlY2lzaW9uICovCisJCXNyX2VudHJpZXMgPSAoKChzcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzKSArIDEpICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheSkgLyAxMDAwOworCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOworCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKKwlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKKwkJICBwbGFuZWFfd20sIHBsYW5lYl93bSwgc3JfZW50cmllcyk7CisKKwlwbGFuZWFfd20gJj0gMHgzZjsKKwlwbGFuZWJfd20gJj0gMHgzZjsKKworCUk5MTVfV1JJVEUoRFNQRlcxLCAoc3JfZW50cmllcyA8PCBEU1BGV19TUl9TSElGVCkgfAorCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8CisJCSAgIChwbGFuZWJfd20gPDwgRFNQRldfUExBTkVCX1NISUZUKSB8IHBsYW5lYV93bSk7CisJSTkxNV9XUklURShEU1BGVzIsIChJOTE1X1JFQUQoRFNQRlcyKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAorCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7CisJLyogSFBMTCBvZmYgaW4gU1IgaGFzIHNvbWUgaXNzdWVzIG9uIEc0eC4uLiBkaXNhYmxlIGl0ICovCisJSTkxNV9XUklURShEU1BGVzMsIChJOTE1X1JFQUQoRFNQRlczKSAmIH5EU1BGV19IUExMX1NSX0VOKSB8CisJCSAgIChjdXJzb3Jfc3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bnVzZWQsIGludCB1bnVzZWQyLApAQCAtMjU4Niw2ICsyNjU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOwogCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20pCisJCXJldHVybjsKKwogCS8qIEdldCB0aGUgY2xvY2sgY29uZmlnIGZyb20gYm90aCBwbGFuZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTI3NjMsNyArMjgzNSw3IEBACiAKIAkvKiBGREkgbGluayAqLwogCWlmIChJU19JR0RORyhkZXYpKSB7Ci0JCWludCBsYW5lLCBsaW5rX2J3OworCQlpbnQgbGFuZSwgbGlua19idywgYnBwOwogCQkvKiBlRFAgZG9lc24ndCByZXF1aXJlIEZESSBsaW5rLCBzbyBqdXN0IHNldCBEUCBNL04KIAkJICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluayBjb25maWcgKi8KIAkJaWYgKGlzX2VkcCkgewpAQCAtMjc4MiwxMCArMjg1NCw3MiBAQAogCQkJbGFuZSA9IDQ7CiAJCQlsaW5rX2J3ID0gMjcwMDAwOwogCQl9Ci0JCWlnZG5nX2NvbXB1dGVfbV9uKDMsIGxhbmUsIHRhcmdldF9jbG9jaywKKworCQkvKiBkZXRlcm1pbmUgcGFuZWwgY29sb3IgZGVwdGggKi8KKwkJdGVtcCA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJCXN3aXRjaCAodGVtcCAmIFBJUEVfQlBDX01BU0spIHsKKwkJY2FzZSBQSVBFXzhCUEM6CisJCQlicHAgPSAyNDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfMTBCUEM6CisJCQlicHAgPSAzMDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfNkJQQzoKKwkJCWJwcCA9IDE4OworCQkJYnJlYWs7CisJCWNhc2UgUElQRV8xMkJQQzoKKwkJCWJwcCA9IDM2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVua25vd24gcGlwZSBicGMgdmFsdWVcbiIpOworCQkJYnBwID0gMjQ7CisJCX0KKworCQlpZ2RuZ19jb21wdXRlX21fbihicHAsIGxhbmUsIHRhcmdldF9jbG9jaywKIAkJCQkgIGxpbmtfYncsICZtX24pOwogCX0KIAorCS8qIElyb25sYWtlOiB0cnkgdG8gc2V0dXAgZGlzcGxheSByZWYgY2xvY2sgYmVmb3JlIERQTEwKKwkgKiBlbmFibGluZy4gVGhpcyBpcyBvbmx5IHVuZGVyIGRyaXZlcidzIGNvbnRyb2wgYWZ0ZXIKKwkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKKwkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCisJICovCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJdGVtcCA9IEk5MTVfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCisJCXRlbXAgJj0gfkRSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLOworCQl0ZW1wIHw9IERSRUZfTk9OU1BSRUFEX1NPVVJDRV9FTkFCTEU7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQl0ZW1wICY9IH5EUkVGX1NTQ19TT1VSQ0VfTUFTSzsKKwkJdGVtcCB8PSBEUkVGX1NTQ19TT1VSQ0VfRU5BQkxFOworCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJdWRlbGF5KDIwMCk7CisKKwkJaWYgKGlzX2VkcCkgeworCQkJaWYgKGRldl9wcml2LT5sdmRzX3VzZV9zc2MpIHsKKwkJCQl0ZW1wIHw9IERSRUZfU1NDMV9FTkFCTEU7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJCQl1ZGVsYXkoMjAwKTsKKworCQkJCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKKwkJCQl0ZW1wIHw9IERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfRE9XTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0gZWxzZSB7CisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChJU19JR0QoZGV2KSkgewogCQlmcCA9ICgxIDw8IGNsb2NrLm4pIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOwogCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCkBAIC0yOTM2LDYgKzMwNzAsOCBAQAogCiAJCWx2ZHMgPSBJOTE1X1JFQUQobHZkc19yZWcpOwogCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIHwgTFZEU19QSVBFQl9TRUxFQ1Q7CisJCS8qIHNldCB0aGUgY29ycmVzcG9uc2RpbmcgTFZEU19CT1JERVIgYml0ICovCisJCWx2ZHMgfD0gZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHM7CiAJCS8qIFNldCB0aGUgQjAtQjMgZGF0YSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8KIAkJICogc2V0IHRoZSBEUExMcyBmb3IgZHVhbC1jaGFubmVsIG1vZGUgb3Igbm90LgogCQkgKi8KQEAgLTQxMjQsNyArNDI2MCw5IEBACiAJICogRGlzYWJsZSBjbG9jayBnYXRpbmcgcmVwb3J0ZWQgdG8gd29yayBpbmNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlCiAJICogc3BlY3MsIGJ1dCBlbmFibGUgYXMgbXVjaCBlbHNlIGFzIHdlIGNhbi4KIAkgKi8KLQlpZiAoSVNfRzRYKGRldikpIHsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlyZXR1cm47CisJfSBlbHNlIGlmIChJU19HNFgoZGV2KSkgewogCQl1aW50MzJfdCBkc3BjbGtfZ2F0ZTsKIAkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMSwgMCk7CiAJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDIsIFZGX1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKQEAgLTQyMTIsNyArNDM1MCw5IEBACiAJCQlpODMwX2dldF9kaXNwbGF5X2Nsb2NrX3NwZWVkOwogCiAJLyogRm9yIEZJRk8gd2F0ZXJtYXJrIHVwZGF0ZXMgKi8KLQlpZiAoSVNfRzRYKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpCisJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CisJZWxzZSBpZiAoSVNfRzRYKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CiAJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTk2NV91cGRhdGVfd207CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCBmNDg1NmE1Li5kODM0NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogewogCXN0cnVjdCBpbnRlbF9kcF9wcml2ICAgKmRwX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwogCi0JRFJNX0VSUk9SKCJpMmNfaW5pdCAlc1xuIiwgbmFtZSk7CisJRFJNX0RFQlVHX0tNUygiaTJjX2luaXQgJXNcbiIsIG5hbWUpOwogCWRwX3ByaXYtPmFsZ28ucnVubmluZyA9IGZhbHNlOwogCWRwX3ByaXYtPmFsZ28uYWRkcmVzcyA9IDA7CiAJZHBfcHJpdi0+YWxnby5hdXhfY2ggPSBpbnRlbF9kcF9pMmNfYXV4X2NoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDk4YWUzZDcuLjA1NTk4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTM4MCw3ICszODAsNyBAQAogCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfcG9zOwogCQkvKiBrZWVwIHRoZSB2c3luYyB3aWR0aCBjb25zdGFudCAqLwogCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9Ci0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgKyB2c3luY193aWR0aDsKKwkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsgdnN5bmNfd2lkdGg7CiAJCWJvcmRlciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfU0NBTEVfQVNQRUNUOgpAQCAtNTI2LDYgKzUyNiwxNCBAQAogCWx2ZHNfcHJpdi0+cGZpdF9jb250cm9sID0gcGZpdF9jb250cm9sOwogCWx2ZHNfcHJpdi0+cGZpdF9wZ21fcmF0aW9zID0gcGZpdF9wZ21fcmF0aW9zOwogCS8qCisJICogV2hlbiB0aGVyZSBleGlzdHMgdGhlIGJvcmRlciwgaXQgbWVhbnMgdGhhdCB0aGUgTFZEU19CT1JEUgorCSAqIHNob3VsZCBiZSBlbmFibGVkLgorCSAqLworCWlmIChib3JkZXIpCisJCWRldl9wcml2LT5sdmRzX2JvcmRlcl9iaXRzIHw9IExWRFNfQk9SREVSX0VOQUJMRTsKKwllbHNlCisJCWRldl9wcml2LT5sdmRzX2JvcmRlcl9iaXRzICY9IH4oTFZEU19CT1JERVJfRU5BQkxFKTsKKwkvKgogCSAqIFhYWDogSXQgd291bGQgYmUgbmljZSB0byBzdXBwb3J0IGxvd2VyIHJlZnJlc2ggcmF0ZXMgb24gdGhlCiAJICogcGFuZWxzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHBlcmhhcHMgbWF0Y2ggdGhlCiAJICogdXNlcidzIHJlcXVlc3RlZCByZWZyZXNoIHJhdGUuCkBAIC02NTYsNiArNjY0LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBMaWQgZXZlbnRzLiBOb3RlIHRoZSB1c2Ugb2YgJ21vZGVzZXRfb25fbGlkJzoKKyAqICAtIHdlIHNldCBpdCBvbiBsaWQgY2xvc2UsIGFuZCByZXNldCBpdCBvbiBvcGVuCisgKiAgLSB3ZSB1c2UgaXQgYXMgYSAib25seSBvbmNlIiBiaXQgKGllIHdlIGlnbm9yZQorICogICAgZHVwbGljYXRlIGV2ZW50cyB3aGVyZSBpdCB3YXMgYWxyZWFkeSBwcm9wZXJseQorICogICAgc2V0L3Jlc2V0KQorICogIC0gdGhlIHN1c3BlbmQvcmVzdW1lIHBhdGhzIHdpbGwgYWxzbyBzZXQgaXQgdG8KKyAqICAgIHplcm8sIHNpbmNlIHRoZXkgcmVzdG9yZSB0aGUgbW9kZSAoImxpZCBvcGVuIikuCisgKi8KIHN0YXRpYyBpbnQgaW50ZWxfbGlkX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJCSAgICB2b2lkICp1bnVzZWQpCiB7CkBAIC02NjMsMTMgKzY4MCwxOSBAQAogCQljb250YWluZXJfb2YobmIsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBsaWRfbm90aWZpZXIpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCi0JaWYgKGFjcGlfbGlkX29wZW4oKSAmJiAhZGV2X3ByaXYtPnN1c3BlbmRlZCkgewotCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwotCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWlmICghYWNwaV9saWRfb3BlbigpKSB7CisJCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDE7CisJCXJldHVybiBOT1RJRllfT0s7CiAJfQogCi0JZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQoZGV2X3ByaXYtPmRldik7CisJaWYgKCFkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQpCisJCXJldHVybiBOT1RJRllfT0s7CisKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAKIAlyZXR1cm4gTk9USUZZX09LOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDlhMjg5MjMuLmI1NzEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDE0ZmE5NzAuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+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+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggMTYxMDk0Yy4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCiBpbnQgcjEwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3Qgc3RhdHVzLCBtc2lfcmVhcm07CiAKIAlzdGF0dXMgPSByMTAwX2lycV9hY2socmRldik7CiAJaWYgKCFzdGF0dXMpIHsKQEAgLTIwOSw2ICsyMDksMjEgQEAKIAkJfQogCQlzdGF0dXMgPSByMTAwX2lycV9hY2socmRldik7CiAJfQorCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkgeworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfUlM0MDA6CisJCWNhc2UgQ0hJUF9SUzQ4MDoKKwkJCW1zaV9yZWFybSA9IFJSRUczMihSQURFT05fQUlDX0NOVEwpICYgflJTNDAwX01TSV9SRUFSTTsKKwkJCVdSRUczMihSQURFT05fQUlDX0NOVEwsIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0gfCBSUzQwMF9NU0lfUkVBUk0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTikgJiB+UlYzNzBfTVNJX1JFQVJNX0VOOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTiwgbXNpX3JlYXJtIHwgUlYzNzBfTVNJX1JFQVJNX0VOKTsKKwkJCWJyZWFrOworCQl9CisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjQwLDcgKzI1NSw3IEBACiAJaW50IHI7CiAKIAlpZiAocmRldi0+d2Iud2Jfb2JqID09IE5VTEwpIHsKLQkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIDQwOTYsCisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCBSQURFT05fR1BVX1BBR0VfU0laRSwKIAkJCQkJIHRydWUsCiAJCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCiAJCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CkBAIC01NjMsMTkgKzU3OCwxOSBAQAogCWluZGlyZWN0MV9zdGFydCA9IDE2OwogCS8qIGNwIHNldHVwICovCiAJV1JFRzMyKDB4NzE4LCBwcmVfd3JpdGVfdGltZXIgfCAocHJlX3dyaXRlX2xpbWl0IDw8IDI4KSk7Ci0JV1JFRzMyKFJBREVPTl9DUF9SQl9DTlRMLAotI2lmZGVmIF9fQklHX0VORElBTgotCSAgICAgICBSQURFT05fQlVGX1NXQVBfMzJCSVQgfAotI2VuZGlmCi0JICAgICAgIFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAorCXRtcCA9IChSRUdfU0VUKFJBREVPTl9SQl9CVUZTWiwgcmJfYnVmc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQkxLU1osIHJiX2Jsa3N6KSB8CiAJICAgICAgIFJFR19TRVQoUkFERU9OX01BWF9GRVRDSCwgbWF4X2ZldGNoKSB8CiAJICAgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworI2lmZGVmIF9fQklHX0VORElBTgorCXRtcCB8PSBSQURFT05fQlVGX1NXQVBfMzJCSVQ7CisjZW5kaWYKKwlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCk7CisKIAkvKiBTZXQgcmluZyBhZGRyZXNzICovCiAJRFJNX0lORk8oInJhZGVvbjogcmluZyBhdCAweCUwMTZsWFxuIiwgKHVuc2lnbmVkIGxvbmcpcmRldi0+Y3AuZ3B1X2FkZHIpOwogCVdSRUczMihSQURFT05fQ1BfUkJfQkFTRSwgcmRldi0+Y3AuZ3B1X2FkZHIpOwogCS8qIEZvcmNlIHJlYWQgJiB3cml0ZSBwdHIgdG8gMCAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9DTlRMLCB0bXAgfCBSQURFT05fUkJfUlBUUl9XUl9FTkEpOwogCVdSRUczMihSQURFT05fQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSLCAwKTsKQEAgLTIzNjQsNyArMjM3OSw3IEBACiAJLyoKIAkgIEZpbmQgdGhlIHRvdGFsIGxhdGVuY3kgZm9yIHRoZSBkaXNwbGF5IGRhdGEuCiAJKi8KLQlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4MCk7CisJZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgPSByZml4ZWRfY29uc3QoOCk7CiAJZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgPSByZml4ZWRfZGl2KGRpc3BfbGF0ZW5jeV9vdmVyaGVhZCwgc2Nsa19mZik7CiAJbWNfbGF0ZW5jeV9tY2xrLmZ1bGwgKz0gZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgKyBjdXJfbGF0ZW5jeV9tY2xrLmZ1bGw7CiAJbWNfbGF0ZW5jeV9zY2xrLmZ1bGwgKz0gZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgKyBjdXJfbGF0ZW5jeV9zY2xrLmZ1bGw7CkBAIC0yNTYyLDggKzI1NzcsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByMTAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoc3RydWN0IHIxMDBfY3NfdHJhY2tfdGV4dHVyZSAqdCkKIHsKIAlEUk1fRVJST1IoInBpdGNoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5waXRjaCk7CisJRFJNX0VSUk9SKCJ1c2VfcGl0Y2ggICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+dXNlX3BpdGNoKTsKIAlEUk1fRVJST1IoIndpZHRoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aCk7CisJRFJNX0VSUk9SKCJ3aWR0aF8xMSAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+d2lkdGhfMTEpOwogCURSTV9FUlJPUigiaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmhlaWdodCk7CisJRFJNX0VSUk9SKCJoZWlnaHRfMTEgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0XzExKTsKIAlEUk1fRVJST1IoIm51bSBsZXZlbHMgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5udW1fbGV2ZWxzKTsKIAlEUk1fRVJST1IoImRlcHRoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT50eGRlcHRoKTsKIAlEUk1fRVJST1IoImJwcCAgICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5jcHApOwpAQCAtMjYyMywxNSArMjY0MSwxNyBAQAogCQkJCWVsc2UKIAkJCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS5waXRjaCAvICgxIDw8IGkpOwogCQkJfSBlbHNlIHsKLQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoIC8gKDEgPDwgaSk7CisJCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS53aWR0aDsKIAkJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCiAJCQkJCXcgfD0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoXzExOworCQkJCXcgPSB3IC8gKDEgPDwgaSk7CiAJCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX3cpCiAJCQkJCXcgPSByb3VuZHVwX3Bvd19vZl90d28odyk7CiAJCQl9Ci0JCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodCAvICgxIDw8IGkpOworCQkJaCA9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHQ7CiAJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCiAJCQkJaCB8PSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0XzExOworCQkJaCA9IGggLyAoMSA8PCBpKTsKIAkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF9oKQogCQkJCWggPSByb3VuZHVwX3Bvd19vZl90d28oaCk7CiAJCQlzaXplICs9IHcgKiBoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCBlMDhjNGE4Li4yZjQzZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDQwOTY7CisJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDVjN2ZlNTIuLjFjZWZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0zMTEsNiArMzExLDggQEAKIAl9CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCiAJcjMwMF92cmFtX2luZm8ocmRldik7CiAJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAppbmRleCA4NjhhZGQ2Li43YmFhNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCkBAIC0zODQsOSArMzg0LDE2IEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfVElMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfTUFDUk9fQUREUkVTU19NT0RFICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCiAKKy8qIFRoZSBSN3h4ICpfSElHSCBzdXJmYWNlIHJlZ3MgYXJlIGJhY2t3YXJkczsgdGhlIEQxIHJlZ3MgYXJlIGluIHRoZSBEMgorICogYmxvY2sgYW5kIHZpY2UgdmVyc2EuICBUaGlzIGFwcGxpZXMgdG8gR1JQSCwgQ1VSLCBldGMuCisgKi8KICNkZWZpbmUgQVZJVk9fRDFHUlBIX0xVVF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMDgKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDYxMTAKKyNkZWZpbmUgUjcwMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgICAweDY5MTQKKyNkZWZpbmUgUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgICAweDYxMTQKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDYxMTgKKyNkZWZpbmUgUjcwMF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAweDY5MWMKKyNkZWZpbmUgUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAweDYxMWMKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjAKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjQKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfT0ZGU0VUX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjgKQEAgLTQwNCw2ICs0MTEsOCBAQAogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFDVVJTT1JfTU9ERV9NQVNLICAgICAgICAgKDMgPDwgOCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxQ1VSU09SX01PREVfMjRCUFAgICAgICAgIDIKICNkZWZpbmUgQVZJVk9fRDFDVVJfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgIDB4NjQwOAorI2RlZmluZSBSNzAwX0QxQ1VSX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgMHg2YzBjCisjZGVmaW5lIFI3MDBfRDJDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAweDY0MGMKICNkZWZpbmUgQVZJVk9fRDFDVVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NjQxMAogI2RlZmluZSBBVklWT19EMUNVUl9QT1NJVElPTiAgICAgICAgICAgICAgICAgICAgMHg2NDE0CiAjZGVmaW5lIEFWSVZPX0QxQ1VSX0hPVF9TUE9UICAgICAgICAgICAgICAgICAgICAweDY0MTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggYTU1NWI3Yi4uZjc0MzUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTI2MCw2ICsyNjAsOCBAQAogCX0KIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KIAlyNTIwX3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA2MDk3MTk0Li4yNzhmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMzM5LDExICszMzksMTAgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKLQlpbnQgY2hhbnNpemU7CisJaW50IGNoYW5zaXplLCBudW1jaGFuOwogCWludCByOwogCiAJLyogR2V0IFZSQU0gaW5mb3JtYXRpb25zICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJdG1wID0gUlJFRzMyKFJBTUNGRyk7CiAJaWYgKHRtcCAmIENIQU5TSVpFX09WRVJSSURFKSB7CkBAIC0zNTMsMTcgKzM1MiwyMyBAQAogCX0gZWxzZSB7CiAJCWNoYW5zaXplID0gMzI7CiAJfQotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNjAwKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA4ICogY2hhbnNpemU7Ci0JfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjY3MCkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gNCAqIGNoYW5zaXplOwotCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjEwKSB8fAotCQkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gY2hhbnNpemU7Ci0JfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzApIHx8Ci0JCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAyICogY2hhbnNpemU7CisJdG1wID0gUlJFRzMyKENITUFQKTsKKwlzd2l0Y2ggKCh0bXAgJiBOT09GQ0hBTl9NQVNLKSA+PiBOT09GQ0hBTl9TSElGVCkgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQludW1jaGFuID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQludW1jaGFuID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQludW1jaGFuID0gNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQludW1jaGFuID0gODsKKwkJYnJlYWs7CiAJfQorCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBudW1jaGFuICogY2hhbnNpemU7CiAJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KIAlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwogCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOwpAQCAtNDA0LDM1ICs0MDksMjkgQEAKIAkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgewotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IChSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYKLQkJCQkJCQkJMHhGRkZGKSA8PCAyNDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQkJdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgewotCQkJCS8qIEVub3VnaCBwbGFjZSBhZnRlciB2cmFtICovCi0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOwotCQkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkJLyogRW5vdWdoIHBsYWNlIGJlZm9yZSB2cmFtICovCi0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTm90IGVub3VnaCBwbGFjZSBhZnRlciBvciBiZWZvcmUgc2hyaW5rCi0JCQkJICogZ2FydCBzaXplCi0JCQkJICovCi0JCQkJaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPiAoMHhGRkZGRkZGRlVMIC0gdG1wKSkgewotCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOwotCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgorCQkJCQkJCTB4RkZGRikgPDwgMjQ7CisJCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgeworCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHgwMDAwMDAwMFVMOwotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKKwkJCSAqIGdhcnQgc2l6ZQorCQkJICovCisJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7CisJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKKwkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJCQl9IGVsc2UgeworCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKKwkJCX0KIAkJfQorCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwogCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7CkBAIC04NTksNyArODU4LDggQEAKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKERCX0RFQlVHLCBQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKERCX0RFQlVHLCAwKTsKQEAgLTg3Niw3ICs4NzYsOCBAQAogCXRtcCA9IFJSRUczMihTUV9NU19GSUZPX1NJWkVTKTsKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQl0bXAgPSAoQ0FDSEVfRklGT19TSVpFKDB4YSkgfAogCQkgICAgICAgRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAogCQkgICAgICAgRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfApAQCAtOTE5LDcgKzkyMCw4IEBACiAJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CiAJfSBlbHNlIGlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCS8qIG5vIHZlcnRleCBjYWNoZSAqLwogCQlzcV9jb25maWcgJj0gflZDX0VOQUJMRTsKIApAQCAtOTc2LDcgKzk3OCw4IEBACiAKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQykpOwpAQCAtMTAwMiw4ICsxMDA1LDkgQEAKIAl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKLQljYXNlIENISVBfUlM3ODA6CiAJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CiAJCXRtcCArPSAzMjsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjcwOgpAQCAtMTA0NCw4ICsxMDQ4LDkgQEAKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wID0gVENfTDJfU0laRSg4KTsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjMwOgpAQCAtMTI2NywxOSArMTI3MiwxNyBAQAogCiAJLyogU2V0IHJpbmcgYnVmZmVyIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyZGV2LT5jcC5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKFJBREVPTl9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKLQkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOwotI2Vsc2UKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsKICNlbmRpZgorCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOwogCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKIAogCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLwogCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KLQl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwpAQCAtMTQwMCw3ICsxNDAzLDcgQEAKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwgdHJ1ZSwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLCB0cnVlLAogCQkJCVJBREVPTl9HRU1fRE9NQUlOX0dUVCwgZmFsc2UsICZyZGV2LT53Yi53Yl9vYmopOwogCQlpZiAocikgewogCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBXQiBidWZmZXIgKCVkKS5cbiIsIHIpOwpAQCAtMTQ1MCw4ICsxNDUzLDggQEAKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKIHsKLQlyNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIDQwOTYpOwotCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiA0MDk2KTsKKwlyNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwlyNjAwX2ttc19ibGl0X2NvcHkocmRldiwgc3JjX29mZnNldCwgZHN0X29mZnNldCwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCXI2MDBfYmxpdF9kb25lX2NvcHkocmRldiwgZmVuY2UpOwogCXJldHVybiAwOwogfQpAQCAtMTYzMiwxMCArMTYzNSwxMyBAQAogCXI2MDBfc2NyYXRjaF9pbml0KHJkZXYpOwogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwppbmRleCBkZWM1MDEwLi41ZWE0MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKQEAgLTU4Miw2ICs1ODIsOCBAQAogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKKwl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisKIAlpZiAoKHNpemVfYnl0ZXMgJiAzKSB8fCAoc3JjX2dwdV9hZGRyICYgMykgfHwgKGRzdF9ncHVfYWRkciAmIDMpKSB7CiAJCW1heF9ieXRlcyA9IDgxOTI7CiAKQEAgLTYxNyw4ICs2MTksOCBAQAogCQkJCWlmICghZGV2X3ByaXYtPmJsaXRfdmIpCiAJCQkJCXJldHVybjsKIAkJCQlzZXRfc2hhZGVycyhkZXYpOworCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAkJCX0KLQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3gpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzA2LDggKzcwOCw4IEBACiAJCQkJCXJldHVybjsKIAogCQkJCXNldF9zaGFkZXJzKGRldik7CisJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCQkJfQotCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCiAJCQl2YlswXSA9IGkyZihkc3RfeCAvIDQpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzcyLDYgKzc3NCw3IEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY2JfZm9ybWF0LCB0ZXhfZm9ybWF0OworCWludCBzeDIsIHN5MiwgZHgyLCBkeTI7CiAJdTY0IHZiX2FkZHI7CiAJdTMyICp2YjsKIApAQCAtNzg2LDE2ICs3ODksMTAgQEAKIAl9CiAJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCi0JaWYgKGNwcCA9PSA0KSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKLQl9IGVsc2UgaWYgKGNwcCA9PSAyKSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzVfNl81OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzVfNl81OwotCX0gZWxzZSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfODsKLQl9CisJc3gyID0gc3ggKyB3OworCXN5MiA9IHN5ICsgaDsKKwlkeDIgPSBkeCArIHc7CisJZHkyID0gZHkgKyBoOwogCiAJdmJbMF0gPSBpMmYoZHgpOwogCXZiWzFdID0gaTJmKGR5KTsKQEAgLTgwMywzMSArODAwLDQ2IEBACiAJdmJbM10gPSBpMmYoc3kpOwogCiAJdmJbNF0gPSBpMmYoZHgpOwotCXZiWzVdID0gaTJmKGR5ICsgaCk7CisJdmJbNV0gPSBpMmYoZHkyKTsKIAl2Yls2XSA9IGkyZihzeCk7Ci0JdmJbN10gPSBpMmYoc3kgKyBoKTsKKwl2Yls3XSA9IGkyZihzeTIpOwogCi0JdmJbOF0gPSBpMmYoZHggKyB3KTsKLQl2Yls5XSA9IGkyZihkeSArIGgpOwotCXZiWzEwXSA9IGkyZihzeCArIHcpOwotCXZiWzExXSA9IGkyZihzeSArIGgpOworCXZiWzhdID0gaTJmKGR4Mik7CisJdmJbOV0gPSBpMmYoZHkyKTsKKwl2YlsxMF0gPSBpMmYoc3gyKTsKKwl2YlsxMV0gPSBpMmYoc3kyKTsKKworCXN3aXRjaChjcHApIHsKKwljYXNlIDQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7CisJCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKKwkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfODsKKwkJdGV4X2Zvcm1hdCA9IEZNVF84OworCQlicmVhazsKKwl9CiAKIAkvKiBzcmMgKi8KIAlzZXRfdGV4X3Jlc291cmNlKGRldl9wcml2LCB0ZXhfZm9ybWF0LAogCQkJIHNyY19waXRjaCAvIGNwcCwKLQkJCSBzeSArIGgsIHNyY19waXRjaCAvIGNwcCwKKwkJCSBzeTIsIHNyY19waXRjaCAvIGNwcCwKIAkJCSBzcmNfZ3B1X2FkZHIpOwogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKLQkJCSAgICBSNjAwX1RDX0FDVElPTl9FTkEsIChzcmNfcGl0Y2ggKiAoc3kgKyBoKSksIHNyY19ncHVfYWRkcik7CisJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCBzcmNfcGl0Y2ggKiBzeTIsIHNyY19ncHVfYWRkcik7CiAKIAkvKiBkc3QgKi8KIAlzZXRfcmVuZGVyX3RhcmdldChkZXZfcHJpdiwgY2JfZm9ybWF0LAotCQkJICBkc3RfcGl0Y2ggLyBjcHAsIGR5ICsgaCwKKwkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeTIsCiAJCQkgIGRzdF9ncHVfYWRkcik7CiAKIAkvKiBzY2lzc29ycyAqLwotCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeCArIHcsIGR5ICsgaCk7CisJc2V0X3NjaXNzb3JzKGRldl9wcml2LCBkeCwgZHksIGR4MiwgZHkyKTsKIAogCS8qIFZlcnRleCBidWZmZXIgc2V0dXAgKi8KIAl2Yl9hZGRyID0gZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKwpAQCAtODQwLDcgKzg1Miw3IEBACiAKIAljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAogCQkJICAgIFI2MDBfQ0JfQUNUSU9OX0VOQSB8IFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEsCi0JCQkgICAgZHN0X3BpdGNoICogKGR5ICsgaCksIGRzdF9ncHVfYWRkcik7CisJCQkgICAgZHN0X3BpdGNoICogZHkyLCBkc3RfZ3B1X2FkZHIpOwogCiAJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKz0gMTIgKiA0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCA5MzEwOGJiLi5kYmY3MTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3MTApKQogCQlzcV9jb25maWcgPSAwOwogCWVsc2UKQEAgLTYxMCw2ICs2MTAsNyBAQAogCiAJRFJNX0RFQlVHKCJlbWl0dGluZyBjb3B5ICUxNmxseCAlMTZsbHggJWQgJWRcbiIsIHNyY19ncHVfYWRkciwgZHN0X2dwdV9hZGRyLAogCQkgIHNpemVfYnl0ZXMsIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKKwl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAJaWYgKChzaXplX2J5dGVzICYgMykgfHwgKHNyY19ncHVfYWRkciAmIDMpIHx8IChkc3RfZ3B1X2FkZHIgJiAzKSkgewogCQltYXhfYnl0ZXMgPSA4MTkyOwogCkBAIC02NTIsNyArNjUzLDYgQEAKIAkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAjZW5kaWYKIAkJCX0KLQkJCXZiID0gKHUzMiAqKShyZGV2LT5yNjAwX2JsaXQudmJfaWItPnB0ciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3gpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzQ3LDcgKzc0Nyw2IEBACiAJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCQkJfQogI2VuZGlmCi0JCQl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAKIAkJCXZiWzBdID0gaTJmKGRzdF94IC8gNCk7CiAJCQl2YlsxXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDE3ZTQyMTkuLjBkODIwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC00NjYsNiArNDY2LDIzIEBACiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7CiAJCQlzd2l0Y2ggKHJlZykgeworCQkJY2FzZSBTUV9FU0dTX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfR1NWU19SSU5HX0JBU0U6CisJCQljYXNlIFNRX0VTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfR1NUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9WU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1BTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfRkJVRl9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1JFRFVDX1JJTkdfQkFTRToKKwkJCWNhc2UgU1hfTUVNT1JZX0VYUE9SVF9CQVNFOgorCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTkZJR19SRUcgIgorCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCWJyZWFrOwogCQkJY2FzZSBDUF9DT0hFUl9CQVNFOgogCQkJCS8qIHVzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQyAqLwogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDg3LDYgKzUwNCw3IEBACiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKIAkJCWNhc2UgREJfREVQVEhfQkFTRToKKwkJCWNhc2UgREJfSFRJTEVfREFUQV9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMl9CQVNFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IDliNjRkNDcuLjI3YWI0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTExOSw2ICsxMTksNyBAQAogI2RlZmluZQlEQl9ERUJVRwkJCQkJMHg5ODMwCiAjZGVmaW5lCQlQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORQkJCSgxIDw8IDMxKQogI2RlZmluZQlEQl9ERVBUSF9CQVNFCQkJCQkweDI4MDBDCisjZGVmaW5lCURCX0hUSUxFX0RBVEFfQkFTRQkJCQkweDI4MDE0CiAjZGVmaW5lCURCX1dBVEVSTUFSS1MJCQkJCTB4OTgzOAogI2RlZmluZQkJREVQVEhfRlJFRSh4KQkJCQkJKCh4KSA8PCAwKQogI2RlZmluZQkJREVQVEhfRkxVU0goeCkJCQkJCSgoeCkgPDwgNSkKQEAgLTE3MSw2ICsxNzIsMTQgQEAKICNkZWZpbmUgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKICMgICAgICAgZGVmaW5lIE5VTV9HU19TVEFDS19FTlRSSUVTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCiAjICAgICAgIGRlZmluZSBOVU1fRVNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgU1FfRVNHU19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzQwCisjZGVmaW5lIFNRX0dTVlNfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0OAorI2RlZmluZSBTUV9FU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNTAKKyNkZWZpbmUgU1FfR1NUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzU4CisjZGVmaW5lIFNRX1ZTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM2MAorI2RlZmluZSBTUV9QU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjgKKyNkZWZpbmUgU1FfRkJVRl9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzcwCisjZGVmaW5lIFNRX1JFRFVDX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3OAogCiAjZGVmaW5lIEdSQk1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAogIyAgICAgICBkZWZpbmUgR1JCTV9SRUFEX1RJTUVPVVQoeCkgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCkBAIC0yNzEsNiArMjgwLDEwIEBACiAjZGVmaW5lCVBDSUVfUE9SVF9JTkRFWAkJCQkJMHgwMDM4CiAjZGVmaW5lCVBDSUVfUE9SVF9EQVRBCQkJCQkweDAwM0MKIAorI2RlZmluZSBDSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUgUkFNQ0ZHCQkJCQkJMHgyNDA4CiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMQpAQCAtMzUyLDYgKzM2NSw3IEBACiAKIAogI2RlZmluZQlTWF9NSVNDCQkJCQkJMHgyODM1MAorI2RlZmluZQlTWF9NRU1PUllfRVhQT1JUX0JBU0UJCQkJMHg5MDEwCiAjZGVmaW5lCVNYX0RFQlVHXzEJCQkJCTB4OTA1NAogI2RlZmluZQkJU01YX0VWRU5UX1JFTEVBU0UJCQkJKDEgPDwgMCkKICNkZWZpbmUJCUVOQUJMRV9ORVdfU01YX0FERFJFU1MJCQkJKDEgPDwgMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA1YWIzNWI4Li43NTdmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTEzOSw2ICsxMzksMTAgQEAKIAl1aW50MzJfdCBkZWZhdWx0X3NjbGs7CiB9OwogCisvKgorICogUG93ZXIgbWFuYWdlbWVudAorICovCitpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtMjc2LDYgKzI4MCw4IEBACiAJc3RydWN0IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW0JdnJhbTsKIH07CiAKKyNkZWZpbmUgUkFERU9OX0dQVV9QQUdFX1NJWkUgNDA5NgorCiBzdHJ1Y3QgcmFkZW9uX2dhcnQgewogCWRtYV9hZGRyX3QJCQl0YWJsZV9hZGRyOwogCXVuc2lnbmVkCQkJbnVtX2dwdV9wYWdlczsKQEAgLTYyMSw3ICs2MjcsOSBAQAogCQkgICAgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgIHVuc2lnbmVkIG51bV9wYWdlcywKIAkJICAgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKKwl1aW50MzJfdCAoKmdldF9lbmdpbmVfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7CisJdWludDMyX3QgKCpnZXRfbWVtb3J5X2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnNldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBtZW1fY2xvY2spOwogCXZvaWQgKCpzZXRfcGNpZV9sYW5lcykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7CiAJdm9pZCAoKnNldF9jbG9ja19nYXRpbmcpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKQEAgLTc4Myw2ICs3OTEsNyBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWVfZnc7CS8qIGFsbCBmYW1pbHkgTUUgZmlybXdhcmUgKi8KIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnBmcF9mdzsJLyogcjYvNzAwIFBGUCBmaXJtd2FyZSAqLwogCXN0cnVjdCByNjAwX2JsaXQgcjYwMF9ibGl0OworCWludCBtc2lfZW5hYmxlZDsgLyogbXNpIGVuYWJsZWQgKi8KIH07CiAKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC05NTIsNyArOTYxLDkgQEAKICNkZWZpbmUgcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2JsaXQoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weV9kbWEocmRldiwgcywgZCwgbnAsIGYpIChyZGV2KS0+YXNpYy0+Y29weV9kbWEoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5KChyZGV2KSwgKHMpLCAoZCksIChucCksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikgKHJkZXYpLT5hc2ljLT5nZXRfZW5naW5lX2Nsb2NrKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfZW5naW5lX2Nsb2NrKChyZGV2KSwgKGUpKQorI2RlZmluZSByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9tZW1vcnlfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X21lbW9yeV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfcGNpZV9sYW5lcyhyZGV2LCBsKSAocmRldiktPmFzaWMtPnNldF9wY2llX2xhbmVzKChyZGV2KSwgKGwpKQogI2RlZmluZSByYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9jbG9ja19nYXRpbmcoKHJkZXYpLCAoZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggYzM1MzJjNy4uYzE4ZmJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzEsMTAgKzMxLDEzIEBACiAvKgogICogY29tbW9uIGZ1bmN0aW9ucwogICovCit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7CiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBlbmdfY2xvY2spOwordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCkBAIC05NSw3ICs5OCw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSBOVUxMLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTE0OCw3ICsxNTMsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xODUsNyArMTkyLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0yMjcsNyArMjM2LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTI3Myw3ICsyODQsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0zMTIsNyArMzI1LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIzMDBfY29weV9kbWEsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0zNTcsNyArMzcyLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0zOTMsNyArNDEwLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC00NTYsNyArNDc1LDkgQEAKIAkuY29weV9ibGl0ID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTQ5Myw3ICs1MTQsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5ID0gJnI2MDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggNWI2YzA4Yy4uMmVkODhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC00Niw3ICs0Niw4IEBACiAJCQkgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgIGludCBjb25uZWN0b3JfdHlwZSwKIAkJCSAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKLQkJCSAgYm9vbCBsaW5rYiwgdWludDMyX3QgaWdwX2xhbmVfaW5mbyk7CisJCQkgIGJvb2wgbGlua2IsIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCiAvKiBmcm9tIHJhZGVvbl9sZWdhY3lfZW5jb2Rlci5jICovCiBleHRlcm4gdm9pZApAQCAtMTkzLDYgKzE5NCwyMyBAQAogCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydAogfTsKIAorY29uc3QgdWludDE2X3Qgc3VwcG9ydGVkX2RldmljZXNfY29ubmVjdG9yX29iamVjdF9pZF9jb252ZXJ0W10gPSB7CisJQ09OTkVDVE9SX09CSkVDVF9JRF9OT05FLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JLCAvKiBub3QgYWxsIGJvYXJkcyBzdXBwb3J0IERMICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QsIC8qIG5vdCBhbGwgYm9hcmRzIHN1cHBvcnQgREwgKi8KKwlDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSwgLyogdGVjaG5pY2FsbHkgRFZJLUEgKi8KKwlDT05ORUNUT1JfT0JKRUNUX0lEX0NPTVBPU0lURSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTywKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMsCisJQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEXzlQSU5fRElOLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9CLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPCit9OworCiBjb25zdCBpbnQgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0W10gPSB7CiAJRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24sCiAJRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCkBAIC0yMjksNyArMjQ3LDcgQEAKIAlBVE9NX09CSkVDVF9IRUFERVIgKm9ial9oZWFkZXI7CiAJaW50IGksIGosIHBhdGhfc2l6ZSwgZGV2aWNlX3N1cHBvcnQ7CiAJaW50IGNvbm5lY3Rvcl90eXBlOwotCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQ7CisJdWludDE2X3QgaWdwX2xhbmVfaW5mbywgY29ubl9pZCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAlib29sIGxpbmtiOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgZGRjX2J1czsKIApAQCAtMjc3LDcgKzI5NSw4IEBACiAJCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgJiYKKwkJCS8qIElHUCBjaGlwcyAqLworCQkJaWYgKChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApICYmCiAJCQkgICAgKGNvbl9vYmpfaWQgPT0KIAkJCSAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUikpIHsKIAkJCQl1aW50MTZfdCBpZ3Bfb2Zmc2V0ID0gMDsKQEAgLTMxMSw2ICszMzAsNyBAQAogCQkJCQkJY29ubmVjdG9yX3R5cGUgPQogCQkJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydAogCQkJCQkJICAgIFtjdF07CisJCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY3Q7CiAJCQkJCQlpZ3BfbGFuZV9pbmZvID0KIAkJCQkJCSAgICBzbG90X2NvbmZpZyAmIDB4ZmZmZjsKIAkJCQkJfSBlbHNlCkBAIC0zMjEsNiArMzQxLDcgQEAKIAkJCQlpZ3BfbGFuZV9pbmZvID0gMDsKIAkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydFtjb25fb2JqX2lkXTsKKwkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29uX29ial9pZDsKIAkJCX0KIAogCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtNDI1LDcgKzQ0Niw4IEBACiAJCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgogCQkJCQkJCSAgICAgIHVzRGV2aWNlVGFnKSwKIAkJCQkJCSAgY29ubmVjdG9yX3R5cGUsICZkZGNfYnVzLAotCQkJCQkJICBsaW5rYiwgaWdwX2xhbmVfaW5mbyk7CisJCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogCQl9CiAJfQpAQCAtNDM1LDYgKzQ1Nyw0NSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdWludDE2X3QgYXRvbWJpb3NfZ2V0X2Nvbm5lY3Rvcl9vYmplY3RfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBpbnQgY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgdWludDE2X3QgZGV2aWNlcykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfSBlbHNlIGlmICgoKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB8fAorCQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKSkgJiYKKwkJICAgKGRldmljZXMgJiBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKSAgeworCQlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwkJc3RydWN0IGF0b21fY29udGV4dCAqY3R4ID0gbW9kZV9pbmZvLT5hdG9tX2NvbnRleHQ7CisJCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFhUTURTX0luZm8pOworCQl1aW50MTZfdCBzaXplLCBkYXRhX29mZnNldDsKKwkJdWludDhfdCBmcmV2LCBjcmV2OworCQlBVE9NX1hUTURTX0lORk8gKnh0bWRzOworCisJCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIoY3R4LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKwkJeHRtZHMgPSAoQVRPTV9YVE1EU19JTkZPICopKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCQlpZiAoeHRtZHMtPnVjU3VwcG9ydGVkTGluayAmIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LKSB7CisJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfQorfQorCiBzdHJ1Y3QgYmlvc19jb25uZWN0b3IgewogCWJvb2wgdmFsaWQ7CiAJdWludDE2X3QgbGluZV9tdXg7CkBAIC01OTMsMTQgKzY1NCwyMCBAQAogCiAJLyogYWRkIHRoZSBjb25uZWN0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0U7IGkrKykgewotCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKQorCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKSB7CisJCQl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkID0KKwkJCQlhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChkZXYsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyk7CiAJCQlyYWRlb25fYWRkX2F0b21fY29ubmVjdG9yKGRldiwKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcywKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLgogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwKIAkJCQkJCSAgJmJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLAotCQkJCQkJICBmYWxzZSwgMCk7CisJCQkJCQkgIGZhbHNlLCAwLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKKwkJfQogCX0KIAogCXJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKGRldik7CkBAIC02NDEsOCArNzA4LDEyIEBACiAJCSAgICBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzUmVmZXJlbmNlQ2xvY2spOwogCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDA7CiAKLQkJcDFwbGwtPnBsbF9vdXRfbWluID0KLQkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CisJCWlmIChjcmV2IDwgMikKKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJZWxzZQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzEyLnVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCQlwMXBsbC0+cGxsX291dF9tYXggPQogCQkgICAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKIApAQCAtNjUxLDYgKzcyMiwxNiBAQAogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQkJZWxzZQogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDIwMDAwOworCQl9IGVsc2UgaWYgKHAxcGxsLT5wbGxfb3V0X21pbiA+IDY0ODAwKSB7CisJCQkvKiBMaW1pdGluZyB0aGUgcGxsIG91dHB1dCByYW5nZSBpcyBhIGdvb2QgdGhpbmcgZ2VuZXJhbGx5IGFzCisJCQkgKiBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBwbGwgY29tYmluYXRpb25zIGZvciBhIGdpdmVuCisJCQkgKiBmcmVxdWVuY3kgcHJlc3VtYWJseSB0byB0aGUgb25lcyB0aGF0IHdvcmsgYmVzdCBvbiBlYWNoIGNhcmQuCisJCQkgKiBIb3dldmVyLCBjZXJ0YWluIGR1YWxsaW5rIERWSSBtb25pdG9ycyBzZWVtIHRvIGxpa2UKKwkJCSAqIHBsbCBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBiZSBsaW1pdGVkIGJ5IHRoaXMgYXQgbGVhc3Qgb24KKwkJCSAqIHByZS1EQ0UgMy4wIHI2eHggaGFyZHdhcmUuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgcGVyCisJCQkgKiBmYW1pbHkuCisJCQkgKi8KKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQl9CiAKIAkJcDFwbGwtPnBsbF9pbl9taW4gPQpAQCAtNzY3LDYgKzg0OCw0NiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKHN0cnVjdAorCQkJCQkJCSAgcmFkZW9uX2VuY29kZXIKKwkJCQkJCQkgICplbmNvZGVyLAorCQkJCQkJCSAgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUFBMTF9TU19JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwlzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKnNzX2luZm87CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MgPSBOVUxMOworCisJaWYgKGlkID4gQVRPTV9NQVhfU1NfRU5UUlkpCisJCXJldHVybiBOVUxMOworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAorCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJc3NfaW5mbyA9CisJICAgIChzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlpZiAoc3NfaW5mbykgeworCQlzcyA9CisJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2F0b21fc3MpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXNzKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3MtPnBlcmNlbnRhZ2UgPSBsZTE2X3RvX2NwdShzc19pbmZvLT5hc1NTX0luZm9baWRdLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKKwkJc3MtPnR5cGUgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU3ByZWFkU3BlY3RydW1UeXBlOworCQlzcy0+c3RlcCA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19TdGVwOworCQlzcy0+ZGVsYXkgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU1NfRGVsYXk7CisJCXNzLT5yYW5nZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19SYW5nZTsKKwkJc3MtPnJlZmRpdiA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNSZWNvbW1lbmRlZFJlZl9EaXY7CisJfQorCXJldHVybiBzczsKK30KKwogdW5pb24gbHZkc19pbmZvIHsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX0xWRFNfSU5GT19WMTIgaW5mb18xMjsKQEAgLTc5OCwyNyArOTE5LDMxIEBACiAJCWlmICghbHZkcykKIAkJCXJldHVybiBOVUxMOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmRvdGNsb2NrID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuY2xvY2sgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNQaXhDbGspICogMTA7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQWN0aXZlKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5ob3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNXaWR0aCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZibGFuayA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNPZmZzZXQpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY193aWR0aCA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5odG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQmxhbmtpbmdfVGltZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3N0YXJ0ID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c09mZkRlbGF5SW5Ncyk7CiAJCWx2ZHMtPmx2ZHNfbWlzYyA9IGx2ZHNfaW5mby0+aW5mby51Y0xWRFNfTWlzYzsKKwkJLyogc2V0IGNydGMgdmFsdWVzICovCisJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCisJCWx2ZHMtPnNzID0gcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKGVuY29kZXIsIGx2ZHNfaW5mby0+aW5mby51Y1NTX0lkKTsKIAogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0KQEAgLTg1Nyw4ICs5ODIsNyBAQAogfQogCiBib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCi0JCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCi0JCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CiAJQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKQEAgLTg2Niw3ICs5OTAsNyBAQAogCUFUT01fRFREX0ZPUk1BVCAqZHRkX3RpbWluZ3M7CiAJaW50IGRhdGFfaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKIAl1OCBmcmV2LCBjcmV2OwotCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXUxNiBkYXRhX29mZnNldCwgbWlzYzsKIAogCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGRhdGFfaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKIApAQCAtODc2LDI4ICsxMDAwLDM3IEBACiAJCWlmIChpbmRleCA+IE1BWF9TVVBQT1JURURfVFZfVElNSU5HKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKKwkJbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX3Z0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT5zdXNNb2RlTWlzY0luZm8gPSB0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mbzsKKwkJbW9kZS0+ZmxhZ3MgPSAwOworCQltaXNjID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CiAKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5SaWdodCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuUmlnaHQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkxlZnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhbkxlZnQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkJvdHRvbSA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuQm90dG9tKTsKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5Ub3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhblRvcCk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOworCQltb2RlLT5jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOwogCiAJCWlmIChpbmRleCA9PSAxKSB7CiAJCQkvKiBQQUwgdGltaW5ncyBhcHBlYXIgdG8gaGF2ZSB3cm9uZyB2YWx1ZXMgZm9yIHRvdGFscyAqLwotCQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCAtPSAxOwotCQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y19odG90YWwgLT0gMTsKKwkJCW1vZGUtPmNydGNfdnRvdGFsIC09IDE7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtOTA2LDE3ICsxMDM5LDM2IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZHRkX3RpbWluZ3MgPSAmdHZfaW5mb192MV8yLT5hTW9kZVRpbWluZ3NbaW5kZXhdOwotCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hTeW5jV2lkdGgpOwotCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKKwkJbW9kZS0+Y3J0Y19oZGlzcGxheSA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOwotCQkqcGl4ZWxfY2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7CisJCW1vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfdnN5bmNfZW5kID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY1dpZHRoKTsKKworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKKwkJaWYgKG1pc2MgJiBBVE9NX1ZTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9IU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCQlpZiAobWlzYyAmIEFUT01fQ09NUE9TSVRFU1lOQykKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfQ1NZTkM7CisJCWlmIChtaXNjICYgQVRPTV9JTlRFUkxBQ0UpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOworCisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzUGl4Q2xrKSAqIDEwOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHRydWU7CkBAIC05ODEsNiArMTEzMywyNCBAQAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCUdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldEVuZ2luZUNsb2NrKTsKKworCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworCXJldHVybiBhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2s7Cit9CisKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0TWVtb3J5Q2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jazsKK30KKwogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCSAgdWludDMyX3QgZW5nX2Nsb2NrKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmVuY2htYXJrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwppbmRleCAyZTkzOGY3Li4xMGJkNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQpAQCAtODgsNyArODgsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKaW5kZXggMzRhOWI5MS4uOTA2OTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwpAQCAtNTAsMTkgKzUwLDE2IEBACiAJdnJhbV9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAliaW9zID0gaW9yZW1hcCh2cmFtX2Jhc2UsIHNpemUpOwogCWlmICghYmlvcykgewotCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtbWFwIHZyYW1cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKHNpemUgPT0gMCB8fCBiaW9zWzBdICE9IDB4NTUgfHwgYmlvc1sxXSAhPSAweGFhKSB7CiAJCWlvdW5tYXAoYmlvcyk7Ci0JCURSTV9FUlJPUigiYmFkIHJvbSBzaWduYXR1cmVcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXJkZXYtPmJpb3MgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChyZGV2LT5iaW9zID09IE5VTEwpIHsKIAkJaW91bm1hcChiaW9zKTsKLQkJRFJNX0VSUk9SKCJrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJbWVtY3B5KHJkZXYtPmJpb3MsIGJpb3MsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwppbmRleCBmNWMzMmE3Li5hODEzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImF0b20uaCIKIAogLyogMTAga2h6ICovCi1zdGF0aWMgdWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByYWRlb25fcGxsICpzcGxsID0gJnJkZXYtPmNsb2NrLnNwbGw7CiAJdWludDMyX3QgZmJfZGl2LCByZWZfZGl2LCBwb3N0X2Rpdiwgc2NsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCA3NDgyNjVhLi41MjUzY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC00OSw3ICs0OSw4IEBACiAJCQkgICAgdWludDMyX3QgY29ubmVjdG9yX2lkLAogCQkJICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAotCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpOworCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCisJCQkgICAgdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZCk7CiAKIC8qIGZyb20gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyLmMgKi8KIGV4dGVybiB2b2lkCkBAIC04MDgsMjUgKzgwOSwyNSBAQAogCWx2ZHMtPnBhbmVsX2Jsb25fZGVsYXkgPSAobHZkc19zc19nZW5fY250bCA+PiBSQURFT05fTFZEU19QV1JTRVFfREVMQVkyX1NISUZUKSAmIDB4ZjsKIAogCWlmIChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9TVFJFVENIX0VOQUJMRSkKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0KIAkJICAgICgoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfUEFORUxfU0laRSkgPj4KIAkJICAgICBSQURFT05fVkVSVF9QQU5FTF9TSElGVCkgKyAxOwogCWVsc2UKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0KIAkJICAgIChSUkVHMzIoUkFERU9OX0NSVENfVl9UT1RBTF9ESVNQKSA+PiAxNikgKyAxOwogCiAJaWYgKGZwX2hvcnpfc3RyZXRjaCAmIFJBREVPTl9IT1JaX1NUUkVUQ0hfRU5BQkxFKQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPQogCQkgICAgKCgoZnBfaG9yel9zdHJldGNoICYgUkFERU9OX0hPUlpfUEFORUxfU0laRSkgPj4KIAkJICAgICAgUkFERU9OX0hPUlpfUEFORUxfU0hJRlQpICsgMSkgKiA4OwogCWVsc2UKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0KIAkJICAgICgoUlJFRzMyKFJBREVPTl9DUlRDX0hfVE9UQUxfRElTUCkgPj4gMTYpICsgMSkgKiA4OwogCi0JaWYgKChsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzIDwgNjQwKSB8fAotCSAgICAobHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA8IDQ4MCkpIHsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9IDY0MDsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9IDQ4MDsKKwlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5IDwgNjQwKSB8fAorCSAgICAobHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPCA0ODApKSB7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0gNjQwOworCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9IDQ4MDsKIAl9CiAKIAlwcGxsX2Rpdl9zZWwgPSBSUkVHOChSQURFT05fQ0xPQ0tfQ05UTF9JTkRFWCArIDEpICYgMHgzOwpAQCAtODQ2LDggKzg0Nyw4IEBACiAJbHZkcy0+cGFuZWxfdmNjX2RlbGF5ID0gMjAwOwogCiAJRFJNX0lORk8oIlBhbmVsIGluZm8gZGVyaXZlZCBmcm9tIHJlZ2lzdGVyc1xuIik7Ci0JRFJNX0lORk8oIlBhbmVsIFNpemUgJWR4JWRcbiIsIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMsCi0JCSBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKTsKKwlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXksCisJCSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSk7CiAKIAlyZXR1cm4gbHZkczsKIH0KQEAgLTg4MiwxMSArODgzLDExIEBACiAKIAkJRFJNX0lORk8oIlBhbmVsIElEIFN0cmluZzogJXNcbiIsIHN0bXApOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxOSk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxYik7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MTkpOworCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDFiKTsKIAotCQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcywKLQkJCSBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKTsKKwkJRFJNX0lORk8oIlBhbmVsIFNpemUgJWR4JWRcbiIsIGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5LAorCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgyYyk7CiAJCWlmIChsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPiAyMDAwIHx8IGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA8IDApCkBAIC05NDQsMjcgKzk0NSwyNSBAQAogCQkJaWYgKHRtcCA9PSAwKQogCQkJCWJyZWFrOwogCi0JCQlpZiAoKFJCSU9TMTYodG1wKSA9PSBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzKSAmJgorCQkJaWYgKChSQklPUzE2KHRtcCkgPT0gbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkpICYmCiAJCQkgICAgKFJCSU9TMTYodG1wICsgMikgPT0KLQkJCSAgICAgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcykpIHsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oYmxhbmsgPQotCQkJCSAgICAoUkJJT1MxNih0bXAgKyAxNykgLSBSQklPUzE2KHRtcCArIDE5KSkgKiA4OwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhvdmVycGx1cyA9Ci0JCQkJICAgIChSQklPUzE2KHRtcCArIDIxKSAtIFJCSU9TMTYodG1wICsgMTkpIC0KLQkJCQkgICAgIDEpICogODsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY193aWR0aCA9Ci0JCQkJICAgIFJCSU9TOCh0bXAgKyAyMykgKiA4OworCQkJICAgICBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSkpIHsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5odG90YWwgPSBSQklPUzE2KHRtcCArIDE3KSAqIDg7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgPSBSQklPUzE2KHRtcCArIDIxKSAqIDg7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfZW5kID0gKFJCSU9TOCh0bXAgKyAyMykgKworCQkJCQkJCSAgICAgICBSQklPUzE2KHRtcCArIDIxKSkgKiA4OwogCi0JCQkJbHZkcy0+bmF0aXZlX21vZGUudmJsYW5rID0gKFJCSU9TMTYodG1wICsgMjQpIC0KLQkJCQkJCQkgICAgUkJJT1MxNih0bXAgKyAyNikpOwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZvdmVycGx1cyA9Ci0JCQkJICAgICgoUkJJT1MxNih0bXAgKyAyOCkgJiAweDdmZikgLQotCQkJCSAgICAgUkJJT1MxNih0bXAgKyAyNikpOwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3dpZHRoID0KLQkJCQkgICAgKChSQklPUzE2KHRtcCArIDI4KSAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmRvdGNsb2NrID0KLQkJCQkgICAgUkJJT1MxNih0bXAgKyA5KSAqIDEwOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZ0b3RhbCA9IFJCSU9TMTYodG1wICsgMjQpOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3N0YXJ0ID0gUkJJT1MxNih0bXAgKyAyOCkgJiAweDdmZjsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY19lbmQgPQorCQkJCQkoKFJCSU9TMTYodG1wICsgMjgpICYgMHhmODAwKSA+PiAxMSkgKworCQkJCQkoUkJJT1MxNih0bXAgKyAyOCkgJiAweDdmZik7CisKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5jbG9jayA9IFJCSU9TMTYodG1wICsgOSkgKiAxMDsKIAkJCQlsdmRzLT5uYXRpdmVfbW9kZS5mbGFncyA9IDA7CisJCQkJLyogc2V0IGNydGMgdmFsdWVzICovCisJCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZsdmRzLT5uYXRpdmVfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisKIAkJCX0KIAkJfQogCX0gZWxzZSB7CkBAIC0xMTc4LDcgKzExNzcsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9IGVsc2UgaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CiAJCQkvKiBMVkRTICovCiAJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9MQ0RfR1BJT19NQVNLKTsKQEAgLTExOTAsNyArMTE5MCw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAogCQkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CkBAIC0xMjAyLDcgKzEyMDMsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9IGVsc2UgewogCQkJLyogRFZJLUkgLSB0diBkYWMsIGludCB0bWRzICovCiAJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0RWSV9EREMpOwpAQCAtMTIyMCw3ICsxMjIyLDggQEAKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgfAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAKIAkJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwpAQCAtMTIzMiw3ICsxMjM1LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJfQogCiAJCWlmIChyZGV2LT5mYW1pbHkgIT0gQ0hJUF9SMTAwICYmIHJkZXYtPmZhbWlseSAhPSBDSElQX1IyMDApIHsKQEAgLTEyNDUsNyArMTI0OSw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLAogCQkJCQkJICAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENUX0lCT09LOgpAQCAtMTI1OSw3ICsxMjY0LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIFZHQSAtIFRWIERBQyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTEyNjgsNyArMTI3NCw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTI3Nyw3ICsxMjg0LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX1BPV0VSQk9PS19FWFRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayBleHRlcm5hbCB0bWRzKVxuIiwKQEAgLTEyOTAsNyArMTI5OCw4IEBACiAJCQkJCQkJCTApLAogCQkJCQkgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQkvKiBEVkktSSAtIHByaW1hcnkgZGFjLCBleHQgdG1kcyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTEzMDMsMTAgKzEzMTIsMTIgQEAKIAkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAogCQkJCQkJCQkxKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOworCQkvKiBYWFggc29tZSBhcmUgU0wgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTMxNSw3ICsxMzI2LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX1BPV0VSQk9PS19JTlRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayBpbnRlcm5hbCB0bWRzKVxuIiwKQEAgLTEzMjgsNyArMTM0MCw4IEBACiAJCQkJCQkJCTApLAogCQkJCQkgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQkvKiBEVkktSSAtIHByaW1hcnkgZGFjLCBpbnQgdG1kcyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTEzNDQsNyArMTM1Nyw4IEBACiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTM1Myw3ICsxMzY3LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX1BPV0VSQk9PS19WR0E6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChwb3dlcmJvb2sgdmdhKVxuIiwKQEAgLTEzNjYsNyArMTM4MSw4IEBACiAJCQkJCQkJCTApLAogCQkJCQkgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTEzNzUsNyArMTM5MSw4IEBACiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTM4NCw3ICsxNDAxLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX01JTklfRVhURVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtaW5pIGV4dGVybmFsIHRtZHMpXG4iLApAQCAtMTQwMSwxMCArMTQxOSwxMiBAQAogCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CisJCS8qIFhYWCBhcmUgYW55IERMPyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTE0MTMsNyArMTQzMyw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9NSU5JX0lOVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAobWluaSBpbnRlcm5hbCB0bWRzKVxuIiwKQEAgLTE0MzMsNyArMTQ1NCw4IEBACiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQ0Miw3ICsxNDY0LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX0lNQUNfRzVfSVNJR0hUOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAoaW1hYyBnNSBpc2lnaHQpXG4iLApAQCAtMTQ1NSw3ICsxNDc4LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklELCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QpOwogCQkvKiBWR0EgLSB0diBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19EVklfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xNDY0LDcgKzE0ODgsOCBAQAogCQkJCQkJCQkyKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTE0NzMsNyArMTQ5OCw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9FTUFDOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAoZW1hYylcbiIsCkBAIC0xNDg2LDcgKzE1MTIsOCBAQAogCQkJCQkJCQkxKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJLyogVkdBIC0gdHYgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fQ1JUMl9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE0OTUsNyArMTUyMiw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTUwNCw3ICsxNTMyLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIHRhYmxlOiAlZCAoaW52YWxpZClcbiIsCkBAIC0xNTgxLDExICsxNjEwLDYzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIHJhZGVvbl9hcHBseV9sZWdhY3lfdHZfcXVpcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogQWNlciA1MTAyIGhhcyBub24tZXhpc3RlbnQgVFYgcG9ydCAqLworCWlmIChkZXYtPnBkZXYtPmRldmljZSA9PSAweDU5NzUgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTAyNSAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMDlmKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBIUCBkYzU3NTAgaGFzIG5vbi1leGlzdGVudCBUViBwb3J0ICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NTk3NCAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDNjICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDI4MGEpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdWludDE2X3QgY29tYmlvc19jaGVja19kbF9kdmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGlzX2R2aV9kKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBleHRfdG1kc19pbmZvOworCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlpZiAoaXNfZHZpX2QpCisJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwkJZWxzZQorCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7CisJfQorCWV4dF90bWRzX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0VYVF9UTURTX0lORk9fVEFCTEUpOworCWlmIChleHRfdG1kc19pbmZvKSB7CisJCXVpbnQ4X3QgcmV2ID0gUkJJT1M4KGV4dF90bWRzX2luZm8pOworCQl1aW50OF90IGZsYWdzID0gUkJJT1M4KGV4dF90bWRzX2luZm8gKyA0ICsgNSk7CisJCWlmIChyZXYgPj0gMykgeworCQkJaWYgKGlzX2R2aV9kKQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0k7CisJCX0gZWxzZSB7CisJCQlpZiAoZmxhZ3MgJiAxKSB7CisJCQkJaWYgKGlzX2R2aV9kKQorCQkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0Q7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0k7CisJCQl9CisJCX0KKwl9CisJaWYgKGlzX2R2aV9kKQorCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwllbHNlCisJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOworfQorCiBib29sIHJhZGVvbl9nZXRfbGVnYWN5X2Nvbm5lY3Rvcl9pbmZvX2Zyb21fYmlvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBjb25uX2luZm8sIGVudHJ5LCBkZXZpY2VzOwotCXVpbnQxNl90IHRtcDsKKwl1aW50MTZfdCB0bXAsIGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJZW51bSByYWRlb25fY29tYmlvc19kZGMgZGRjX3R5cGU7CiAJZW51bSByYWRlb25fY29tYmlvc19jb25uZWN0b3IgY29ubmVjdG9yOwogCWludCBpID0gMDsKQEAgLTE2MjgsOCArMTcwOSw5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXJhZGVvbl9hcHBseV9sZWdhY3lfcXVpcmtzKGRldiwgaSwgJmNvbm5lY3RvciwKLQkJCQkJCSAgICZkZGNfaTJjKTsKKwkJCWlmICghcmFkZW9uX2FwcGx5X2xlZ2FjeV9xdWlya3MoZGV2LCBpLCAmY29ubmVjdG9yLAorCQkJCQkJICAgICAgICZkZGNfaTJjKSkKKwkJCQljb250aW51ZTsKIAogCQkJc3dpdGNoIChjb25uZWN0b3IpIHsKIAkJCWNhc2UgQ09OTkVDVE9SX1BST1BSSUVUQVJZX0xFR0FDWToKQEAgLTE2NDQsNyArMTcyNiw4IEBACiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgaSwgZGV2aWNlcywKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0NSVF9MRUdBQ1k6CiAJCQkJaWYgKHRtcCAmIDB4MSkgewpAQCAtMTY2OSw3ICsxNzUyLDggQEAKIAkJCQkJCQkgICAgZGV2aWNlcywKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPTk5FQ1RPUl9EVklfSV9MRUdBQ1k6CiAJCQkJZGV2aWNlcyA9IDA7CkBAIC0xNjk4LDYgKzE3ODIsNyBAQAogCQkJCQkJCQkgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQsCiAJCQkJCQkJCSAgIDApLAogCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCk7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb21iaW9zX2NoZWNrX2RsX2R2aShkZXYsIDApOwogCQkJCX0gZWxzZSB7CiAJCQkJCWRldmljZXMgfD0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUOwogCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE3MDYsMTkgKzE3OTEsMjQgQEAKIAkJCQkJCQkJICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JULAogCQkJCQkJCQkgICAwKSwKIAkJCQkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKIAkJCQl9CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwKIAkJCQkJCQkgICAgaSwKIAkJCQkJCQkgICAgZGV2aWNlcywKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0RWSV9EX0xFR0FDWToKLQkJCQlpZiAoKHRtcCA+PiA0KSAmIDB4MSkKKwkJCQlpZiAoKHRtcCA+PiA0KSAmIDB4MSkgewogCQkJCQlkZXZpY2VzID0gQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUOwotCQkJCWVsc2UKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IGNvbWJpb3NfY2hlY2tfZGxfZHZpKGRldiwgMSk7CisJCQkJfSBlbHNlIHsKIAkJCQkJZGV2aWNlcyA9IEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVDsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7CisJCQkJfQogCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkCiAJCQkJCQkJICAoZGV2LCBkZXZpY2VzLCAwKSwKQEAgLTE3MjYsNyArMTgxNiw4IEBACiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgaSwgZGV2aWNlcywKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0NUVl9MRUdBQ1k6CiAJCQljYXNlIENPTk5FQ1RPUl9TVFZfTEVHQUNZOgpAQCAtMTc0MCw3ICsxODMxLDggQEAKIAkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCQkJICAgIGxlZ2FjeV9jb25uZWN0b3JfY29udmVydAogCQkJCQkJCSAgICBbY29ubmVjdG9yXSwKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlEUk1fRVJST1IoIlVua25vd24gY29ubmVjdG9yIHR5cGU6ICVkXG4iLApAQCAtMTc3MiwxMCArMTg2NCwyOSBAQAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCB8CiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiTm8gY29ubmVjdG9yIGluZm8gZm91bmRcbiIpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJdWludDE2X3QgY3J0X2luZm8gPQorCQkJCWNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfQ1JUX0lORk9fVEFCTEUpOworCQkJRFJNX0RFQlVHKCJGb3VuZCBDUlQgdGFibGUsIGFzc3VtaW5nIFZHQSBjb25uZWN0b3JcbiIpOworCQkJaWYgKGNydF9pbmZvKSB7CisJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LAorCQkJCQkJCQkJCUFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkJCQkxKSwKKwkJCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKKwkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsCisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CisJCQl9IGVsc2UgeworCQkJCURSTV9ERUJVRygiTm8gY29ubmVjdG9yIGluZm8gZm91bmRcbiIpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTg3MCw3ICsxOTgxLDggQEAKIAkJCQkJCSAgICA1LAogCQkJCQkJICAgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJfQogCX0KIApAQCAtMTg4MCwxNiArMTk5MiwxOSBAQAogCQkgICAgY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19UVl9JTkZPX1RBQkxFKTsKIAkJaWYgKHR2X2luZm8pIHsKIAkJCWlmIChSQklPUzgodHZfaW5mbyArIDYpID09ICdUJykgewotCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAotCQkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkCi0JCQkJCQkJICAoZGV2LAotCQkJCQkJCSAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAotCQkJCQkJCSAgIDIpLAotCQkJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwotCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDYsCi0JCQkJCQkJICAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAotCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJaWYgKHJhZGVvbl9hcHBseV9sZWdhY3lfdHZfcXVpcmtzKGRldikpIHsKKwkJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkCisJCQkJCQkJCSAgKGRldiwKKwkJCQkJCQkJICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCSAgIDIpLAorCQkJCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKKwkJCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgNiwKKwkJCQkJCQkJICAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAorCQkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKKwkJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOworCQkJCX0KIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwppbmRleCBlMzc2YmU0Li5mY2U0YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCkBAIC0xNzgsMjUgKzE3OCwxMiBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKIAotCWlmIChuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyAhPSAwICYmCi0JICAgIG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICE9IDAgJiYKLQkgICAgbmF0aXZlX21vZGUtPmRvdGNsb2NrICE9IDApIHsKLQkJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOwotCi0JCW1vZGUtPmhkaXNwbGF5ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXM7Ci0JCW1vZGUtPnZkaXNwbGF5ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXM7Ci0KLQkJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCW1vZGUtPnZ0b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQltb2RlLT5jbG9jayA9IG5hdGl2ZV9tb2RlLT5kb3RjbG9jazsKLQkJbW9kZS0+ZmxhZ3MgPSAwOwotCisJaWYgKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAhPSAwICYmCisJICAgIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSAhPSAwICYmCisJICAgIG5hdGl2ZV9tb2RlLT5jbG9jayAhPSAwKSB7CisJCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBuYXRpdmVfbW9kZSk7CiAJCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVSOwogCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIApAQCAtMjEwLDcgKzE5Nyw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCWludCBpOwogCXN0cnVjdCBtb2RlX3NpemUgewogCQlpbnQgdzsKQEAgLTIzNiwxMSArMjIzLDE2IEBACiAJfTsKIAogCWZvciAoaSA9IDA7IGkgPCAxNzsgaSsrKSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkgeworCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gMTAyNCB8fAorCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gNzY4KQorCQkJCWNvbnRpbnVlOworCQl9CiAJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKLQkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIHx8Ci0JCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyB8fAotCQkJICAgIChjb21tb25fbW9kZXNbaV0udyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyAmJgotCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykpCisJCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgfHwKKwkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSB8fAorCQkJICAgIChjb21tb25fbW9kZXNbaV0udyA9PSBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgJiYKKwkJCSAgICAgY29tbW9uX21vZGVzW2ldLmggPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKIAkJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPCAzMjAgfHwgY29tbW9uX21vZGVzW2ldLmggPCAyMDApCkBAIC0zNDQsMjggKzMzNiwyMyBAQAogCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9CXRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCiAJLyogVHJ5IHRvIGdldCBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKLQkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgewotCQkJCW5hdGl2ZV9tb2RlLT5oYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aG92ZXJwbHVzID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+dmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZvdmVycGx1cyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Ci0JCQkJbmF0aXZlX21vZGUtPmRvdGNsb2NrID0gbW9kZS0+Y2xvY2s7CisJCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICYmCisJCQkgICAgbW9kZS0+dmRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCQkJKm5hdGl2ZV9tb2RlID0gKm1vZGU7CisJCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAkJCQlEUk1fSU5GTygiRGV0ZXJtaW5lZCBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCURSTV9JTkZPKCJObyBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMsIGRpc2FibGluZyBSTVhcbiIpOwogCQlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOwogCX0KQEAgLTQxMCwxMyArMzk3LDY0IEBACiBzdGF0aWMgaW50IHJhZGVvbl9sdmRzX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisKKwlpZiAoKG1vZGUtPmhkaXNwbGF5IDwgMzIwKSB8fCAobW9kZS0+dmRpc3BsYXkgPCAyNDApKQorCQlyZXR1cm4gTU9ERV9QQU5FTDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBBVklWTyBoYXJkd2FyZSBzdXBwb3J0cyBkb3duc2NhbGluZyBtb2RlcyBsYXJnZXIgdGhhbiB0aGUgcGFuZWwKKwkJICogdG8gdGhlIHBhbmVsIHNpemUsIGJ1dCBJJ20gbm90IHN1cmUgdGhpcyBpcyBkZXNpcmFibGUuCisJCSAqLworCQlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkgICAgKG1vZGUtPnZkaXNwbGF5ID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJCS8qIGlmIHNjYWxpbmcgaXMgZGlzYWJsZWQsIGJsb2NrIG5vbi1uYXRpdmUgbW9kZXMgKi8KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9PSBSTVhfT0ZGKSB7CisJCQlpZiAoKG1vZGUtPmhkaXNwbGF5ICE9IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkgfHwKKwkJCSAgICAobW9kZS0+dmRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCQlyZXR1cm4gTU9ERV9QQU5FTDsKKwkJfQorCX0KKwogCXJldHVybiBNT0RFX09LOwogfQogCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fbHZkc19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBjaGVjayBpZiBwYW5lbCBpcyB2YWxpZCAqLworCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQorCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwl9CisKKwkvKiBjaGVjayBmb3IgZWRpZCBhcyB3ZWxsICovCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgeworCQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCQkgICAgICAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KIAkvKiBjaGVjayBhY3BpIGxpZCBzdGF0dXMgPz8/ICovCisKIAlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MjcsNiArNDY1LDggQEAKIAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyYWRlb25faTJjX2Rlc3Ryb3kocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwpAQCAtNDk2LDYgKzUzNiw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl92Z2FfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisJLyogWFhYIHZlcmlmeSBhZ2FpbnN0IG1heCBEQUMgb3V0cHV0IGZyZXF1ZW5jeSAqLwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC01MTQsOSArNTU2LDMyIEBACiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQlpZiAoZHJldCkKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZSB7CisJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKworCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAorCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKworCQkJLyogc29tZSBvZW1zIGhhdmUgYm9hcmRzIHdpdGggc2VwYXJhdGUgZGlnaXRhbCBhbmQgYW5hbG9nIGNvbm5lY3RvcnMKKwkJCSAqIHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKG9mdGVuIHZnYSArIGhkbWkpCisJCQkgKi8KKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiByYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjKSB7CisJCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0gZWxzZSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOwpAQCAtNTcwLDYgKzYzNSw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl90dl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJaWYgKChtb2RlLT5oZGlzcGxheSA+IDEwMjQpIHx8IChtb2RlLT52ZGlzcGxheSA+IDc2OCkpCisJCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC02NDQsNiArNzExLDEwIEBACiAJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwogCWlmIChkcmV0KSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CisJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOworCQl9CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CkBAIC02NTQsMTAgKzcyNSwxNSBAQAogCQl9IGVsc2UgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAhIShyYWRlb25fY29ubmVjdG9yLT5lZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpOwogCi0JCQkvKiBpZiB0aGlzIGlzbid0IGEgZGlnaXRhbCBtb25pdG9yCi0JCQkgICB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYW55Ci0JCQkgICBUViBjb25mbGljdHMgKi8KLQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQkJLyogc29tZSBvZW1zIGhhdmUgYm9hcmRzIHdpdGggc2VwYXJhdGUgZGlnaXRhbCBhbmQgYW5hbG9nIGNvbm5lY3RvcnMKKwkJCSAqIHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKG9mdGVuIHZnYSArIGhkbWkpCisJCQkgKi8KKwkJCWlmICgoIXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsKSAmJiByYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjKSB7CisJCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAkJfQogCX0KIApAQCAtNzUzLDkgKzgyOSwyNyBAQAogCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9IHRydWU7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uX2R2aV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKworCS8qIFhYWCBjaGVjayBtb2RlIGJhbmR3aWR0aCAqLworCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsICYmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkpIHsKKwkJaWYgKChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JKSB8fAorCQkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QpIHx8CisJCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9CKSkKKwkJCXJldHVybiBNT0RFX09LOworCQllbHNlCisJCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCX0KKwlyZXR1cm4gTU9ERV9PSzsKK30KKwogc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKIAkuZ2V0X21vZGVzID0gcmFkZW9uX2R2aV9nZXRfbW9kZXMsCi0JLm1vZGVfdmFsaWQgPSByYWRlb25fdmdhX21vZGVfdmFsaWQsCisJLm1vZGVfdmFsaWQgPSByYWRlb25fZHZpX21vZGVfdmFsaWQsCiAJLmJlc3RfZW5jb2RlciA9IHJhZGVvbl9kdmlfZW5jb2RlciwKIH07CiAKQEAgLTc3NSwxMyArODY5LDE1IEBACiAJCQkgIGludCBjb25uZWN0b3JfdHlwZSwKIAkJCSAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKIAkJCSAgYm9vbCBsaW5rYiwKLQkJCSAgdWludDMyX3QgaWdwX2xhbmVfaW5mbykKKwkJCSAgdWludDMyX3QgaWdwX2xhbmVfaW5mbywKKwkJCSAgdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJdWludDMyX3Qgc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbE5vbmU7CisJYm9vbCBzaGFyZWRfZGRjID0gZmFsc2U7CiAJaW50IHJldDsKIAogCS8qIGZpeG1lIC0gdHYvY3YvZGluICovCkBAIC03OTUsNiArODkxLDEzIEBACiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzIHw9IHN1cHBvcnRlZF9kZXZpY2U7CiAJCQlyZXR1cm47CiAJCX0KKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgJiYgaTJjX2J1cy0+dmFsaWQpIHsKKwkJCWlmIChtZW1jbXAoJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPnJlYywgaTJjX2J1cywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMpKSA9PSAwKSB7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+c2hhcmVkX2RkYyA9IHRydWU7CisJCQkJc2hhcmVkX2RkYyA9IHRydWU7CisJCQl9CisJCX0KIAl9CiAKIAlyYWRlb25fY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKQEAgLTgwNSw2ICs5MDgsOCBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSBzaGFyZWRfZGRjOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKQEAgLTk1Niw3ICsxMDYxLDggQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cykKKwkJCSAgICBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICppMmNfYnVzLAorCQkJICAgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CkBAIC05ODUsNiArMTA5MSw3IEBACiAKIAlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3JfaWQgPSBjb25uZWN0b3JfaWQ7CiAJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyA9IHN1cHBvcnRlZF9kZXZpY2U7CisJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCBiMTNjNzllLi4yODc3MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMTA5LDkgKzEwOSwxNSBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkKKwkJCQlXUkVHMzIoUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQllbHNlCisJCQkJV1JFRzMyKFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CiAJCVdSRUczMihBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGdwdV9hZGRyKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlyYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQgPSBncHVfYWRkciAtIHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJCS8qIG9mZnNldCBpcyBmcm9tIERJU1AoMilfQkFTRV9BRERSRVNTICovCiAJCVdSRUczMihSQURFT05fQ1VSX09GRlNFVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgcmFkZW9uX2NydGMtPmxlZ2FjeV9jdXJzb3Jfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggM2Q2NjcwMy4uZTNmOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTQ0NCwyMCArNDQ0LDI0IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2FyZF9pbmZvIGF0b21fY2FyZF9pbmZvID0gewotCS5kZXYgPSBOVUxMLAotCS5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQsCi0JLnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlLAotCS5tY19yZWFkID0gY2FpbF9tY19yZWFkLAotCS5tY193cml0ZSA9IGNhaWxfbWNfd3JpdGUsCi0JLnBsbF9yZWFkID0gY2FpbF9wbGxfcmVhZCwKLQkucGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGUsCi19OwotCiBpbnQgcmFkZW9uX2F0b21iaW9zX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JYXRvbV9jYXJkX2luZm8uZGV2ID0gcmRldi0+ZGRldjsKLQlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZSgmYXRvbV9jYXJkX2luZm8sIHJkZXYtPmJpb3MpOworCXN0cnVjdCBjYXJkX2luZm8gKmF0b21fY2FyZF9pbmZvID0KKwkgICAga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhcmRfaW5mbyksIEdGUF9LRVJORUwpOworCisJaWYgKCFhdG9tX2NhcmRfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZGV2LT5tb2RlX2luZm8uYXRvbV9jYXJkX2luZm8gPSBhdG9tX2NhcmRfaW5mbzsKKwlhdG9tX2NhcmRfaW5mby0+ZGV2ID0gcmRldi0+ZGRldjsKKwlhdG9tX2NhcmRfaW5mby0+cmVnX3JlYWQgPSBjYWlsX3JlZ19yZWFkOworCWF0b21fY2FyZF9pbmZvLT5yZWdfd3JpdGUgPSBjYWlsX3JlZ193cml0ZTsKKwlhdG9tX2NhcmRfaW5mby0+bWNfcmVhZCA9IGNhaWxfbWNfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+bWNfd3JpdGUgPSBjYWlsX21jX3dyaXRlOworCWF0b21fY2FyZF9pbmZvLT5wbGxfcmVhZCA9IGNhaWxfcGxsX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPnBsbF93cml0ZSA9IGNhaWxfcGxsX3dyaXRlOworCisJcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCA9IGF0b21fcGFyc2UoYXRvbV9jYXJkX2luZm8sIHJkZXYtPmJpb3MpOwogCXJhZGVvbl9hdG9tX2luaXRpYWxpemVfYmlvc19zY3JhdGNoX3JlZ3MocmRldi0+ZGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC00NjUsNiArNDY5LDcgQEAKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJa2ZyZWUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJa2ZyZWUocmRldi0+bW9kZV9pbmZvLmF0b21fY2FyZF9pbmZvKTsKIH0KIAogaW50IHJhZGVvbl9jb21iaW9zX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC01ODIsMTAgKzU4Nyw5IEBACiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gc2l6ZTogJXVcbiIsICh1bnNpZ25lZClyZGV2LT5ybW1pb19zaXplKTsKIAogCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLwotCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCS8qIHRoaXMgd2lsbCBmYWlsIGZvciBjYXJkcyB0aGF0IGFyZW4ndCBWR0EgY2xhc3MgZGV2aWNlcywganVzdAorCSAqIGlnbm9yZSBpdCAqLworCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKIAogCXIgPSByYWRlb25faW5pdChyZGV2KTsKIAlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCAzNjU1ZDkxLi5jODVkZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0xMzcsOSArMTM3LDYgQEAKIAlpZiAoc2l6ZSAhPSAyNTYpIHsKIAkJcmV0dXJuOwogCX0KLQlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQogCiAJLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMgY29ycmVjdCBhcyBpcyAqLwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMTQ3LDcgKzE0NCw2IEBACiAJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpXSA9IGdyZWVuW2ldID4+IDY7CiAJCXJhZGVvbl9jcnRjLT5sdXRfYltpXSA9IGJsdWVbaV0gPj4gNjsKIAl9Ci0KIAlyYWRlb25fY3J0Y19sb2FkX2x1dChjcnRjKTsKIH0KIApAQCAtMzM4LDI3ICszMzQsMTkgQEAKIAogaW50IHJhZGVvbl9kZGNfZ2V0X21vZGVzKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKQogewotCXN0cnVjdCBlZGlkICplZGlkOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyZXR1cm4gLTE7CiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKLQkJZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQl9IGVsc2UKLQkJZWRpZCA9IHJhZGVvbl9jb25uZWN0b3ItPmVkaWQ7CisJfQogCi0JaWYgKGVkaWQpIHsKLQkJLyogdXBkYXRlIGRpZ2l0YWwgYml0cyBoZXJlICovCi0JCWlmIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpCi0JCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9IDE7Ci0JCWVsc2UKLQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gMDsKLQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCBlZGlkKTsKLQkJcmV0ID0gZHJtX2FkZF9lZGlkX21vZGVzKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCBlZGlkKTsKLQkJa2ZyZWUoZWRpZCk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCByYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJcmV0ID0gZHJtX2FkZF9lZGlkX21vZGVzKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCByYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCBOVUxMKTsKQEAgLTc2NSw3ICs3NTMsNyBAQAogCQkJcmFkZW9uX2NydGMtPnJteF90eXBlID0gcmFkZW9uX2VuY29kZXItPnJteF90eXBlOwogCQkJbWVtY3B5KCZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUsCiAJCQkJJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZSwKLQkJCQlzaXplb2Yoc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSkpOworCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOwogCQkJZmlyc3QgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gcmFkZW9uX2VuY29kZXItPnJteF90eXBlKSB7CkBAIC03ODMsMTAgKzc3MSwxMCBAQAogCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gUk1YX09GRikgewogCQlmaXhlZDIwXzEyIGEsIGI7CiAJCWEuZnVsbCA9IHJmaXhlZF9jb25zdChjcnRjLT5tb2RlLnZkaXNwbGF5KTsKLQkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzKTsKKwkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5oZGlzcGxheSk7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9kaXYoYSwgYik7CiAJCWEuZnVsbCA9IHJmaXhlZF9jb25zdChjcnRjLT5tb2RlLmhkaXNwbGF5KTsKLQkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKTsKKwkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS52ZGlzcGxheSk7CiAJCXJhZGVvbl9jcnRjLT5oc2MuZnVsbCA9IHJmaXhlZF9kaXYoYSwgYik7CiAJfSBlbHNlIHsKIAkJcmFkZW9uX2NydGMtPnZzYy5mdWxsID0gcmZpeGVkX2NvbnN0KDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggYTY1YWIxYS4uZDQyYmM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC0zMSw2ICszMSwxMCBAQAogCiBleHRlcm4gaW50IGF0b21fZGVidWc7CiAKKy8qIGV2aWwgYnV0IGluY2x1ZGluZyBhdG9tYmlvcy5oIGlzIG11Y2ggd29yc2UgKi8KK2Jvb2wgcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpbmRleCwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisKIHVpbnQzMl90CiByYWRlb25fZ2V0X2VuY29kZXJfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwgdWludDhfdCBkYWMpCiB7CkBAIC0xNjcsNDkgKzE3MSwxNyBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKIAotCWlmIChtb2RlLT5oZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIHx8Ci0JICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMpIHsKLQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCX0gZWxzZSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5odG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT52c3luY193aWR0aDsKLQkJCS8qIHVwZGF0ZSBjcnRjIHZhbHVlcyAqLwotCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwotCQkJLyogYWRqdXN0IGNydGMgdmFsdWVzICovCi0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT52c3luY193aWR0aDsKKwlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgbW9kZS0+dmRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpIHsKKwkJaW50IG1vZGVfaWQgPSBhZGp1c3RlZF9tb2RlLT5iYXNlLmlkOworCQkqYWRqdXN0ZWRfbW9kZSA9ICpuYXRpdmVfbW9kZTsKKwkJaWYgKCFBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OworCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKIAkJfQotCQlhZGp1c3RlZF9tb2RlLT5mbGFncyA9IG5hdGl2ZV9tb2RlLT5mbGFnczsKLQkJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPSBuYXRpdmVfbW9kZS0+ZG90Y2xvY2s7CisJCWFkanVzdGVkX21vZGUtPmJhc2UuaWQgPSBtb2RlX2lkOwogCX0KIH0KIApAQCAtMjE5LDcgKzE5MSwxMSBAQAogCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlICE9IFJNWF9PRkYpCkBAIC0yMzAsNiArMjA2LDE4IEBACiAJICAgICYmIChtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IDwgKG1vZGUtPmNydGNfdmRpc3BsYXkgKyAyKSkpCiAJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMjsKIAorCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJaWYgKHR2X2RhYykgeworCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJCQkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkKKwkJCQlyYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhyZGV2LCAwLCBhZGp1c3RlZF9tb2RlKTsKKwkJCWVsc2UKKwkJCQlyYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhyZGV2LCAxLCBhZGp1c3RlZF9tb2RlKTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCkBAIC00NjEsNyArNDQ5LDcgQEAKIAkJY2FzZSAxOgogCQkJYXJncy52MS51Y01pc2MgPSAwOwogCQkJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJCWFyZ3MudjEudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19IRE1JX1RZUEU7CiAJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKQEAgLTQ4Niw3ICs0NzQsNyBAQAogCQkJCWlmIChkaWctPmNvaGVyZW50X21vZGUpCiAJCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19DT0hFUkVOVDsKIAkJCX0KLQkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19IRE1JX1RZUEU7CiAJCQlhcmdzLnYyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWFyZ3MudjIudWNUcnVuY2F0ZSA9IDA7CkBAIC01NDQsNyArNTMyLDcgQEAKIAlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOiAvKiBIRE1JLUIgaXMgYmFzaWNhbGx5IERMLURWSTsgYW5hbG9nIHdvcmtzIGZpbmUgKi8KLQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKChzdHJ1Y3QgZWRpZCAqKWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikpCisJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlIGlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NTQsNyArNTQyLDcgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWRlZmF1bHQ6Ci0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTU2Niw3ICs1NTQsNyBAQAogCQkvKmlmIChyYWRlb25fb3V0cHV0LT5Nb25UeXBlID09IE1UX0RQKQogCQkgIHJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EUDsKIAkJICBlbHNlKi8KLQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKChzdHJ1Y3QgZWRpZCAqKWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikpCisJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNzM0LDE0ICs3MjIsMTcgQEAKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3Jldik7CiAKIAlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOwotCisJaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKSB7CisJCWFyZ3MudjEudXNJbml0SW5mbyA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQ7CisJfSBlbHNlIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOworCQllbHNlCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKKwl9CiAJaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiAyKSAvIDEwMCk7Ci0JCQlhcmdzLnYyLmFjQ29uZmlnLmZEdWFsTGlua0Nvbm5lY3RvciA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlhcmdzLnYyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgKiAxMCAqIDQpIC8gMTAwKTsKLQkJfQorCQlpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQorCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMikgLyAxMCk7CiAJCWlmIChkaWctPmRpZ19ibG9jaykKIAkJCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gMTsKIApAQCAtNzY2LDcgKzc1Nyw2IEBACiAJCX0KIAl9IGVsc2UgewogCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX1BQTEw7Ci0JCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jaykgLyAxMCk7CiAKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKQEAgLTg3NCwxNiArODY0LDkgQEAKIAlESVNQTEFZX0RFVklDRV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIGFyZ3M7CiAJaW50IGluZGV4ID0gMDsKIAlib29sIGlzX2RpZyA9IGZhbHNlOwotCWludCBkZXZpY2VzOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JLyogb24gRFBNUyBvZmYgd2UgaGF2ZSBubyBpZGVhIGlmIGFjdGl2ZSBkZXZpY2UgaXMgbWVhbmluZ2Z1bCAqLwotCWlmIChtb2RlICE9IERSTV9NT0RFX0RQTVNfT04gJiYgIXJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlKQotCQlkZXZpY2VzID0gcmFkZW9uX2VuY29kZXItPmRldmljZXM7Ci0JZWxzZQotCQlkZXZpY2VzID0gcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2U7Ci0KIAlEUk1fREVCVUcoImVuY29kZXIgZHBtcyAlZCB0byBtb2RlICVkLCBkZXZpY2VzICUwOHgsIGFjdGl2ZV9kZXZpY2VzICUwOHhcbiIsCiAJCSAgcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQsIG1vZGUsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlKTsKQEAgLTkxNCwxOCArODk3LDE4IEBACiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMToKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzFPdXRwdXRDb250cm9sKTsKIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMyOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6Ci0JCWlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFRWMU91dHB1dENvbnRyb2wpOwotCQllbHNlIGlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgQ1YxT3V0cHV0Q29udHJvbCk7CiAJCWVsc2UKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgREFDMk91dHB1dENvbnRyb2wpOwpAQCAtMTEwNCw4ICsxMDg3LDExIEBACiAJfQogCiAJLyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJaWYgKCEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCVdSRUczMihBVklWT19EMU1PREVfREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNTMsNiArMTEzOSw3IEBACiAKIAkJLyogc2V0dXAgYW5kIGVuYWJsZSB0aGUgZW5jb2RlciBhbmQgdHJhbnNtaXR0ZXIgKi8KIAkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkFCTEUpOworCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCk7CiAJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9TRVRVUCk7CiAJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUpOwogCQlicmVhazsKQEAgLTEyNjgsOCArMTI1NSw2IEBACiB7CiAJcmFkZW9uX2F0b21fb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2F0b21fZW5jb2Rlcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fYXRvbV9lbmNvZGVyX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKaW5kZXggYTkzMWFmMC4uYTY4ZDc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpAQCAtMTQwLDE1ICsxNDAsMTUgQEAKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQl0ID0gb2Zmc2V0IC8gNDA5NjsKLQlwID0gdCAvIChQQUdFX1NJWkUgLyA0MDk2KTsKKwl0ID0gb2Zmc2V0IC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJaWYgKHJkZXYtPmdhcnQucGFnZXNbcF0pIHsKIAkJCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSAwOwotCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyA0MDk2KTsgaisrLCB0KyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewogCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIDApOwogCQkJfQogCQl9CkBAIC0xNjksOCArMTY5LDggQEAKIAkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXQgPSBvZmZzZXQgLyA0MDk2OwotCXAgPSB0IC8gKFBBR0VfU0laRSAvIDQwOTYpOworCXQgPSBvZmZzZXQgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKKwlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7CiAJCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KQEAgLTE4NSw5ICsxODUsOSBAQAogCQl9CiAJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBwYWdlbGlzdFtpXTsKIAkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwotCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIDQwOTYpOyBqKyssIHQrKykgeworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKIAkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSk7Ci0JCQlwYWdlX2Jhc2UgKz0gNDA5NjsKKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMjAwLDE0ICsyMDAsMTQgQEAKIAlpZiAocmRldi0+Z2FydC5wYWdlcykgewogCQlyZXR1cm4gMDsKIAl9Ci0JLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gNDA5NiAqLwotCWlmIChQQUdFX1NJWkUgPCA0MDk2KSB7CisJLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gUkFERU9OX0dQVV9QQUdFX1NJWkUgKi8KKwlpZiAoUEFHRV9TSVpFIDwgUkFERU9OX0dQVV9QQUdFX1NJWkUpIHsKIAkJRFJNX0VSUk9SKCJQYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIEdQVSBwYWdlIHNpemUhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIENvbXB1dGUgdGFibGUgc2l6ZSAqLwogCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUEFHRV9TSVpFOwotCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gNDA5NjsKKwlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCURSTV9JTkZPKCJHQVJUOiBudW0gY3B1IHBhZ2VzICV1LCBudW0gZ3B1IHBhZ2VzICV1XG4iLAogCQkgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzLCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpOwogCS8qIEFsbG9jYXRlIHBhZ2VzIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggOGUwYTg3NS4uYTBmZTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtOTIsNiArOTIsMTMgQEAKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9CisJLyogZW5hYmxlIG1zaSAqLworCXJkZXYtPm1zaV9lbmFibGVkID0gMDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzODApIHsKKwkJaW50IHJldCA9IHBjaV9lbmFibGVfbXNpKHJkZXYtPnBkZXYpOworCQlpZiAoIXJldCkKKwkJCXJkZXYtPm1zaV9lbmFibGVkID0gMTsKKwl9CiAJZHJtX2lycV9pbnN0YWxsKHJkZXYtPmRkZXYpOwogCXJkZXYtPmlycS5pbnN0YWxsZWQgPSB0cnVlOwogCURSTV9JTkZPKCJyYWRlb246IGlycSBpbml0aWFsaXplZC5cbiIpOwpAQCAtMTAzLDUgKzExMCw3IEBACiAJaWYgKHJkZXYtPmlycS5pbnN0YWxsZWQpIHsKIAkJcmRldi0+aXJxLmluc3RhbGxlZCA9IGZhbHNlOwogCQlkcm1faXJxX3VuaW5zdGFsbChyZGV2LT5kZGV2KTsKKwkJaWYgKHJkZXYtPm1zaV9lbmFibGVkKQorCQkJcGNpX2Rpc2FibGVfbXNpKHJkZXYtPnBkZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IDM2NDEwZjguLjhkMGI3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNDgsNyArNDgsNyBAQAogCXUzMiBmcF9ob3J6X3N0cmV0Y2gsIGZwX3ZlcnRfc3RyZXRjaCwgZnBfaG9yel92ZXJ0X2FjdGl2ZTsKIAl1MzIgZnBfaF9zeW5jX3N0cnRfd2lkLCBmcF9jcnRjX2hfdG90YWxfZGlzcDsKIAl1MzIgZnBfdl9zeW5jX3N0cnRfd2lkLCBmcF9jcnRjX3ZfdG90YWxfZGlzcDsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZTsKIAogCWZwX3ZlcnRfc3RyZXRjaCA9IFJSRUczMihSQURFT05fRlBfVkVSVF9TVFJFVENIKSAmCiAJCShSQURFT05fVkVSVF9TVFJFVENIX1JFU0VSVkVEIHwKQEAgLTk1LDE5ICs5NSwxOSBAQAogCiAJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9IDA7CiAKLQlpZiAobmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgPT0gMCB8fAotCSAgICBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyA9PSAwKSB7CisJaWYgKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSA9PSAwIHx8CisJICAgIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSA9PSAwKSB7CiAJCWhzY2FsZSA9IGZhbHNlOwogCQl2c2NhbGUgPSBmYWxzZTsKIAl9IGVsc2UgewotCQlpZiAoeHJlcyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzKQotCQkJeHJlcyA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKQotCQkJeXJlcyA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOworCQlpZiAoeHJlcyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKKwkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+aGRpc3BsYXk7CisJCWlmICh5cmVzID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQorCQkJeXJlcyA9IG5hdGl2ZV9tb2RlLT52ZGlzcGxheTsKIAotCQlpZiAoeHJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKKwkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5KQogCQkJaHNjYWxlID0gZmFsc2U7Ci0JCWlmICh5cmVzID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKQorCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpCiAJCQl2c2NhbGUgPSBmYWxzZTsKIAl9CiAKQEAgLTExOSwxMSArMTE5LDExIEBACiAJCWVsc2UgewogCQkJaW5jID0gKGZwX2hvcnpfc3RyZXRjaCAmIFJBREVPTl9IT1JaX0FVVE9fUkFUSU9fSU5DKSA/IDEgOiAwOwogCQkJc2NhbGUgPSAoKHhyZXMgKyBpbmMpICogUkFERU9OX0hPUlpfU1RSRVRDSF9SQVRJT19NQVgpCi0JCQkJLyBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIDE7CisJCQkJLyBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgKyAxOwogCQkJZnBfaG9yel9zdHJldGNoIHw9ICgoKHNjYWxlKSAmIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFTSykgfAogCQkJCQlSQURFT05fSE9SWl9TVFJFVENIX0JMRU5EIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUgfAotCQkJCQkoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzLzgtMSkgPDwgMTYpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+aGRpc3BsYXkvOC0xKSA8PCAxNikpOwogCQl9CiAKIAkJaWYgKCF2c2NhbGUpCkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh5cmVzICsgaW5jKSAqIFJBREVPTl9WRVJUX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPnZkaXNwbGF5ICsgMTsKIAkJCWZwX3ZlcnRfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9FTkFCTEUgfAogCQkJCQlSQURFT05fVkVSVF9TVFJFVENIX0JMRU5EIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcy0xKSA8PCAxMikpOworCQkJCQkoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheS0xKSA8PCAxMikpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0NFTlRFUjoKQEAgLTE3NSw4ICsxNzUsOCBAQAogCQkJCQkJPyBSQURFT05fQ1JUQ19WX1NZTkNfUE9MCiAJCQkJCQk6IDApKSk7CiAKLQkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSAmIDB4ZmZmKSB8Ci0JCQkJKCgobmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgLyA4KSAmIDB4MWZmKSA8PCAxNikpOworCQlmcF9ob3J6X3ZlcnRfYWN0aXZlID0gKCgobmF0aXZlX21vZGUtPnZkaXNwbGF5KSAmIDB4ZmZmKSB8CisJCQkJKCgobmF0aXZlX21vZGUtPmhkaXNwbGF5IC8gOCkgJiAweDFmZikgPDwgMTYpKTsKIAkJYnJlYWs7CiAJY2FzZSBSTVhfT0ZGOgogCWRlZmF1bHQ6CkBAIC01MzIsNiArNTMyLDEwIEBACiAJCXJhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihvbGRfZmIpOwogCQlyYWRlb25fZ2VtX29iamVjdF91bnBpbihyYWRlb25fZmItPm9iaik7CiAJfQorCisJLyogQnl0ZXMgcGVyIHBpeGVsIG1heSBoYXZlIGNoYW5nZWQgKi8KKwlyYWRlb25fYmFuZHdpZHRoX3VwZGF0ZShyZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC02NjQsNiArNjY4LDkgQEAKIAogCQlXUkVHMzIoUkFERU9OX0RJU1AyX01FUkdFX0NOVEwsIGRpc3AyX21lcmdlX2NudGwpOwogCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLCBjcnRjMl9nZW5fY250bCk7CisKKwkJV1JFRzMyKFJBREVPTl9GUF9IMl9TWU5DX1NUUlRfV0lELCBjcnRjX2hfc3luY19zdHJ0X3dpZCk7CisJCVdSRUczMihSQURFT05fRlBfVjJfU1lOQ19TVFJUX1dJRCwgY3J0Y192X3N5bmNfc3RydF93aWQpOwogCX0gZWxzZSB7CiAJCXVpbnQzMl90IGNydGNfZ2VuX2NudGw7CiAJCXVpbnQzMl90IGNydGNfZXh0X2NudGw7CkBAIC0xMDE1LDE0ICsxMDIyLDExIEBACiAJCQkJIGludCB4LCBpbnQgeSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCS8qIFRPRE8gVFYgKi8KIAlyYWRlb25fY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCXJhZGVvbl9zZXRfY3J0Y190aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJcmFkZW9uX3NldF9wbGwoY3J0YywgYWRqdXN0ZWRfbW9kZSk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKIAkJcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoY3J0YywgbW9kZSwgYWRqdXN0ZWRfbW9kZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggNmNlYjk1OC4uMDAzODIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCi0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTkyLDYgKzE5MCw4IEBACiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgIT0gUk1YX09GRikKQEAgLTIxOCw3ICsyMTgsOCBAQAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMjcyLDcgKzI3Myw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00NjgsNyArNDY4LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTU0Myw2ICs1NDIsMTQgQEAKIAogICAgIGZwX2dlbl9jbnRsICY9IH4oUkFERU9OX0ZQX0ZQT04gfCBSQURFT05fRlBfVE1EU19FTik7CiAKKyAgICBmcF9nZW5fY250bCAmPSB+KFJBREVPTl9GUF9STVhfSFZTWU5DX0NPTlRST0xfRU4gfAorCQkgICAgIFJBREVPTl9GUF9ERlBfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX0xPQ0tfOERPVCB8CisJCSAgICAgUkFERU9OX0ZQX1VTRV9TSEFET1dfRU4gfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX1VTRV9TSEFET1dfVkVORCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVF9TWU5DX0FMVCk7CisKICAgICBpZiAoMSkgLyogIEZJWE1FIHJnYkJpdHMgPT0gOCAqLwogCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfUEFORUxfRk9STUFUOyAgLyogMjQgYml0IGZvcm1hdCAqLwogICAgIGVsc2UKQEAgLTU1Niw3ICs1NjMsNyBAQAogCQkgICAgZWxzZQogCQkJICAgIGZwX2dlbl9jbnRsIHw9IFIyMDBfRlBfU09VUkNFX1NFTF9DUlRDMTsKIAkgICAgfSBlbHNlCi0JCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfU0VMX0NSVEMxOworCQkgICAgZnBfZ2VuX2NudGwgJj0gflJBREVPTl9GUF9TRUxfQ1JUQzI7CiAgICAgfSBlbHNlIHsKIAkgICAgaWYgKEFTSUNfSVNfUjMwMChyZGV2KSB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CiAJCSAgICBmcF9nZW5fY250bCAmPSB+UjIwMF9GUF9TT1VSQ0VfU0VMX01BU0s7CkBAIC01OTMsNyArNjAwLDggQEAKIAkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNjM2LDcgKzY0NCw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfZXh0X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfZXh0X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC03MzUsNyArNzQyLDggQEAKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04MzksNyArODQ3LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdHZfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IGU2MTIyNjguLmFjZTcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTE3Miw2ICsxNzIsNyBAQAogCiBzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyB7CiAJc3RydWN0IGF0b21fY29udGV4dCAqYXRvbV9jb250ZXh0OworCXN0cnVjdCBjYXJkX2luZm8gKmF0b21fY2FyZF9pbmZvOwogCWVudW0gcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZSBjb25uZWN0b3JfdGFibGU7CiAJYm9vbCBtb2RlX2NvbmZpZ19pbml0aWFsaXplZDsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKmNydGNzWzJdOwpAQCAtMTg2LDE3ICsxODcsNiBAQAogCiB9OwogCi1zdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIHsKLQkvKiBwcmVmZXJyZWQgbW9kZSAqLwotCXVpbnQzMl90IHBhbmVsX3hyZXMsIHBhbmVsX3lyZXM7Ci0JdWludDMyX3QgaG92ZXJwbHVzLCBoc3luY193aWR0aDsKLQl1aW50MzJfdCBoYmxhbms7Ci0JdWludDMyX3Qgdm92ZXJwbHVzLCB2c3luY193aWR0aDsKLQl1aW50MzJfdCB2Ymxhbms7Ci0JdWludDMyX3QgZG90Y2xvY2s7Ci0JdWludDMyX3QgZmxhZ3M7Ci19OwotCiAjZGVmaW5lIE1BWF9IX0NPREVfVElNSU5HX0xFTiAzMgogI2RlZmluZSBNQVhfVl9DT0RFX1RJTUlOR19MRU4gMzIKIApAQCAtMjI4LDcgKzIxOCw3IEBACiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7CiAJZml4ZWQyMF8xMiB2c2M7CiAJZml4ZWQyMF8xMiBoc2M7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9wcmltYXJ5X2RhYyB7CkBAIC0yNDgsNyArMjM4LDcgQEAKIAlib29sICAgICB1c2VfYmlvc19kaXZpZGVyczsKIAl1aW50MzJfdCBsdmRzX2dlbl9jbnRsOwogCS8qIHBhbmVsIG1vZGUgKi8KLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyB7CkBAIC0yNzEsNiArMjYxLDE2IEBACiAJc3RydWN0IHJhZGVvbl90bWRzX3BsbCB0bWRzX3BsbFs0XTsKIH07CiAKKy8qIHNwcmVhZCBzcGVjdHJ1bSAqLworc3RydWN0IHJhZGVvbl9hdG9tX3NzIHsKKwl1aW50MTZfdCBwZXJjZW50YWdlOworCXVpbnQ4X3QgdHlwZTsKKwl1aW50OF90IHN0ZXA7CisJdWludDhfdCBkZWxheTsKKwl1aW50OF90IHJhbmdlOworCXVpbnQ4X3QgcmVmZGl2OworfTsKKwogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnIHsKIAkvKiBhdG9tIGRpZyAqLwogCWJvb2wgY29oZXJlbnRfbW9kZTsKQEAgLTI3OCw4ICsyNzgsOSBAQAogCS8qIGF0b20gbHZkcyAqLwogCXVpbnQzMl90IGx2ZHNfbWlzYzsKIAl1aW50MTZfdCBwYW5lbF9wd3JfZGVsYXk7CisJc3RydWN0IHJhZGVvbl9hdG9tX3NzICpzczsKIAkvKiBwYW5lbCBtb2RlICovCi0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyB7CkBAIC0yOTQsNyArMjk1LDcgQEAKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBwaXhlbF9jbG9jazsKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogCXZvaWQgKmVuY19wcml2OwogfTsKIApAQCAtMzA4LDEyICszMDksMTUgQEAKIAl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CiAJdWludDMyX3QgZGV2aWNlczsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICpkZGNfYnVzOworCS8qIHNvbWUgc3lzdGVtcyBoYXZlIGEgYW4gaGRtaSBhbmQgdmdhIHBvcnQgd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAqLworCWJvb2wgc2hhcmVkX2RkYzsKIAlib29sIHVzZV9kaWdpdGFsOwogCS8qIHdlIG5lZWQgdG8gbWluZCB0aGUgRURJRCBiZXR3ZWVuIGRldGVjdAogCSAgIGFuZCBnZXQgbW9kZXMgZHVlIHRvIGFuYWxvZy9kaWdpdGFsL3R2ZW5jb2RlciAqLwogCXN0cnVjdCBlZGlkICplZGlkOwogCXZvaWQgKmNvbl9wcml2OwogCWJvb2wgZGFjX2xvYWRfZGV0ZWN0OworCXVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTQ2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKi8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAicmFkZW9uLmgiCisKK2ludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworaW50IHJhZGVvbl9wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyYWRlb25fZGVidWdmc19wbV9pbml0KHJkZXYpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgQ1AgIVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZWJ1Z2ZzIGluZm8KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCitzdGF0aWMgaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiZW5naW5lIGNsb2NrOiAldTAgSHpcbiIsIHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpKTsKKwlzZXFfcHJpbnRmKG0sICJtZW1vcnkgY2xvY2s6ICV1MCBIelxuIiwgcmFkZW9uX2dldF9tZW1vcnlfY2xvY2socmRldikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fcG1faW5mb19saXN0W10gPSB7CisJeyJyYWRlb25fcG1faW5mbyIsIHJhZGVvbl9kZWJ1Z2ZzX3BtX2luZm8sIDAsIE5VTEx9LAorfTsKKyNlbmRpZgorCitpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJhZGVvbl9wbV9pbmZvX2xpc3QsIEFSUkFZX1NJWkUocmFkZW9uX3BtX2luZm9fbGlzdCkpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCBiZmExYWI5Li4yOWFiNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtMjkwLDYgKzI5MCw4IEBACiAjZGVmaW5lIFJBREVPTl9CVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MDAzMAogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19NQVNURVJfRElTICAgICAgICAgKDEgPDwgNikKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfQklPU19ESVNfUk9NICAgICAgICgxIDw8IDEyKQorIwlkZWZpbmUgUlM2MDBfQlVTX01BU1RFUl9ESVMJICAgICAoMSA8PCAxNCkKKyMJZGVmaW5lIFJTNjAwX01TSV9SRUFSTQkJICAgICAoMSA8PCAyMCkgLyogcnM2MDAvcnM2OTAvcnM3NDAgKi8KICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfUkRfRElTQ0FSRF9FTiAgICAgICgxIDw8IDI0KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19SRF9BQk9SVF9FTiAgICAgICAgKDEgPDwgMjUpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX01TVFJfRElTQ09OTkVDVF9FTiAoMSA8PCAyOCkKQEAgLTI5Nyw2ICsyOTksOSBAQAogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19SRUFEX0JVUlNUICAgICAgICAgKDEgPDwgMzApCiAjZGVmaW5lIFJBREVPTl9CVVNfQ05UTDEgICAgICAgICAgICAgICAgICAgIDB4MDAzNAogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19XQUlUX09OX0xPQ0tfRU4gICAgKDEgPDwgNCkKKy8qIHJ2MzcwL3J2MzgwLCBydjQxMCwgcjQyMy9yNDMwL3I0ODAsIHI1eHggKi8KKyNkZWZpbmUgUkFERU9OX01TSV9SRUFSTV9FTgkJICAgIDB4MDE2MAorIwlkZWZpbmUgUlYzNzBfTVNJX1JFQVJNX0VOCSAgICAgKDEgPDwgMCkKIAogLyogI2RlZmluZSBSQURFT05fUENJRV9JTkRFWCAgICAgICAgICAgICAgICAgICAweDAwMzAgKi8KIC8qICNkZWZpbmUgUkFERU9OX1BDSUVfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwMDM0ICovCkBAIC0zMzExLDYgKzMzMTYsNyBAQAogI2RlZmluZSBSQURFT05fQUlDX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDAxZDAKICMgICAgICAgZGVmaW5lIFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTiAgICAgKDEgPDwgMCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9ESVNfT1VUX09GX1BDSV9HQVJUX0FDQ0VTUyAgICAgKDEgPDwgMSkKKyMJZGVmaW5lIFJTNDAwX01TSV9SRUFSTQkgICAgICAgICAgICAgICAgKDEgPDwgMykgLyogcnM0MDAvcnM0ODAgKi8KICNkZWZpbmUgUkFERU9OX0FJQ19MT19BRERSICAgICAgICAgICAgICAgICAgMHgwMWRjCiAjZGVmaW5lIFJBREVPTl9BSUNfUFRfQkFTRQkJMHgwMWQ4CiAjZGVmaW5lIFJBREVPTl9BSUNfSElfQUREUgkJMHgwMWUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggMDNjMzNjZi4uZjhhNDY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtNDIsNyArNDIsNyBAQAogCS8qIE51bWJlciBvZiB0ZXN0cyA9CiAJICogKFRvdGFsIEdUVCAtIElCIHBvb2wgLSB3cml0ZWJhY2sgcGFnZSAtIHJpbmcgYnVmZmVyKSAvIHRlc3Qgc2l6ZQogCSAqLwotCW4gPSAocmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQgLSA0MDk2IC0KKwluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQogCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSAvIHNpemU7CiAKIAlndHRfb2JqID0ga3phbGxvYyhuICogc2l6ZW9mKCpndHRfb2JqKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgZ3R0X2FkZHIsIHZyYW1fYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgR1RULT5WUkFNIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQogCi0JCXIgPSByYWRlb25fY29weShyZGV2LCB2cmFtX2FkZHIsIGd0dF9hZGRyLCBzaXplIC8gNDA5NiwgZmVuY2UpOworCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoIkZhaWxlZCBWUkFNLT5HVFQgY29weSAlZFxuIiwgaSk7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCA3NjViZDE4Li4xMzgxZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtMjk1LDYgKzI5NSwxMiBAQAogCWlmICh1bmxpa2VseShyKSkgewogCQlyZXR1cm4gcjsKIAl9CisKKwlyID0gdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyhiby0+dHRtLCB0bXBfbWVtLnBsYWNlbWVudCk7CisJaWYgKHVubGlrZWx5KHIpKSB7CisJCWdvdG8gb3V0X2NsZWFudXA7CisJfQorCiAJciA9IHR0bV90dF9iaW5kKGJvLT50dG0sICZ0bXBfbWVtKTsKIAlpZiAodW5saWtlbHkocikpIHsKIAkJZ290byBvdXRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCBhNzY5YzI5Li5jYTAzNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC00MTgsNiArNDE4LDggQEAKIAlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CiAJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLwogCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBzZXR1cCBNQyBiZWZvcmUgY2FsbGluZyBwb3N0IHRhYmxlcyAqLworCXJzNDAwX21jX3Byb2dyYW0ocmRldik7CiAJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwogCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDEwZGZhNzguLjVmMTE3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiBpbnQgcnM2MDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCXVpbnQzMl90IHI1MDBfZGlzcF9pbnQ7CiAKIAlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKQEAgLTI2MCw2ICsyNjAsMjIgQEAKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwogCQlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKIAl9CisJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CisJCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJCWNhc2UgQ0hJUF9SUzYwMDoKKwkJY2FzZSBDSElQX1JTNjkwOgorCQljYXNlIENISVBfUlM3NDA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0JVU19DTlRMKSAmIH5SUzYwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgbXNpX3JlYXJtIHwgUlM2MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ3Miw2ICs0ODgsOCBAQAogCX0KIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KIAlyczYwMF92cmFtX2luZm8ocmRldik7CiAJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwMjVlMzIyLi4yNzU0NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC03MDYsNiArNzA2LDggQEAKIAl9CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCiAJcnM2OTBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNDFhMzRjMi4uNzkzNWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMTM3LDYgKzEzNyw4IEBACiAKIHZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgMCk7CiAJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKIAkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKIH0KQEAgLTU4NSw2ICs1ODcsOCBAQAogCX0KIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KIAlydjUxNV92cmFtX2luZm8ocmRldik7CiAJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA1OTVhYzYzLi5iMGVmZDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC01MjksMTEgKzUyOSwxMSBAQAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCi0JCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19TSElGVCkgPj4gTk9PRkJBTktfTUFTSyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CiAKLQlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgJiBOT09GUk9XU19TSElGVCkgPiAzKSB7CisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwogCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKIAl9IGVsc2UgewpAQCAtNTc5LDE0ICs1NzksMTQgQEAKIAogCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCiAJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKLQkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwkJCQkgICAgIFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkJCVNZTkNfR1JBRElFTlQgfAotCQkJCQlTWU5DX1dBTEtFUiB8Ci0JCQkJCVNZTkNfQUxJR05FUikpOworCQkJICAgICBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfAorCQkJICAgICBTWU5DX0FMSUdORVIpKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNTk4LDkgKzU5OCw5IEBACiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKIAlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCQkJICBTWU5DX0ZMVVNIX0NUTCkpOworCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CkBAIC02MTEsMTIgKzYxMSwxMiBAQAogCX0KIAogCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKIAlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CiAKIAlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKIApAQCAtNzc0LDE0ICs3NzQsMzYgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKLQkgKiB2cmFtX3dpZHRoIHVzYWdlCi0JICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CkBAIC05NjEsMTAgKzk4MywxMyBAQAogCXI2MDBfc2NyYXRjaF9pbml0KHJkZXYpOwogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaAppbmRleCA0YjljM2Q2Li5hMTM2N2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKQEAgLTEyOSw2ICsxMjksMTAgQEAKICNkZWZpbmUgSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAkJCTB4NTRBMAogI2RlZmluZQlIRFBfVElMSU5HX0NPTkZJRwkJCQkweDJGM0MKIAorI2RlZmluZSBNQ19TSEFSRURfQ0hNQVAJCQkJCQkweDIwMDQKKyNkZWZpbmUJCU5PT0ZDSEFOX1NISUZUCQkJCQkxMgorI2RlZmluZQkJTk9PRkNIQU5fTUFTSwkJCQkJMHgwMDAwMzAwMAorCiAjZGVmaW5lCU1DX0FSQl9SQU1DRkcJCQkJCTB4Mjc2MAogI2RlZmluZQkJTk9PRkJBTktfU0hJRlQJCQkJCTAKICNkZWZpbmUJCU5PT0ZCQU5LX01BU0sJCQkJCTB4MDAwMDAwMDMKQEAgLTE0Miw2ICsxNDYsNyBAQAogI2RlZmluZQkJQ0hBTlNJWkVfTUFTSwkJCQkJMHgwMDAwMDEwMAogI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOQogI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMjAwCisjZGVmaW5lCQlDSEFOU0laRV9PVkVSUklERQkJCQkoMSA8PCAxMSkKICNkZWZpbmUJTUNfVk1fQUdQX1RPUAkJCQkJMHgyMDI4CiAjZGVmaW5lCU1DX1ZNX0FHUF9CT1QJCQkJCTB4MjAyQwogI2RlZmluZQlNQ19WTV9BR1BfQkFTRQkJCQkJMHgyMDMwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBhNTVlZTFhLi43YmNiODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTI3OSw2ICsyNzksNyBAQAogCiAJcmV0dXJuIHR0bV90dF9zZXRfY2FjaGluZyh0dG0sIHN0YXRlKTsKIH0KK0VYUE9SVF9TWU1CT0wodHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyk7CiAKIHN0YXRpYyB2b2lkIHR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwppbmRleCAyYzJjYjFlLi4yN2Q2MjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtNTcyLDcgKzU3Miw3IEBACiAKIAkvKiBTYW1wbGUgcmVnaXN0ZXIgY29udGVudHMgZXZlcnkgMSBzZWMgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZSArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgeworCQlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCQlkYXRhLT52aWQgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfVklEKSAmCiAJCQkJMHgzZjsKIAkJfQpAQCAtMTYyMSw5ICsxNjIxLDYgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUxX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTJfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lM19hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkvKiBNaXNjICovCi0JJmRldl9hdHRyX3ZybS5hdHRyLAotCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTE2MzEsNiArMTYyOCwxOCBAQAogCS5hdHRycyA9IGRtZTE3MzdfbWlzY19hdHRyLAogfTsKIAorLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3QgaG9sZHMgVklELXJlbGF0ZWQgYXR0cmlidXRlcy4gVGhlaXIgY3JlYXRpb24KKyAgIGRlcGVuZHMgb24gdGhlIGNoaXAgdHlwZSB3aGljaCBpcyBkZXRlcm1pbmVkIGR1cmluZyBtb2R1bGUgbG9hZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkbWUxNzM3X3ZpZF9hdHRyW10gPSB7CisJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRtZTE3MzdfdmlkX2dyb3VwID0geworCS5hdHRycyA9IGRtZTE3MzdfdmlkX2F0dHIsCit9OworCiAvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHMgaG9sZCB0aGUgUFdNIGF0dHJpYnV0ZXMsIHNvbWUgb2Ygd2hpY2ggYXJlIG9wdGlvbmFsLgogICogVGhlaXIgY3JlYXRpb24gZGVwZW5kcyBvbiB0aGUgY2hpcCBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nCiAgKiBtb2R1bGUgbG9hZC4gKi8KQEAgLTE5MDIsNiArMTkxMSw5IEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfbWlzY19ncm91cCk7CiAJfQorCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X3ZpZF9ncm91cCk7CisJfQogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X2dyb3VwKTsKIApAQCAtMTkzMyw2ICsxOTQ1LDEzIEBACiAJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCisJLyogQ3JlYXRlIFZJRC1yZWxhdGVkIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KKwlpZiAoKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgJiYKKwkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICZkbWUxNzM3X3ZpZF9ncm91cCkpKSB7CisJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCiAJLyogQ3JlYXRlIGZhbiBzeXNmcyBhdHRyaWJ1dGVzICovCiAJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkbWUxNzM3X2Zhbl9ncm91cCk7IGl4KyspIHsKIAkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpeCkpIHsKQEAgLTIxMjcsNyArMjE0Niw3IEBACiAJZGF0YS0+cHdtX2FjelsyXSA9IDQ7CS8qIHB3bTMgLT4gem9uZTMgKi8KIAogCS8qIFNldCBWUk0gKi8KLQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgewogCQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCAyYTdhODVhLi5kYTFiMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogc3RhdGljIHNzaXplX3Qgd2F0Y2hkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzaXplX3QgcmV0OworCWludCByZXQ7CiAJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGNvdW50KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKaW5kZXggNjY3OTg1NC4uYmU0NzVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwpAQCAtMTk3LDExICsxOTcsMTMgQEAKIAlBWElTX0RNSV9NQVRDSCgiSFAyMTMzIiwgIkhQIDIxMzMiLCB4eV9yb3RhdGVkX2xlZnQpLAogCUFYSVNfRE1JX01BVENIKCJIUDIxNDAiLCAiSFAgMjE0MCIsIHh5X3N3YXBfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY1M3giLCAiSFAgQ29tcGFxIDY1MyIsIHh5X3JvdGF0ZWRfbGVmdF91c2QpLAotCUFYSVNfRE1JX01BVENIKCJOQzY3M3giLCAiSFAgQ29tcGFxIDY3MyIsIHh5X3JvdGF0ZWRfbGVmdF91c2QpLAorCUFYSVNfRE1JX01BVENIKCJOQzY3MzBiIiwgIkhQIENvbXBhcSA2NzMwYiIsIHh5X3JvdGF0ZWRfbGVmdF91c2QpLAorCUFYSVNfRE1JX01BVENIKCJOQzY3MzBzIiwgIkhQIENvbXBhcSA2NzMwcyIsIHh5X3N3YXApLAogCUFYSVNfRE1JX01BVENIKCJOQzY1MXh4IiwgIkhQIENvbXBhcSA2NTEiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzEweCIsICJIUCBDb21wYXEgNjcxMCIsIHh5X3N3YXBfeXpfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY3MTV4IiwgIkhQIENvbXBhcSA2NzE1IiwgeV9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjkzeHgiLCAiSFAgRWxpdGVCb29rIDY5MyIsIHh5X3JvdGF0ZWRfcmlnaHQpLAorCUFYSVNfRE1JX01BVENIKCJOQzY5M3h4IiwgIkhQIEVsaXRlQm9vayA4NTMiLCB4eV9zd2FwKSwKIAkvKiBJbnRlbC1iYXNlZCBIUCBQYXZpbGlvbiBkdjUgKi8KIAlBWElTX0RNSV9NQVRDSDIoIkhQRFY1X0kiLAogCQkJUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY1IiwKQEAgLTIxNCw2ICsyMTYsNyBAQAogCQkJeV9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkRWNyIsICJIUCBQYXZpbGlvbiBkdjciLCB4X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiSFA4NzEwIiwgIkhQIENvbXBhcSA4NzEwIiwgeV9pbnZlcnRlZCksCisJQVhJU19ETUlfTUFUQ0goIkhEWDE4IiwgIkhQIEhEWCAxOCIsIHhfaW52ZXJ0ZWQpLAogCXsgTlVMTCwgfQogLyogTGFwdG9wIG1vZGVscyB3aXRob3V0IGF4aXMgaW5mbyAoeWV0KToKICAqICJOQzY5MTAiICJIUCBDb21wYXEgNjkxMCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jIGIvZHJpdmVycy9od21vbi9pdDg3LmMKaW5kZXggZmZlYjJhMS4uYTM3NDljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pdDg3LmMKKysrIGIvZHJpdmVycy9od21vbi9pdDg3LmMKQEAgLTEwMjgsMTIgKzEwMjgsMTEgQEAKIAkJY2hpcF90eXBlLCAqYWRkcmVzcywgc2lvX2RhdGEtPnJldmlzaW9uKTsKIAogCS8qIFJlYWQgR1BJTyBjb25maWcgYW5kIFZJRCB2YWx1ZSBmcm9tIExETiA3IChHUElPKSAqLwotCWlmIChjaGlwX3R5cGUgIT0gSVQ4NzA1Rl9ERVZJRCkgeworCWlmIChzaW9fZGF0YS0+dHlwZSAhPSBpdDg3KSB7CiAJCWludCByZWc7CiAKIAkJc3VwZXJpb19zZWxlY3QoR1BJTyk7Ci0JCWlmICgoY2hpcF90eXBlID09IGl0ODcxOCkgfHwKLQkJICAgIChjaGlwX3R5cGUgPT0gaXQ4NzIwKSkKKwkJaWYgKHNpb19kYXRhLT50eXBlID09IGl0ODcxOCB8fCBzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MjApCiAJCQlzaW9fZGF0YS0+dmlkX3ZhbHVlID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fVklEX1JFRyk7CiAKIAkJcmVnID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fUElOWDJfUkVHKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNzM3MzM1Zi4uZThmZTdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAgICBBVEkgU0I2MDAKIAkgICAgQVRJIFNCNzAwCiAJICAgIEFUSSBTQjgwMAotCSAgICBBTUQgU0I5MDAKKwkgICAgQU1EIEh1ZHNvbi0yCiAJICAgIFNlcnZlcndvcmtzIE9TQjQKIAkgICAgU2VydmVyd29ya3MgQ1NCNQogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA0YWZiYTNlLi5lMzY1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTEyMCwxOSArMTIwLDI2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcXVldWU7CiAJdW5zaWduZWQgbG9uZwkJaTJjc3I7CiAJdW5zaWduZWQgaW50IAkJZGlzYWJsZV9kZWxheTsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkIGludAkJaWZkcjsgLyogSU1YX0kyQ19JRkRSICovCiB9OwogCiAvKiogRnVuY3Rpb25zIGZvciBJTVggSTJDIGFkYXB0ZXIgZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpMmNfaW14X2J1c19idXN5KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgaW50IHRlbXA7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIHdhaXQgZm9yIGJ1cyBub3QgYnVzeSAqLwotCXdoaWxlIChyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKSAmIEkyU1JfSUJCKSB7CisJd2hpbGUgKDEpIHsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlpZiAoZm9yX2J1c3kgJiYgKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKKwkJaWYgKCFmb3JfYnVzeSAmJiAhKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE3OSw0MSArMTg2LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQorc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CisJaW50IHJlc3VsdDsKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCisJY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOworCXdyaXRlYihpMmNfaW14LT5pZmRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKIAkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7CiAJd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKworCS8qIFdhaXQgY29udHJvbGxlciB0byBiZSBzdGFibGUgKi8KKwl1ZGVsYXkoNTApOworCiAJLyogU3RhcnQgSTJDIHRyYW5zYWN0aW9uICovCiAJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCXRlbXAgfD0gSTJDUl9NU1RBOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaTJjX2lteC0+c3RvcHBlZCA9IDA7CisKIAl0ZW1wIHw9IEkyQ1JfSUlFTiB8IEkyQ1JfTVRYIHwgSTJDUl9UWEFLOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBpMmNfaW14X3N0b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewogCXVuc2lnbmVkIGludCB0ZW1wID0gMDsKIAotCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCi0JZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7Ci0JdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXRlbXAgJj0gfkkyQ1JfTVNUQTsKLQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JLyogc2V0dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8KLQl3cml0ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKLQkvKgotCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KLQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKSB7CisJCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCisJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCXRlbXAgJj0gfihJMkNSX01TVEEgfCBJMkNSX01UWCk7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJaTJjX2lteC0+c3RvcHBlZCA9IDE7CisJfQorCWlmIChjcHVfaXNfbXgxKCkpIHsKKwkJLyoKKwkJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgorCQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KKwkJICovCisJCXVkZWxheShpMmNfaW14LT5kaXNhYmxlX2RlbGF5KTsKKwl9CisKKwlpZiAoIWkyY19pbXgtPnN0b3BwZWQpCisJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisKIAkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICovCiAJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LApAQCAtMjMzLDggKzI2MSw4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpMmNfY2xrX2RpdltpXVswXSA8IGRpdjsgaSsrKTsKIAotCS8qIFdyaXRlIGRpdmlkZXIgdmFsdWUgdG8gcmVnaXN0ZXIgKi8KLQl3cml0ZWIoaTJjX2Nsa19kaXZbaV1bMV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCS8qIFN0b3JlIGRpdmlkZXIgdmFsdWUgKi8KKwlpMmNfaW14LT5pZmRyID0gaTJjX2Nsa19kaXZbaV1bMV07CiAKIAkvKgogCSAqIFRoZXJlIGR1bW15IGRlbGF5IGlzIGNhbGN1bGF0ZWQuCkBAIC0zNDEsMTEgKzM2OSwxNSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDEpKSB7CisJCQkvKiBJdCBtdXN0IGdlbmVyYXRlIFNUT1AgYmVmb3JlIHJlYWQgSTJEUiB0byBwcmV2ZW50CisJCQkgICBjb250cm9sbGVyIGZyb20gZ2VuZXJhdGluZyBhbm90aGVyIGNsb2NrIGN5Y2xlICovCiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JCQl0ZW1wICY9IH5JMkNSX01TVEE7CisJCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOwogCQkJd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQkJaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAwKTsKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCQl9IGVsc2UgaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDIpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBzZXQgVFhBS1xuIiwgX19mdW5jX18pOwpAQCAtMzcwLDE0ICs0MDIsMTEgQEAKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCi0JLyogQ2hlY2sgaWYgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLwotCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCk7CisJLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCisJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWwwOwogCi0JLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCi0JaTJjX2lteF9zdGFydChpMmNfaW14KTsKLQogCS8qIHJlYWQvd3JpdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlpZiAoaSkgewpAQCAtMzg2LDYgKzQxNSw5IEBACiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CiAJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCXJlc3VsdCA9ICBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGZhaWwwOwogCQl9CiAJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAogCQkJIjwlcz4gdHJhbnNmZXIgbWVzc2FnZTogJWRcbiIsIF9fZnVuY19fLCBpKTsKQEAgLTUwMCw3ICs1MzIsNiBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSTJDIGNsb2NrXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9Ci0JY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOwogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmNfaW14KTsKQEAgLTU0OSw3ICs1ODAsNiBAQAogZmFpbDU6CiAJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKIGZhaWw0OgotCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiAJY2xrX3B1dChpMmNfaW14LT5jbGspOwogZmFpbDM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19pbXgtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC01ODYsOCArNjE2LDYgQEAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwogCi0JLyogRGlzYWJsZSBJMkMgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGkyY19pbXgtPnJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggZDMyNWU4Ni4uZjYyNzAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zNjUsOSArMzY1LDYgQEAKIAl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CiAJdTMyIGZsYWdzID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKIAotCS8qIFN0YXJ0IHdpdGggTUVOICovCi0JaWYgKCFyZXN0YXJ0KQotCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwogCS8qIFN0YXJ0IGFzIG1hc3RlciAqLwogCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgZmxhZ3MpOwogCS8qIFdyaXRlIHRhcmdldCBieXRlICovCkBAIC0zOTYsOSArMzkzLDYgQEAKIAlpbnQgaSwgcmVzdWx0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYWRkcmVzcyBieXRlIC0gdGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KQEAgLTQyNSw5ICs0MTksOSBAQAogCQkvKiBHZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAyKQogCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKLQkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJLyogRG8gbm90IGdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCiAJCWlmIChpID09IGxlbmd0aCAtIDEpCi0JCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9UWEFLKTsKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKIAkJZGF0YVtpXSA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGQyNmE5NzIuLjFlMjQ1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlJbnRlbCBQSUlYNCwgNDQwTVgKIAlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKLQlBTUQgU0I5MDAKKwlBTUQgSHVkc29uLTIKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtMjMzLDkgKzIzMyw5IEBACiAJdW5zaWduZWQgc2hvcnQgc21iYV9pZHggPSAweGNkNjsKIAl1OCBzbWJhX2VuX2xvLCBzbWJhX2VuX2hpLCBpMmNjZmcsIGkyY2NmZ19vZmZzZXQgPSAweDEwLCBzbWJfZW4gPSAweDJjOwogCi0JLyogU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KKwkvKiBTQjgwMCBhbmQgbGF0ZXIgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KIAlpZiAoZm9yY2UgfHwgZm9yY2VfYWRkcikgewotCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNCODAwIFNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgorCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgogCQkJImZvcmNpbmcgYWRkcmVzcyFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00ODAsNyArNDgwLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1NCWDAwX1NNQlVTKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAogCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggNjM5NmMzYS4uODM3MzIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgMCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCAwIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA2ODBlNTk3Li5jYTBjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19DTEVBUl9TSU1QTEVYIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0OF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDYzYzUzZDYuLjRkNzZiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDQ2LDE1ICsxMDQ2LDYgQEAKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5pbml0X2RldikKIAkJCXBvcnRfb3BzLT5pbml0X2Rldihkcml2ZSk7CiAJfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCS8qCi0JCSAqIGRlZmF1bHQgdG8gUElPIE1vZGUgMCBiZWZvcmUgd2UgZmlndXJlIG91dAotCQkgKiB0aGUgbW9zdCBzdWl0ZWQgbW9kZSBmb3IgdGhlIGF0dGFjaGVkIGRldmljZQotCQkgKi8KLQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZXRfcGlvX21vZGUpCi0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgaW50IHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggYzZmODhlYi4uY2M3NjNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtNzgyLDEwICs3ODIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAordW5pb24gaW5wdXRfc2VxX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBzaG9ydCBwb3M7CisJCWJvb2wgbXV0ZXhfYWNxdWlyZWQ7CisJfTsKKwl2b2lkICpwOworfTsKKwogc3RhdGljIHZvaWQgKmlucHV0X2RldmljZXNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCkpCi0JCXJldHVybiBOVUxMOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKwlpbnQgZXJyb3I7CisKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKIAogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfZGV2X2xpc3QsICpwb3MpOwogfQpAQCAtNzk1LDkgKzgxNCwxMiBAQAogCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9kZXZfbGlzdCwgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgaW5wdXRfZGV2aWNlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3N0YXRpYyB2b2lkIGlucHV0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKworCWlmIChzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQpCisJCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBjaGFyICpuYW1lLApAQCAtODYxLDcgKzg4Myw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2RldmljZXNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2RldmljZXNfc2VxX25leHQsCi0JLnN0b3AJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9kZXZpY2VzX3NlcV9zaG93LAogfTsKIApAQCAtODgxLDQwICs5MDMsNDkgQEAKIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOwogCi0Jc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqcG9zOworCS8qIFdlIG5lZWQgdG8gZml0IGludG8gc2VxLT5wcml2YXRlIHBvaW50ZXIgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSkgIT0gc2l6ZW9mKHNlcS0+cHJpdmF0ZSkpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSB0cnVlOworCXN0YXRlLT5wb3MgPSAqcG9zOworCiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZpbnB1dF9oYW5kbGVyX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKCpwb3MgKyAxKTsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwotfQorCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CisJc3RhdGUtPnBvcyA9ICpwb3MgKyAxOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyBpbnQgaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIgPSBjb250YWluZXJfb2Yodiwgc3RydWN0IGlucHV0X2hhbmRsZXIsIG5vZGUpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSVsZCBOYW1lPSVzIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpc2VxLT5wcml2YXRlLCBoYW5kbGVyLT5uYW1lKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0ldSBOYW1lPSVzIiwgc3RhdGUtPnBvcywgaGFuZGxlci0+bmFtZSk7CiAJaWYgKGhhbmRsZXItPmZvcHMpCiAJCXNlcV9wcmludGYoc2VxLCAiIE1pbm9yPSVkIiwgaGFuZGxlci0+bWlub3IpOwogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9oYW5kbGVyc19zZXFfb3BzID0gewogCS5zdGFydAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2hhbmRsZXJzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3AsCisJLnN0b3AJPSBpbnB1dF9zZXFfc3RvcCwKIAkuc2hvdwk9IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IDQ3MDllMTUuLjQ0NTJlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTIzMyw2ICsyMzMsNyBAQAogICovCiBzdGF0aWMgdm9pZCAoKmF0a2JkX3BsYXRmb3JtX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgY29uc3Qgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCAqYXRrYmRfcGxhdGZvcm1fZml4dXBfZGF0YTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKCphdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cCkoc3RydWN0IGF0a2JkICosIHVuc2lnbmVkIGludCk7CiAKIHN0YXRpYyBzc2l6ZV90IGF0a2JkX2F0dHJfc2hvd19oZWxwZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsCiAJCQkJc3NpemVfdCAoKmhhbmRsZXIpKHN0cnVjdCBhdGtiZCAqLCBjaGFyICopKTsKQEAgLTM5Myw2ICszOTQsOSBAQAogCiAJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19SQVcsIGNvZGUpOwogCisJaWYgKGF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKQorCQljb2RlID0gYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAoYXRrYmQsIGNvZGUpOworCiAJaWYgKGF0a2JkLT50cmFuc2xhdGVkKSB7CiAKIAkJaWYgKGF0a2JkLT5lbXVsIHx8IGF0a2JkX25lZWRfeGxhdGUoYXRrYmQtPnhsX2JpdCwgY29kZSkpIHsKQEAgLTU3NCwxMSArNTc4LDIyIEBACiAKIAltdXRleF9sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJaWYgKCFhdGtiZC0+ZW5hYmxlZCkgeworCQkvKgorCQkgKiBTZXJpbyBwb3J0cyBhcmUgcmVzdW1lZCBhc3luY2hyb25vdXNseSBzbyB3aGlsZSBkcml2ZXIgY29yZQorCQkgKiB0aGlua3MgdGhhdCBkZXZpY2UgaXMgYWxyZWFkeSBmdWxseSBvcGVyYXRpb25hbCBpbiByZWFsaXR5CisJCSAqIGl0IG1heSBub3QgYmUgcmVhZHkgeWV0LiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBrZWVwCisJCSAqIHJlc2NoZWR1bGluZyB0aWxsIHJlY29ubmVjdCBjb21wbGV0ZXMuCisJCSAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmF0a2JkLT5ldmVudF93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCX0gZWxzZSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfTEVEX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKKwkJCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfUkVQX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKLQkJYXRrYmRfc2V0X3JlcGVhdF9yYXRlKGF0a2JkKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X3JlcGVhdF9yYXRlKGF0a2JkKTsKKwl9CiAKIAltdXRleF91bmxvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiB9CkBAIC03NzAsNiArNzg1LDMwIEBACiAJcmV0dXJuIDM7CiB9CiAKK3N0YXRpYyBpbnQgYXRrYmRfcmVzZXRfc3RhdGUoc3RydWN0IGF0a2JkICphdGtiZCkKK3sKKyAgICAgICAgc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJmF0a2JkLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVsxXTsKKworLyoKKyAqIFNldCB0aGUgTEVEcyB0byBhIHByZWRlZmluZWQgc3RhdGUgKGFsbCBvZmYpLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRMRURTKSkKKwkJcmV0dXJuIC0xOworCisvKgorICogU2V0IGF1dG9yZXBlYXQgdG8gZmFzdGVzdCBwb3NzaWJsZS4KKyAqLworCisJcGFyYW1bMF0gPSAwOworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfU0VUUkVQKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXRrYmRfYWN0aXZhdGUoc3RydWN0IGF0a2JkICphdGtiZCkKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKQEAgLTg1MiwyOSArODkxLDYgQEAKIH07CiAKIC8qCi0gKiBJbnZlbnRlYyBzeXN0ZW0gd2l0aCBicm9rZW4ga2V5IHJlbGVhc2Ugb24gdm9sdW1lIGtleXMKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgotICogUGVyZm9ybSBmaXh1cCBmb3IgSFAgUGF2aWxpb24gWlY2MTAwIGxhcHRvcCB0aGF0IGRvZXNuJ3QgZ2VuZXJhdGUgcmVsZWFzZQotICogZm9yIGl0cyB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3p2NjEwMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgotICogUGVyZm9ybSBmaXh1cCBmb3IgSFAgKENvbXBhcSkgUHJlc2FyaW8gUjQwMDAgUjQxMDAgUjQyMDAgdGhhdCBkb24ndCBnZW5lcmF0ZQotICogcmVsZWFzZSBmb3IgdGhlaXIgdm9sdW1lIGJ1dHRvbnMKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgogICogU2Ftc3VuZyBOQzEwLE5DMjAgd2l0aCBGbitGPyBrZXkgcmVsZWFzZSBub3Qgd29ya2luZwogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX3NhbXN1bmdfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtODgyLDE0ICs4OTgsNiBAQAogfTsKIAogLyoKLSAqIFRoZSB2b2x1bWUgdXAgYW5kIHZvbHVtZSBkb3duIHNwZWNpYWwga2V5cyBvbiBhIEZ1aml0c3UgQW1pbG8gUEEgMTUxMCBsYXB0b3AKLSAqIGRvIG5vdCBnZW5lcmF0ZSByZWxlYXNlIGV2ZW50cyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewotCTB4YjAsIDB4YWUsIC0xVQotfTsKLQotLyoKICAqIEFtaWxvIFBpIDM1MjUga2V5IHJlbGVhc2UgZm9yIEZuK1ZvbHVtZSBrZXlzIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfYW1pbG9fcGkzNTI1X2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKQEAgLTkxMSw2ICs5MTksMzAgQEAKIH07CiAKIC8qCisgKiBNYW55IG5vdGVib29rcyBkb24ndCBzZW5kIGtleSByZWxlYXNlIGV2ZW50IGZvciB2b2x1bWUgdXAvZG93bgorICoga2V5cywgd2l0aCBrZXkgbGlzdCBiZWxvdyBjb21tb24gYW1vbmcgdGhlbQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX3ZvbHVtZV9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CisJMHhhZSwgMHhiMCwgLTFVCit9OworCisvKgorICogT1FPIDAxKyBtdWx0aW1lZGlhIGtleXMgKDY0LS02NikgZ2VuZXJhdGUgZTAgNnggdXBvbiByZWxlYXNlIHdoZXJlYXMKKyAqIHRoZXkgc2hvdWxkIGJlIGdlbmVyYXRpbmcgZTQtZTYgKDB4ODAgfCBjb2RlKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9vcW9fMDFwbHVzX3NjYW5jb2RlX2ZpeHVwKHN0cnVjdCBhdGtiZCAqYXRrYmQsCisJCQkJCQkgICAgdW5zaWduZWQgaW50IGNvZGUpCit7CisJaWYgKGF0a2JkLT50cmFuc2xhdGVkICYmIGF0a2JkLT5lbXVsID09IDEgJiYKKwkgICAgKGNvZGUgPT0gMHg2NCB8fCBjb2RlID09IDB4NjUgfHwgY29kZSA9PSAweDY2KSkgeworCQlhdGtiZC0+ZW11bCA9IDA7CisJCWNvZGUgfD0gMHg4MDsKKwl9CisKKwlyZXR1cm4gY29kZTsKK30KKworLyoKICAqIGF0a2JkX3NldF9rZXljb2RlX3RhYmxlKCkgaW5pdGlhbGl6ZXMga2V5Ym9hcmQncyBrZXljb2RlIHRhYmxlCiAgKiBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVkIHNjYW5jb2RlIHNldAogICovCkBAIC0xMDg3LDYgKzExMTksNyBAQAogCQl9CiAKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIGF0a2JkX3NldCwgYXRrYmRfZXh0cmEpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAogCX0gZWxzZSB7CkBAIC0xMjY3LDYgKzEzMDAsNyBAQAogCiAJCWF0a2JkLT5kZXYgPSBuZXdfZGV2OwogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmQtPnNldCwgdmFsdWUpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKQEAgLTE1MTMsNiArMTU0NywxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLApAQCAtMTU0OCw3ICsxNTg5LDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE1OTgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE2MDcsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE2MTYsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE2MjUsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2NjEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApAQCAtMTY0OSw2ICsxNjkwLDE1IEBACiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAogCQkuZHJpdmVyX2RhdGEgPSBhdGtkYl9zb2x0ZWNoX3RhMTJfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAorCXsKKwkJLmlkZW50ID0gIk9RTyBNb2RlbCAwMSsiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk9RTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBUTyIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cCwKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cCwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTg4YWZmMy4uNzdkMTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAorCQkJCSAgICBJUlFGX1NIQVJFRCB8CiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyIsCiAJCQkJICAgIGJkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggMDJmNGY4Zi4uYTliYjI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTIyNyw2ICsyMjcsNyBAQAogCWRlcGVuZHMgb24gWDg2ICYmIFBOUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCisJc2VsZWN0IExFRFNfVFJJR0dFUlMKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJUiByZW1vdGUgZnVuY3Rpb25hbGl0eSBmb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKaW5kZXggMjE2YTU1OS4uZWE4MjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAogLyogUmVhZCB0aGUgaTgwNDIgZmFzdCBoYW5kc2hha2UgdGltZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGhwX3NkY19ydGNfcmVhZF9maHMoc3RydWN0IHRpbWV2YWwgKnJlcykgewotCXVpbnQ2NF90IHJhdzsKKwlpbnQ2NF90IHJhdzsKIAl1bnNpZ25lZCBpbnQgdGVubXM7CiAKIAlyYXcgPSBocF9zZGNfcnRjX3JlYWRfaTgwNDJ0aW1lcihIUF9TRENfQ01EX0xPQURfRkhTLCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IGEzOWJjNGUuLmE1Mzc5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtMzI3LDYgKzMyNywxNyBAQAogCQl9LAogCX0sCiAJeworCQkvKgorCQkgKiBSZXNldCBhbmQgR0VUIElEIGNvbW1hbmRzIGlzc3VlZCB2aWEgS0JEIHBvcnQgYXJlCisJCSAqIHNvbWV0aW1lcyBiZWluZyBkZWxpdmVyZWQgdG8gQVVYMy4KKwkJICovCisJCS5pZGVudCA9ICJTb255IFZhaW8gRlotMjQwRSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWR04tRloyNDBFIiksCisJCX0sCisJfSwKKwl7CiAJCS5pZGVudCA9ICJBbW9pIE02MzYvQTczNyIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQW1vaSBFbGVjdHJvbmljcyBDTy4sTFRELiIpLApAQCAtNjYxLDcgKzY3Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9wbnBfaW5pdCh2b2lkKQogewogCWNoYXIga2JkX2lycV9zdHJbNF0gPSB7IDAgfSwgYXV4X2lycV9zdHJbNF0gPSB7IDAgfTsKLQlpbnQgcG5wX2RhdGFfYnVzdGVkID0gZmFsc2U7CisJYm9vbCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKIAlpbnQgZXJyOwogCiAjaWZkZWYgQ09ORklHX1g4NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IGEzMTU3ODEuLjFkZjAyZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC04MzYsMTcgKzgzNiwzMiBAQAogc3RhdGljIGludCBpODA0Ml9jb250cm9sbGVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGN0clsyXTsKIAogLyoKLSAqIFNhdmUgdGhlIENUUiBmb3IgcmVzdG9yYWwgb24gdW5sb2FkIC8gcmVib290LgorICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JlIG9uIHVubG9hZCAvIHJlYm9vdC4KICAqLwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgewotCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJZG8geworCQlpZiAobiA+PSAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IFVuYWJsZSB0byBnZXQgc3RhYmxlIENUUiByZWFkLlxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCi0JaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHI7CisJCWlmIChuICE9IDApCisJCQl1ZGVsYXkoNTApOworCisJCWlmIChpODA0Ml9jb21tYW5kKCZjdHJbbisrICUgMl0sIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBpbml0aWFsaXppbmcgaTgwNDIuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwl9IHdoaWxlIChuIDwgMiB8fCBjdHJbMF0gIT0gY3RyWzFdKTsKKworCWk4MDQyX2luaXRpYWxfY3RyID0gaTgwNDJfY3RyID0gY3RyWzBdOwogCiAvKgogICogRGlzYWJsZSB0aGUga2V5Ym9hcmQgaW50ZXJmYWNlIGFuZCBpbnRlcnJ1cHQuCkBAIC04OTUsNiArOTEwLDEyIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorLyoKKyAqIEZsdXNoIHdoYXRldmVyIGFjY3VtdWxhdGVkIHdoaWxlIHdlIHdlcmUgZGlzYWJsaW5nIGtleWJvYXJkIHBvcnQuCisgKi8KKworCWk4MDQyX2ZsdXNoKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE0LDcgKzkzNSw3IEBACiAJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9LQkRESVMgfCBJODA0Ml9DVFJfQVVYRElTOwogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9LQkRJTlQgfCBJODA0Ml9DVFJfQVVYSU5UKTsKIAotCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9pbml0aWFsX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgcmVzZXR0aW5nLlxuIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWFpbnRpZGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCmluZGV4IDIzOTYwY2IuLjQxYzI2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCkBAIC05NTksOCArOTU5LDkgQEAKIAl9CiAJaWYgKCFzdHJuY21wKCJTdGF0ZVxcTGF5ZXIyIE5vMSIsIHBhdGgsIHBWYXItPnBhdGhfbGVuZ3RoKSkgewogCQljaGFyKiB0bXAgPSAmcExpYi0+bGluZXNbMF0ucEludGVyZmFjZS0+TGF5ZXIyWzBdOwotICAgIGR3b3JkIGwyX3N0YXRlOwotICAgIGRpdmFfc3RyYWNlX3JlYWRfdWludCAocFZhciwgJmwyX3N0YXRlKTsKKwkJZHdvcmQgbDJfc3RhdGU7CisJCWlmIChkaXZhX3N0cmFjZV9yZWFkX3VpbnQocFZhciwgJmwyX3N0YXRlKSkKKwkJCXJldHVybiAtMTsKIAogCQlzd2l0Y2ggKGwyX3N0YXRlKSB7CiAJCQljYXNlIDA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCAyN2Q1ZGQ2Li5hZTg5ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTI2OTIsNyArMjY5Miw3IEBACiAgICAgICAgICAgaWYgKCEoZmF4X2NvbnRyb2xfYml0cyAmIFQzMF9DT05UUk9MX0JJVF9NT1JFX0RPQ1VNRU5UUykKICAgICAgICAgICAgfHwgKGZheF9mZWF0dXJlX2JpdHMgJiBUMzBfRkVBVFVSRV9CSVRfTU9SRV9ET0NVTUVOVFMpKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGxlbiA9IChieXRlKSgmKCgoVDMwX0lORk8gKikgMCktPnVuaXZlcnNhbF82KSk7CisgICAgICAgICAgICBsZW4gPSBvZmZzZXRvZihUMzBfSU5GTywgdW5pdmVyc2FsXzYpOwogICAgICAgICAgICAgZmF4X2luZm9fY2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAobmNwaS0+bGVuZ3RoID49IDQpCiAgICAgICAgICAgICB7CkBAIC0yNzU0LDcgKzI3NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdzsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICgoVDMwX0lORk8gICAqKShwbGNpLT5mYXhfY29ubmVjdF9pbmZvX2J1ZmZlcikpLT5zdGF0aW9uX2lkW2ldID0gZmF4X3Bhcm1zWzRdLmluZm9bMStpXTsKICAgICAgICAgICAgICAgICAgICAgKChUMzBfSU5GTyAgICopKHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyKSktPmhlYWRfbGluZV9sZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBsZW4gPSAoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgICAgICAgICAgICAgICAgIHcgPSBmYXhfcGFybXNbNV0ubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBpZiAodyA+IDIwKQogICAgICAgICAgICAgICAgICAgICAgIHcgPSAyMDsKQEAgLTI3ODgsNyArMjc4OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBsZW4gPSAoYnl0ZSkoJigoKFQzMF9JTkZPICopIDApLT51bml2ZXJzYWxfNikpOworICAgICAgICAgICAgICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHVuaXZlcnNhbF82KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmF4X2luZm9fY2hhbmdlID0gdHJ1ZTsKIApAQCAtMjg5Miw3ICsyODkyLDcgQEAKICAgICAmJiAocGxjaS0+bnNmX2NvbnRyb2xfYml0cyAmIFQzMF9OU0ZfQ09OVFJPTF9CSVRfRU5BQkxFX05TRikKICAgICAmJiAocGxjaS0+bnNmX2NvbnRyb2xfYml0cyAmIFQzMF9OU0ZfQ09OVFJPTF9CSVRfTkVHT1RJQVRFX1JFU1ApKQogICAgewotICAgICAgICAgICAgbGVuID0gKChieXRlKSgoKFQzMF9JTkZPICopIDApLT5zdGF0aW9uX2lkICsgMjApKTsKKyAgICAgICAgICAgIGxlbiA9IG9mZnNldG9mKFQzMF9JTkZPLCBzdGF0aW9uX2lkKSArIDIwOwogICAgICAgICAgICAgaWYgKHBsY2ktPmZheF9jb25uZWN0X2luZm9fbGVuZ3RoIDwgbGVuKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAoKFQzMF9JTkZPICopKHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyKSktPnN0YXRpb25faWRfbGVuID0gMDsKQEAgLTM4MDIsNyArMzgwMiw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgbmNwaSA9ICZtX3Bhcm1zWzFdOwotICAgIGxlbiA9ICgoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKSk7CisgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgaWYgKHBsY2ktPmZheF9jb25uZWN0X2luZm9fbGVuZ3RoIDwgbGVuKQogICAgIHsKICAgICAgICgoVDMwX0lORk8gKikocGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19idWZmZXIpKS0+c3RhdGlvbl9pZF9sZW4gPSAwOwpAQCAtNjg0NCw3ICs2ODQ0LDcgQEAKICAgICAgICAgaWYgKChwbGNpLT5yZXF1ZXN0ZWRfb3B0aW9uc19jb25uIHwgcGxjaS0+cmVxdWVzdGVkX29wdGlvbnMgfCBhLT5yZXF1ZXN0ZWRfb3B0aW9uc190YWJsZVtwbGNpLT5hcHBsLT5JZC0xXSkKICAgICAgICAgICAmICgoMUwgPDwgUFJJVkFURV9GQVhfU1VCX1NFUF9QV0QpIHwgKDFMIDw8IFBSSVZBVEVfRkFYX05PTlNUQU5EQVJEKSkpCiAgICAgICAgIHsKLSAgICAgICAgICBpID0gKCh3b3JkKSgoKFQzMF9JTkZPICopIDApLT5zdGF0aW9uX2lkICsgMjApKSArICgoVDMwX0lORk8gICAqKXBsY2ktPk5MLlJCdWZmZXItPlApLT5oZWFkX2xpbmVfbGVuOworICAgICAgICAgIGkgPSBvZmZzZXRvZihUMzBfSU5GTywgc3RhdGlvbl9pZCkgKyAyMCArICgoVDMwX0lORk8gICAqKXBsY2ktPk5MLlJCdWZmZXItPlApLT5oZWFkX2xpbmVfbGVuOwogICAgICAgICAgIHdoaWxlIChpIDwgcGxjaS0+TkwuUkJ1ZmZlci0+bGVuZ3RoKQogICAgICAgICAgICAgcGxjaS0+bmNwaV9idWZmZXJbKytsZW5dID0gcGxjaS0+TkwuUkJ1ZmZlci0+UFtpKytdOwogICAgICAgICB9CkBAIC03MjM2LDcgKzcyMzYsNyBAQAogICAgIHsKICAgICAgIHBsY2ktPlJEYXRhWzFdLlAgPSBwbGNpLT5SRGF0YVswXS5QOwogICAgICAgcGxjaS0+UkRhdGFbMV0uUExlbmd0aCA9IHBsY2ktPlJEYXRhWzBdLlBMZW5ndGg7Ci0gICAgICBwbGNpLT5SRGF0YVswXS5QID0gdjEyMF9oZWFkZXJfYnVmZmVyICsgKC0oKGludCkgdjEyMF9oZWFkZXJfYnVmZmVyKSAmIDMpOworICAgICAgcGxjaS0+UkRhdGFbMF0uUCA9IHYxMjBfaGVhZGVyX2J1ZmZlciArICgtKCh1bnNpZ25lZCBsb25nKXYxMjBfaGVhZGVyX2J1ZmZlcikgJiAzKTsKICAgICAgIGlmICgocGxjaS0+TkwuUkJ1ZmZlci0+UFswXSAmIFYxMjBfSEVBREVSX0VYVEVORF9CSVQpIHx8IChwbGNpLT5OTC5STGVuZ3RoID09IDEpKQogICAgICAgICBwbGNpLT5SRGF0YVswXS5QTGVuZ3RoID0gMTsKICAgICAgIGVsc2UKQEAgLTg0NzMsNyArODQ3Myw3IEBACiAgICAgICAgICAgICBmYXhfY29udHJvbF9iaXRzIHw9IFQzMF9DT05UUk9MX0JJVF9BQ0NFUFRfU0VMX1BPTExJTkc7CiAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gbmxjWzBdOwotICAgICAgICAgIHBvcyA9ICgoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKSk7CisgICAgICAgICAgcG9zID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICBpZiAocG9zIDwgcGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19sZW5ndGgpCiAgICB7CiAgICAgIGZvciAoaSA9IDEgKyBwbGNpLT5mYXhfY29ubmVjdF9pbmZvX2J1ZmZlcltwb3NdOyBpICE9IDA7IGktLSkKQEAgLTg1MjUsNyArODUyNSw3IEBACiAgICAgICB9CiAKICAgICAgIFBVVF9XT1JEKCYoKChUMzBfSU5GTyAqKSZubGNbMV0pLT5jb250cm9sX2JpdHNfbG93KSwgZmF4X2NvbnRyb2xfYml0cyk7Ci0gICAgICBsZW4gPSAoKGJ5dGUpKCgoVDMwX0lORk8gKikgMCktPnN0YXRpb25faWQgKyAyMCkpOworICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgIHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyW2ldID0gbmxjWzEraV07CiAgICAgICAoKFQzMF9JTkZPICAgKikgcGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19idWZmZXIpLT5oZWFkX2xpbmVfbGVuID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCmluZGV4IGJmNTI2YTdhLi5kNmZkZjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKQEAgLTU5NCw2ICs1OTQsNyBAQAogCQkJCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfV0FSTikKIAkJCQkJZGVidWdsMShjcywgIkFtZDc5MzA6IGwxaHc6IGwybDEgdHhfc2tiIGV4aXN0IHRoaXMgc2hvdWxkbid0IGhhcHBlbiIpOwogCQkJCXNrYl9xdWV1ZV90YWlsKCZjcy0+c3EsIHNrYik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjcy0+ZGVidWcgJiBERUJfRExPR19IRVgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwppbmRleCAwMThiZDI5Li4wYjBjMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKQEAgLTM4Miw3ICszODIsNyBAQAogewogCWludCB0byA9IDUwOwogCi0Jd2hpbGUgKCghKE1lbVJlYWRIU0NYKGNzLCBoc2N4LCBIU0NYX1NUQVIpICYgMHg0NCkgPT0gMHg0MCkgJiYgdG8pIHsKKwl3aGlsZSAoKChNZW1SZWFkSFNDWChjcywgaHNjeCwgSFNDWF9TVEFSKSAmIDB4NDQpICE9IDB4NDApICYmIHRvKSB7CiAJCXVkZWxheSgxKTsKIAkJdG8tLTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCmluZGV4IGYxODFkYjQuLjE2NTdiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCkBAIC00NzcsNjIgKzQ3Nyw2MiBAQAogbW9kZW1fc2V0X2luaXQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKSB7CiAJaW50IHRpbWVvdXQ7CiAKLSNkZWZpbmUgUkNWX0RFTEFZIDIwMDAwCQorI2RlZmluZSBSQ1ZfREVMQVkgMjAKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzEsIHN0cmxlbihNSW5pdF8xKSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSk7CisJbWRlbGF5KFJDVl9ERUxBWSk7CiAJbW9kZW1fd3JpdGVfY21kKGNzLCBNSW5pdF8yLCBzdHJsZW4oTUluaXRfMikpOwogCXRpbWVvdXQgPSAxMDAwOwogCXdoaWxlKHRpbWVvdXQtLSAmJiBjcy0+aHcuZWxzYS50cmFuc2NudCkKIAkJdWRlbGF5KDEwMDApOwogCWRlYnVnbDEoY3MsICJtc2kgdG91dD0lZCIsIHRpbWVvdXQpOwotCXVkZWxheShSQ1ZfREVMQVkpOworCW1kZWxheShSQ1ZfREVMQVkpOwogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfMywgc3RybGVuKE1Jbml0XzMpKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzQsIHN0cmxlbihNSW5pdF80KSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSApOworCW1kZWxheShSQ1ZfREVMQVkpOwogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfNSwgc3RybGVuKE1Jbml0XzUpKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzYsIHN0cmxlbihNSW5pdF82KSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSk7CisJbWRlbGF5KFJDVl9ERUxBWSk7CiAJbW9kZW1fd3JpdGVfY21kKGNzLCBNSW5pdF83LCBzdHJsZW4oTUluaXRfNykpOwogCXRpbWVvdXQgPSAxMDAwOwogCXdoaWxlKHRpbWVvdXQtLSAmJiBjcy0+aHcuZWxzYS50cmFuc2NudCkKIAkJdWRlbGF5KDEwMDApOwogCWRlYnVnbDEoY3MsICJtc2kgdG91dD0lZCIsIHRpbWVvdXQpOwotCXVkZWxheShSQ1ZfREVMQVkpOworCW1kZWxheShSQ1ZfREVMQVkpOwogfQogCiBzdGF0aWMgdm9pZAogbW9kZW1fc2V0X2RpYWwoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgb3V0Z29pbmcpIHsKIAlpbnQgdGltZW91dDsKLSNkZWZpbmUgUkNWX0RFTEFZIDIwMDAwCQorI2RlZmluZSBSQ1ZfREVMQVkgMjAKIAogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfc3BlZWQyODgwMCwgc3RybGVuKE1Jbml0X3NwZWVkMjg4MDApKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAlpZiAob3V0Z29pbmcpCiAJCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfZGlhbG91dCwgc3RybGVuKE1Jbml0X2RpYWxvdXQpKTsKIAllbHNlCkBAIC01NDEsNyArNTQxLDcgQEAKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IDlkZTU0MjAuLmE0MjBiNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtODE3LDggKzgxNyw4IEBACiAJfQogCS8qIHdlIGhhdmUgYSBjb21wbGV0ZSBoZGxjIHBhY2tldCAqLwogCWlmIChmaW5pc2gpIHsKLQkJaWYgKCghZmlmby0+c2tidWZmLT5kYXRhW2ZpZm8tPnNrYnVmZi0+bGVuIC0gMV0pCi0JCSAgICAmJiAoZmlmby0+c2tidWZmLT5sZW4gPiAzKSkgeworCQlpZiAoZmlmby0+c2tidWZmLT5sZW4gPiAzICYmCisJCQkJIWZpZm8tPnNrYnVmZi0+ZGF0YVtmaWZvLT5za2J1ZmYtPmxlbiAtIDFdKSB7CiAKIAkJCWlmIChmaWZvbiA9PSBIRkNVU0JfRF9SWCkgewogCQkJCURCRyhIRkNVU0JfREJHX0RDSEFOTkVMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hzY3hfaXJxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYwppbmRleCA3YjFhZDVlLi4yMzg3ZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYwpAQCAtMzIsNyArMzIsNyBAQAogewogCWludCB0byA9IDUwOwogCi0Jd2hpbGUgKCghKFJFQURIU0NYKGNzLCBoc2N4LCBIU0NYX1NUQVIpICYgMHg0NCkgPT0gMHg0MCkgJiYgdG8pIHsKKwl3aGlsZSAoKChSRUFESFNDWChjcywgaHNjeCwgSFNDWF9TVEFSKSAmIDB4NDQpICE9IDB4NDApICYmIHRvKSB7CiAJCXVkZWxheSgxKTsKIAkJdG8tLTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMKaW5kZXggOWFiYTY0Ni4uYzgwY2JiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2ljYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAJCQkJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9XQVJOKQogCQkJCQlkZWJ1Z2wxKGNzLCAiIGwybDEgdHhfc2tiIGV4aXN0IHRoaXMgc2hvdWxkbid0IGhhcHBlbiIpOwogCQkJCXNrYl9xdWV1ZV90YWlsKCZjcy0+c3EsIHNrYik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjcy0+ZGVidWcgJiBERUJfRExPR19IRVgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmggYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmgKaW5kZXggNzQwMzJkMC4uNzUxMWYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuaApAQCAtODMsMTkgKzgzLDE5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlscCA9IG5kLT5xdWV1ZTsgICAgICAgICAvKiBnZXQgbHAgb24gdG9wIG9mIHF1ZXVlICovCi0Jc3Bpbl9sb2NrKCZuZC0+cXVldWUtPnhtaXRfbG9jayk7CiAJd2hpbGUgKGlzZG5fbmV0X2xwX2J1c3kobmQtPnF1ZXVlKSkgewotCQlzcGluX3VubG9jaygmbmQtPnF1ZXVlLT54bWl0X2xvY2spOwogCQluZC0+cXVldWUgPSBuZC0+cXVldWUtPm5leHQ7CiAJCWlmIChuZC0+cXVldWUgPT0gbHApIHsgLyogbm90IGZvdW5kIC0tIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJCWxwID0gTlVMTDsKIAkJCWdvdG8gZXJyb3V0OwogCQl9Ci0JCXNwaW5fbG9jaygmbmQtPnF1ZXVlLT54bWl0X2xvY2spOwogCX0KIAlscCA9IG5kLT5xdWV1ZTsKIAluZC0+cXVldWUgPSBuZC0+cXVldWUtPm5leHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmxwLT54bWl0X2xvY2spOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlyZXR1cm4gbHA7CiBlcnJvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gbHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vc3RhY2suYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9zdGFjay5jCmluZGV4IDNlMTUzMmEuLjBkMDVlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9zdGFjay5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9zdGFjay5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIHN0YXRpYyBpbnQKIHN0X293bl9jdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1X2ludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlpZiAoIWNoLT5zdCB8fCBjaC0+c3QtPmxheWVyMSkKKwlpZiAoIWNoLT5zdCB8fCAhY2gtPnN0LT5sYXllcjEpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBjaC0+c3QtPmxheWVyMS0+Y3RybChjaC0+c3QtPmxheWVyMSwgY21kLCBhcmcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IGI0MGZiOWIuLjZmMzA4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTQwNSw3ICs0MDUsMTEgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCBtYXAgaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCAwLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKKwkvKiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGludGVycnVwdCB0byBiZSBkaXNhYmxlZAorCSAqIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlciBzdXNwZW5kLCB3ZSBjb250cm9sIG91ciBvd24gZGlzYWJsaW5nCisJICogZm9yIHRoYXQgb25lCisJICovCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIElSUUZfVElNRVIsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgewogCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MTksNyArNDIzLDcgQEAKIAkJCWdwaW9faXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZ3Bpb19ub2RlLCAwKTsKIAogCQlpZiAoZ3Bpb19pcnEgIT0gTk9fSVJRKSB7Ci0JCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgMCwKKwkJCWlmIChyZXF1ZXN0X2lycShncGlvX2lycSwgZ3BpbzFfaW50ZXJydXB0LCBJUlFGX1RJTUVSLAogCQkJCQkiR1BJTzEgQURCIiwgKHZvaWQgKikwKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgInBtdTogY2FuJ3QgZ2V0IGlycSAlZCIKIAkJCQkgICAgICAgIiAoR1BJTzEpXG4iLCBncGlvX2lycSk7CkBAIC05MjUsOCArOTI5LDcgQEAKIAogI2lmZGVmIENPTkZJR19BREIKIC8qIFNlbmQgYW4gQURCIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQKLXBtdV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKQorc3RhdGljIGludCBwbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKIHsKIAlpbnQgaSwgcmV0OwogCkBAIC0xMDA1LDE2ICsxMDA4LDExIEBACiB9CiAKIC8qIEVuYWJsZS9kaXNhYmxlIGF1dG9wb2xsaW5nICovCi1zdGF0aWMgaW50Ci1wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQorc3RhdGljIGludCBfX3BtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCiB7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIAotCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKLQkJcmV0dXJuIC1FTlhJTzsKLQogCWlmIChkZXZzKSB7Ci0JCWFkYl9kZXZfbWFwID0gZGV2czsKIAkJcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgNSwgUE1VX0FEQl9DTUQsIDAsIDB4ODYsCiAJCQkgICAgYWRiX2Rldl9tYXAgPj4gOCwgYWRiX2Rldl9tYXApOwogCQlwbXVfYWRiX2ZsYWdzID0gMjsKQEAgLTEwMjcsOSArMTAyNSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCit7CisJaWYgKCh2aWFzID09IE5VTEwpIHx8ICghcG11X2Z1bGx5X2luaXRlZCkgfHwgIXBtdV9oYXNfYWRiKQorCQlyZXR1cm4gLUVOWElPOworCisJYWRiX2Rldl9tYXAgPSBkZXZzOworCXJldHVybiBfX3BtdV9hZGJfYXV0b3BvbGwoZGV2cyk7Cit9CisKIC8qIFJlc2V0IHRoZSBBREIgYnVzICovCi1zdGF0aWMgaW50Ci1wbXVfYWRiX3Jlc2V0X2J1cyh2b2lkKQorc3RhdGljIGludCBwbXVfYWRiX3Jlc2V0X2J1cyh2b2lkKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAJaW50IHNhdmVfYXV0b3BvbGwgPSBhZGJfZGV2X21hcDsKQEAgLTEwMzgsMTMgKzEwNDQsMTMgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCS8qIGFueW9uZSBnb3QgYSBiZXR0ZXIgaWRlYT8/ICovCi0JcG11X2FkYl9hdXRvcG9sbCgwKTsKKwlfX3BtdV9hZGJfYXV0b3BvbGwoMCk7CiAKLQlyZXEubmJ5dGVzID0gNTsKKwlyZXEubmJ5dGVzID0gNDsKIAlyZXEuZG9uZSA9IE5VTEw7CiAJcmVxLmRhdGFbMF0gPSBQTVVfQURCX0NNRDsKLQlyZXEuZGF0YVsxXSA9IDA7Ci0JcmVxLmRhdGFbMl0gPSBBREJfQlVTUkVTRVQ7CisJcmVxLmRhdGFbMV0gPSBBREJfQlVTUkVTRVQ7CisJcmVxLmRhdGFbMl0gPSAwOwogCXJlcS5kYXRhWzNdID0gMDsKIAlyZXEuZGF0YVs0XSA9IDA7CiAJcmVxLnJlcGx5X2xlbiA9IDA7CkBAIC0xMDU2LDcgKzEwNjIsNyBAQAogCXBtdV93YWl0X2NvbXBsZXRlKCZyZXEpOwogCiAJaWYgKHNhdmVfYXV0b3BvbGwgIT0gMCkKLQkJcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKKwkJX19wbXVfYWRiX2F1dG9wb2xsKHNhdmVfYXV0b3BvbGwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL01ha2VmaWxlIGIvZHJpdmVycy9tZC9NYWtlZmlsZQppbmRleCAxZGM0MTg1Li5lMzU1ZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKQEAgLTQ2LDcgKzQ2LDcgQEAKIG9iai0kKENPTkZJR19ETV9aRVJPKQkJKz0gZG0temVyby5vCiAKIHF1aWV0X2NtZF91bnJvbGwgPSBVTlJPTEwgICRACi0gICAgICBjbWRfdW5yb2xsID0gJChQRVJMKSAkKHNyY3RyZWUpLyQoc3JjKS91bnJvbGwucGwgJChVTlJPTEwpIFwKKyAgICAgIGNtZF91bnJvbGwgPSAkKEFXSykgLWYkKHNyY3RyZWUpLyQoc3JjKS91bnJvbGwuYXdrIC12Tj0kKFVOUk9MTCkgXAogICAgICAgICAgICAgICAgICAgIDwgJDwgPiAkQCB8fCAoIHJtIC1mICRAICYmIGV4aXQgMSApCiAKIGlmZXEgKCQoQ09ORklHX0FMVElWRUMpLHkpCkBAIC01OSw1NiArNTksNTYgQEAKIAogdGFyZ2V0cyArPSByYWlkNmludDEuYwogJChvYmopL3JhaWQ2aW50MS5jOiAgIFVOUk9MTCA6PSAxCi0kKG9iaikvcmFpZDZpbnQxLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQyLmMKICQob2JqKS9yYWlkNmludDIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2aW50Mi5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50NC5jCiAkKG9iaikvcmFpZDZpbnQ0LmM6ICAgVU5ST0xMIDo9IDQKLSQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDguYwogJChvYmopL3JhaWQ2aW50OC5jOiAgIFVOUk9MTCA6PSA4Ci0kKG9iaikvcmFpZDZpbnQ4LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQxNi5jCiAkKG9iaikvcmFpZDZpbnQxNi5jOiAgVU5ST0xMIDo9IDE2Ci0kKG9iaikvcmFpZDZpbnQxNi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQzMi5jCiAkKG9iaikvcmFpZDZpbnQzMi5jOiAgVU5ST0xMIDo9IDMyCi0kKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWMxLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMxLmMKICQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWMyLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMyLmMKICQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgVU5ST0xMIDo9IDIKLSQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWM0Lm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWM0LmMKICQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgVU5ST0xMIDo9IDQKLSQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIENGTEFHU19yYWlkNmFsdGl2ZWM4Lm8gKz0gJChhbHRpdmVjX2ZsYWdzKQogdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWM4LmMKICQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHF1aWV0X2NtZF9ta3RhYmxlID0gVEFCTEUgICAkQApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggNjk4NmIwMC4uNjBlMmIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC0xNjI0LDEwICsxNjI0LDExIEBACiAJYml0bWFwLT5vZmZzZXQgPSBtZGRldi0+Yml0bWFwX29mZnNldDsKIAlpZiAoZmlsZSkgewogCQlnZXRfZmlsZShmaWxlKTsKLQkJZG9fc3luY19tYXBwaW5nX3JhbmdlKGZpbGUtPmZfbWFwcGluZywgMCwgTExPTkdfTUFYLAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSB8Ci0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUik7CisJCS8qIEFzIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGZpbGUgd2lsbCB1c2UgYm1hcCwKKwkJICogYW5kIGJ5cGFzcyB0aGUgcGFnZSBjYWNoZSwgd2UgbXVzdCBzeW5jIHRoZSBmaWxlCisJCSAqIGZpcnN0LgorCQkgKi8KKwkJdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5LCAxKTsKIAl9CiAJLyogcmVhZCBzdXBlcmJsb2NrIGZyb20gYml0bWFwIGZpbGUgKHRoaXMgc2V0cyBiaXRtYXAtPmNodW5rc2l6ZSkgKi8KIAllcnIgPSBiaXRtYXBfcmVhZF9zYihiaXRtYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKaW5kZXggNTU2YWNmZi4uN2RiZTY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYworKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCkBAIC0xMzgsMTYgKzEzOCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIpOwogCi0vKgotICogUm91bmQgYSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgJ3NpemUnIGJvdW5kYXJ5LiAgc2l6ZSBtdXN0Ci0gKiBiZSBhIHBvd2VyIG9mIDIuCi0gKi8KLXN0YXRpYyB1bG9uZyByb3VuZF91cCh1bG9uZyBuLCB1bG9uZyBzaXplKQotewotCXNpemUtLTsKLQlyZXR1cm4gKG4gKyBzaXplKSAmIH5zaXplOwotfQotCiBzdGF0aWMgaW50IHNldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAogCQkJICBjb25zdCBjaGFyICpjaHVua19zaXplX2FyZywgY2hhciAqKmVycm9yKQogewpAQCAtMTU1LDcgKzE0NSw4IEBACiAJY2hhciAqdmFsdWU7CiAKIAljaHVua19zaXplX3Vsb25nID0gc2ltcGxlX3N0cnRvdWwoY2h1bmtfc2l6ZV9hcmcsICZ2YWx1ZSwgMTApOwotCWlmICgqY2h1bmtfc2l6ZV9hcmcgPT0gJ1wwJyB8fCAqdmFsdWUgIT0gJ1wwJykgeworCWlmICgqY2h1bmtfc2l6ZV9hcmcgPT0gJ1wwJyB8fCAqdmFsdWUgIT0gJ1wwJyB8fAorCSAgICBjaHVua19zaXplX3Vsb25nID4gVUlOVF9NQVgpIHsKIAkJKmVycm9yID0gIkludmFsaWQgY2h1bmsgc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE2NSw0MCArMTU2LDM1IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogQ2h1bmsgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFNpbGVudGx5Ci0JICogcm91bmQgdXAgaWYgaXQncyBub3QuCi0JICovCi0JY2h1bmtfc2l6ZV91bG9uZyA9IHJvdW5kX3VwKGNodW5rX3NpemVfdWxvbmcsIFBBR0VfU0laRSA+PiA5KTsKLQotCXJldHVybiBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RvcmUsIGNodW5rX3NpemVfdWxvbmcsCisJcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwKKwkJCQkJCSAodW5zaWduZWQpIGNodW5rX3NpemVfdWxvbmcsCiAJCQkJCQkgZXJyb3IpOwogfQogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZywKKwkJCQkgICAgICB1bnNpZ25lZCBjaHVua19zaXplLAogCQkJCSAgICAgIGNoYXIgKiplcnJvcikKIHsKIAkvKiBDaGVjayBjaHVua19zaXplIGlzIGEgcG93ZXIgb2YgMiAqLwotCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplX3Vsb25nKSkgeworCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplKSkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiAyIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogVmFsaWRhdGUgdGhlIGNodW5rIHNpemUgYWdhaW5zdCB0aGUgZGV2aWNlIGJsb2NrIHNpemUgKi8KLQlpZiAoY2h1bmtfc2l6ZV91bG9uZyAlIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgeworCWlmIChjaHVua19zaXplICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIGRldmljZSBibG9ja3NpemUiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY2h1bmtfc2l6ZV91bG9uZyA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CisJaWYgKGNodW5rX3NpemUgPiBJTlRfTUFYID4+IFNFQ1RPUl9TSElGVCkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyB0b28gaGlnaCI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZV91bG9uZzsKLQlzdG9yZS0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemVfdWxvbmcgLSAxOwotCXN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplX3Vsb25nKSAtIDE7CisJc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplOworCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZSAtIDE7CisJc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemUpIC0gMTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUxLDcgKzIzNyw3IEBACiAKIAlyID0gc2V0X2NodW5rX3NpemUodG1wX3N0b3JlLCBhcmd2WzJdLCAmdGktPmVycm9yKTsKIAlpZiAocikKLQkJZ290byBiYWRfY293OworCQlnb3RvIGJhZF9jdHI7CiAKIAlyID0gdHlwZS0+Y3RyKHRtcF9zdG9yZSwgMCwgTlVMTCk7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmggYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCmluZGV4IDgxMmM3MTguLjhhMjIzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaApAQCAtMTAxLDkgKzEwMSw5IEBACiAJc3RydWN0IGRtX2RldiAqY293OwogCiAJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCi0JY2h1bmtfdCBjaHVua19zaXplOwotCWNodW5rX3QgY2h1bmtfbWFzazsKLQljaHVua190IGNodW5rX3NoaWZ0OworCXVuc2lnbmVkIGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfbWFzazsKKwl1bnNpZ25lZCBjaHVua19zaGlmdDsKIAogCXZvaWQgKmNvbnRleHQ7CiB9OwpAQCAtMTY5LDcgKzE2OSw3IEBACiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpOwogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZywKKwkJCQkgICAgICB1bnNpZ25lZCBjaHVua19zaXplLAogCQkJCSAgICAgIGNoYXIgKiplcnJvcik7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfY3JlYXRlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwppbmRleCA2NTJiZDMzLi43YWMyYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCX0KIAogCS8qIFRoZSBwdHIgdmFsdWUgaXMgc3VmZmljaWVudCBmb3IgbG9jYWwgdW5pcXVlIGlkICovCi0JbGMtPmx1aWQgPSAodWludDY0X3QpbGM7CisJbGMtPmx1aWQgPSAodW5zaWduZWQgbG9uZylsYzsKIAogCWxjLT50aSA9IHRpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwppbmRleCBkNWIyZTA4Ny4uMGM3NDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC0yODQsMTIgKzI4NCwxMyBAQAogewogCWludCByOwogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7Ci0JY2h1bmtfdCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX3NpemU7CiAJaW50IGNodW5rX3NpemVfc3VwcGxpZWQgPSAxOwogCWNoYXIgKmNodW5rX2VycjsKIAogCS8qCi0JICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCisJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgbG9naWNhbF9ibG9ja19zaXplLCBpZiBsYXJnZXIpCisJICogaWYgbm9uZSBzdXBwbGllZAogCSAqLwogCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CiAJCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKQEAgLTMzNCwxMCArMzM1LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY2h1bmtfc2l6ZV9zdXBwbGllZCkKLQkJRE1XQVJOKCJjaHVuayBzaXplICVsbHUgaW4gZGV2aWNlIG1ldGFkYXRhIG92ZXJyaWRlcyAiCi0JCSAgICAgICAidGFibGUgY2h1bmsgc2l6ZSBvZiAlbGx1LiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CisJCURNV0FSTigiY2h1bmsgc2l6ZSAldSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKKwkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICV1LiIsCisJCSAgICAgICBjaHVua19zaXplLCBwcy0+c3RvcmUtPmNodW5rX3NpemUpOwogCiAJLyogV2UgaGFkIGEgYm9ndXMgY2h1bmtfc2l6ZS4gRml4IHN0dWZmIHVwLiAqLwogCWZyZWVfYXJlYShwcyk7CkBAIC0zNDUsOCArMzQ1LDggQEAKIAlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHBzLT5zdG9yZSwgY2h1bmtfc2l6ZSwKIAkJCQkJICAgICAgJmNodW5rX2Vycik7CiAJaWYgKHIpIHsKLQkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICVsbHU6ICVzLiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwgY2h1bmtfZXJyKTsKKwkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICV1OiAlcy4iLAorCQkgICAgICBjaHVua19zaXplLCBjaHVua19lcnIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNTdmMWJmNy4uM2EzYmE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTI5Niw2ICsyOTYsNyBAQAogICovCiBzdGF0aWMgaW50IHJlZ2lzdGVyX3NuYXBzaG90KHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCkKIHsKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKmw7CiAJc3RydWN0IG9yaWdpbiAqbywgKm5ld19vOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzbmFwLT5vcmlnaW4tPmJkZXY7CiAKQEAgLTMxOSw3ICszMjAsMTEgQEAKIAkJX19pbnNlcnRfb3JpZ2luKG8pOwogCX0KIAotCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZvLT5zbmFwc2hvdHMpOworCS8qIFNvcnQgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIGNodW5rIHNpemUsIGxhcmdlc3QtZmlyc3Qgc21hbGxlc3QtbGFzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJm8tPnNuYXBzaG90cywgbGlzdCkKKwkJaWYgKGwtPnN0b3JlLT5jaHVua19zaXplIDwgc25hcC0+c3RvcmUtPmNodW5rX3NpemUpCisJCQlicmVhazsKKwlsaXN0X2FkZF90YWlsKCZzbmFwLT5saXN0LCAmbC0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX29yaWdpbnNfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC02NjgsNiArNjczLDExIEBACiAJYmlvX2xpc3RfaW5pdCgmcy0+cXVldWVkX2Jpb3MpOwogCUlOSVRfV09SSygmcy0+cXVldWVkX2Jpb3Nfd29yaywgZmx1c2hfcXVldWVkX2Jpb3MpOwogCisJaWYgKCFzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgeworCQl0aS0+ZXJyb3IgPSAiQ2h1bmsgc2l6ZSBub3Qgc2V0IjsKKwkJZ290byBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI7CisJfQorCiAJLyogQWRkIHNuYXBzaG90IHRvIHRoZSBsaXN0IG9mIHNuYXBzaG90cyBmb3IgdGhpcyBvcmlnaW4gKi8KIAkvKiBFeGNlcHRpb25zIGFyZW4ndCB0cmlnZ2VyZWQgdGlsbCBzbmFwc2hvdF9yZXN1bWUoKSBpcyBjYWxsZWQgKi8KIAlpZiAocmVnaXN0ZXJfc25hcHNob3QocykpIHsKQEAgLTk1MSw3ICs5NjEsNyBAQAogCiAJc3JjLmJkZXYgPSBiZGV2OwogCXNyYy5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm9sZF9jaHVuayk7Ci0Jc3JjLmNvdW50ID0gbWluKHMtPnN0b3JlLT5jaHVua19zaXplLCBkZXZfc2l6ZSAtIHNyYy5zZWN0b3IpOworCXNyYy5jb3VudCA9IG1pbigoc2VjdG9yX3Qpcy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CiAKIAlkZXN0LmJkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OwogCWRlc3Quc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5uZXdfY2h1bmspOwpAQCAtMTE0Miw2ICsxMTUyLDggQEAKIAl1bnNpZ25lZCBzeiA9IDA7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwID0gdGktPnByaXZhdGU7CiAKKwlkb3duX3dyaXRlKCZzbmFwLT5sb2NrKTsKKwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlpZiAoIXNuYXAtPnZhbGlkKQpAQCAtMTE3Myw2ICsxMTg1LDggQEAKIAkJYnJlYWs7CiAJfQogCisJdXBfd3JpdGUoJnNuYXAtPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODgsNyArMTQwMiw3IEBACiAJc3RydWN0IGRtX2RldiAqZGV2ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwogCXN0cnVjdCBvcmlnaW4gKm87Ci0JY2h1bmtfdCBjaHVua19zaXplID0gMDsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gMDsKIAogCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CiAJbyA9IF9fbG9va3VwX29yaWdpbihkZXYtPmJkZXYpOwpAQCAtMTQ2NSw3ICsxNDc5LDcgQEAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZzbmFwc2hvdF90YXJnZXQpOwogCWlmIChyKSB7CiAJCURNRVJSKCJzbmFwc2hvdCB0YXJnZXQgcmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7Ci0JCXJldHVybiByOworCQlnb3RvIGJhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ7CiAJfQogCiAJciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmb3JpZ2luX3RhcmdldCk7CkBAIC0xNTIyLDYgKzE1MzYsOSBAQAogCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKIGJhZDE6CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CisKK2JhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ6CisJZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQoKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDM3NmYxYWIuLjcyNGVmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlhdG9taWNfdCBpb19jb3VudDsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOworCXNwaW5sb2NrX3QgZW5kaW9fbG9jazsKIH07CiAKIC8qCkBAIC01NzgsOCArNTc5LDEyIEBACiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gaW8tPm1kOwogCiAJLyogUHVzaC1iYWNrIHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvcnMgKi8KLQlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCi0JCWlvLT5lcnJvciA9IGVycm9yOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJCWlmICghKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKKwkJCWlvLT5lcnJvciA9IGVycm9yOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpby0+ZW5kaW9fbG9jaywgZmxhZ3MpOworCX0KIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewpAQCAtMTIyNiw2ICsxMjMxLDcgQEAKIAlhdG9taWNfc2V0KCZjaS5pby0+aW9fY291bnQsIDEpOwogCWNpLmlvLT5iaW8gPSBiaW87CiAJY2kuaW8tPm1kID0gbWQ7CisJc3Bpbl9sb2NrX2luaXQoJmNpLmlvLT5lbmRpb19sb2NrKTsKIAljaS5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAljaS5zZWN0b3JfY291bnQgPSBiaW9fc2VjdG9ycyhiaW8pOwogCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkKQEAgLTE4MjIsNiArMTgyOCw3IEBACiBiYWRfYmRldjoKIAlkZXN0cm95X3dvcmtxdWV1ZShtZC0+d3EpOwogYmFkX3RocmVhZDoKKwlkZWxfZ2VuZGlzayhtZC0+ZGlzayk7CiAJcHV0X2Rpc2sobWQtPmRpc2spOwogYmFkX2Rpc2s6CiAJYmxrX2NsZWFudXBfcXVldWUobWQtPnF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAyNmJhNDJhLi5lNjRjOTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0yNjMxLDcgKzI2MzEsNyBAQAogCQkJcmRldi0+ZGVzY19uciA9IGkrKzsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IHJkZXYtPmRlc2NfbnI7CiAJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IG1kZGV2LT5yYWlkX2Rpc2tzKSB7CisJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IChtZGRldi0+cmFpZF9kaXNrcyAtIG1pbigwLCBtZGRldi0+ZGVsdGFfZGlza3MpKSkgewogCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CiAJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQpAQCAtNjUwNCw4ICs2NTA0LDkgQEAKICBza2lwOgogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7CiAJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7Ci0JbWRkZXYtPnJlc3luY19taW4gPSAwOwotCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOworCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpCisJCS8qIFdlIGNvbXBsZXRlZCBzbyBtYXggc2V0dGluZyBjYW4gYmUgZm9yZ290dGVuLiAqLworCQltZGRldi0+cmVzeW5jX21heCA9IE1heFNlY3RvcjsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkMWI5YmQ1Li5hMDUzNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjFfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjFfYmlvKQorCWlmICghcjFfYmlvICYmIHBpLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhwaS0+bWRkZXYpOwogCiAJcmV0dXJuIHIxX2JpbzsKQEAgLTE2ODMsNiArMTY4Myw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0xOTc4LDEzICsxOTc5LDE0IEBACiAJY29uZi0+cG9vbGluZm8gPSBrbWFsbG9jKHNpemVvZigqY29uZi0+cG9vbGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnBvb2xpbmZvKQogCQlnb3RvIG91dF9ub19tZW07Ci0JY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gTlVMTDsKIAljb25mLT5wb29saW5mby0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShOUl9SQUlEMV9CSU9TLCByMWJpb19wb29sX2FsbG9jLAogCQkJCQkgIHIxYmlvX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJpb19wb29sKQogCQlnb3RvIG91dF9ub19tZW07CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDUxYzRjNWMuLmMyY2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJLyogYWxsb2NhdGUgYSByMTBiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMTBfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjEwX2JpbykKKwlpZiAoIXIxMF9iaW8gJiYgY29uZi0+bWRkZXYpCiAJCXVucGx1Z19zbGF2ZXMoY29uZi0+bWRkZXYpOwogCiAJcmV0dXJuIHIxMF9iaW87CkBAIC0xNjMyLDYgKzE2MzIsNyBAQAogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICh1bnBsdWcpCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOwpAQCAtMjA5NSw3ICsyMDk2LDYgQEAKIAlpZiAoIWNvbmYtPnRtcHBhZ2UpCiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAotCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPm5lYXJfY29waWVzID0gbmM7CiAJY29uZi0+ZmFyX2NvcGllcyA9IGZjOwpAQCAtMjEzMiw2ICsyMTMyLDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KIAorCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA5NDgyOTgwLi5kY2NlMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xNTYsMTMgKzE1NiwxNiBAQAogc3RhdGljIGludCByYWlkNl9pZHhfdG9fc2xvdChpbnQgaWR4LCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAogCQkJICAgICBpbnQgKmNvdW50LCBpbnQgc3luZHJvbWVfZGlza3MpCiB7Ci0JaW50IHNsb3Q7CisJaW50IHNsb3QgPSAqY291bnQ7CiAKKwlpZiAoc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiAJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOwotCXNsb3QgPSAoKmNvdW50KSsrOworCWlmICghc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJcmV0dXJuIHNsb3Q7CiB9CiAKQEAgLTcxNyw3ICs3MjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCXNyY3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJc3Jjc1tpXSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKQEAgLTcyNyw5ICs3MzAsOCBAQAogCQlzcmNzW3Nsb3RdID0gc2gtPmRldltpXS5wYWdlOwogCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKIAl9IHdoaWxlIChpICE9IGQwX2lkeCk7Ci0JQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtODE0LDcgKzgxNiw3IEBACiAJICogc2xvdCBudW1iZXIgY29udmVyc2lvbiBmb3IgJ2ZhaWxhJyBhbmQgJ2ZhaWxiJwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkaXNrcyA7IGkrKykKLQkJYmxvY2tzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCWJsb2Nrc1tpXSA9IE5VTEw7CiAJY291bnQgPSAwOwogCWkgPSBkMF9pZHg7CiAJZG8gewpAQCAtODI4LDcgKzgzMCw2IEBACiAJCQlmYWlsYiA9IHNsb3Q7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKQEAgLTg0NSw3ICs4NDYsNyBAQAogCQkJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIE5VTEwsCiAJCQkJCSAgb3BzX2NvbXBsZXRlX2NvbXB1dGUsIHNoLAogCQkJCQkgIHRvX2FkZHJfY29udihzaCwgcGVyY3B1KSk7Ci0JCQlyZXR1cm4gYXN5bmNfZ2VuX3N5bmRyb21lKGJsb2NrcywgMCwgY291bnQrMiwKKwkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBzeW5kcm9tZV9kaXNrcysyLAogCQkJCQkJICBTVFJJUEVfU0laRSwgJnN1Ym1pdCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcGFnZSAqZGVzdDsKQEAgLTExMzksNyArMTE0MCw3IEBACiAJCQkgICAmc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQsIHBlcmNwdS0+c3BhcmVfcGFnZSwgJnN1Ym1pdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQorc3RhdGljIHZvaWQgX19yYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKIHsKIAlpbnQgb3ZlcmxhcF9jbGVhciA9IDAsIGksIGRpc2tzID0gc2gtPmRpc2tzOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwpAQCAtMTIwNCwyMiArMTIwNSw1NSBAQAogCXB1dF9jcHUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngorc3RhdGljIHZvaWQgYXN5bmNfcnVuX29wcyh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQoreworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0ID0gc2gtPm9wcy5yZXF1ZXN0OworCisJY2xlYXJfYml0X3VubG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKTsKKwl3YWtlX3VwKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisKKwlfX3JhaWRfcnVuX29wcyhzaCwgb3BzX3JlcXVlc3QpOworCXJlbGVhc2Vfc3RyaXBlKHNoKTsKK30KKworc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCit7CisJLyogc2luY2UgaGFuZGxlX3N0cmlwZSBjYW4gYmUgY2FsbGVkIG91dHNpZGUgb2YgcmFpZDVkIGNvbnRleHQKKwkgKiB3ZSBuZWVkIHRvIGVuc3VyZSBzaC0+b3BzLnJlcXVlc3QgaXMgZGUtc3RhZ2VkIGJlZm9yZSBhbm90aGVyCisJICogcmVxdWVzdCBhcnJpdmVzCisJICovCisJd2FpdF9ldmVudChzaC0+b3BzLndhaXRfZm9yX29wcywKKwkJICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKSk7CisJc2gtPm9wcy5yZXF1ZXN0ID0gb3BzX3JlcXVlc3Q7CisKKwlhdG9taWNfaW5jKCZzaC0+Y291bnQpOworCWFzeW5jX3NjaGVkdWxlKGFzeW5jX3J1bl9vcHMsIHNoKTsKK30KKyNlbHNlCisjZGVmaW5lIHJhaWRfcnVuX29wcyBfX3JhaWRfcnVuX29wcworI2VuZGlmCisKIHN0YXRpYyBpbnQgZ3Jvd19vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOworCWludCBkaXNrcyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAlzaCA9IGttZW1fY2FjaGVfYWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaCkKIAkJcmV0dXJuIDA7Ci0JbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKKwltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGRpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKIAlzaC0+cmFpZF9jb25mID0gY29uZjsKIAlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOworCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisJI2VuZGlmCiAKLQlpZiAoZ3Jvd19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKSkgewotCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7CisJaWYgKGdyb3dfYnVmZmVycyhzaCwgZGlza3MpKSB7CisJCXNocmlua19idWZmZXJzKHNoLCBkaXNrcyk7CiAJCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CiAJCXJldHVybiAwOwogCX0KLQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCiAJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKIAlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC0xMjMxLDcgKzEyNjUsNyBAQAogc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKLQlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCiAJCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CkBAIC0xMzI5LDYgKzEzNjMsOSBAQAogCiAJCW5zaC0+cmFpZF9jb25mID0gY29uZjsKIAkJc3Bpbl9sb2NrX2luaXQoJm5zaC0+bG9jayk7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkJI2VuZGlmCiAKIAkJbGlzdF9hZGQoJm5zaC0+bHJ1LCAmbmV3c3RyaXBlcyk7CiAJfQpAQCAtMTg5OSwxMCArMTkzNiwxNSBAQAogCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFOgorCQkJLyogTGlrZSBsZWZ0X3N5bW1ldHJpYywgYnV0IFAgaXMgYmVmb3JlIFEgKi8KIAkJCWlmIChzaC0+cGRfaWR4ID09IDApCiAJCQkJaS0tOwkvKiBQIEQgRCBEIFEgKi8KLQkJCWVsc2UgaWYgKGkgPiBzaC0+cGRfaWR4KQotCQkJCWkgLT0gMjsgLyogRCBEIFEgUCBEICovCisJCQllbHNlIHsKKwkJCQkvKiBEIEQgUSBQIEQgKi8KKwkJCQlpZiAoaSA8IHNoLT5wZF9pZHgpCisJCQkJCWkgKz0gcmFpZF9kaXNrczsKKwkJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKQEAgLTI4OTYsNyArMjkzOCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzLCBpOwpAQCAtMzE2NywxMSArMzIwOSw5IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwpAQCAtMzQ1NSwxNyArMzQ5NSwxNCBAQAogCW9wc19ydW5faW8oc2gsICZzKTsKIAogCXJldHVybl9pbyhyZXR1cm5fYmkpOwotCi0JcmV0dXJuIGJsb2NrZWRfcmRldiA9PSBOVUxMOwogfQogCi0vKiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmlwZSB3YXMgaGFuZGxlZCAqLwotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChzaC0+cmFpZF9jb25mLT5sZXZlbCA9PSA2KQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTYoc2gpOworCQloYW5kbGVfc3RyaXBlNihzaCk7CiAJZWxzZQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTUoc2gpOworCQloYW5kbGVfc3RyaXBlNShzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQocmFpZDVfY29uZl90ICpjb25mKQpAQCAtMzUwMyw5ICszNTQwLDEwIEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGk7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXZzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKIAkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CkBAIC00MDExLDYgKzQwNDksOCBAQAogCQkJc2VjdG9yX25yID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJc2VjdG9yX2RpdihzZWN0b3JfbnIsIG5ld19kYXRhX2Rpc2tzKTsKIAkJaWYgKHNlY3Rvcl9ucikgeworCQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IHNlY3Rvcl9ucjsKKwkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCQkJKnNraXBwZWQgPSAxOwogCQkJcmV0dXJuIHNlY3Rvcl9ucjsKIAkJfQpAQCAtNDI3Nyw5ICs0MzE3LDcgQEAKIAljbGVhcl9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIAotCS8qIHdhaXQgZm9yIGFueSBibG9ja2VkIGRldmljZSB0byBiZSBoYW5kbGVkICovCi0Jd2hpbGUgKHVubGlrZWx5KCFoYW5kbGVfc3RyaXBlKHNoKSkpCi0JCTsKKwloYW5kbGVfc3RyaXBlKHNoKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiAKIAlyZXR1cm4gU1RSSVBFX1NFQ1RPUlM7CkBAIC00MzQ5LDM3ICs0Mzg3LDYgQEAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KIAotI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngotc3RhdGljIHZvaWQgX19wcm9jZXNzX3N0cmlwZSh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQotewotCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKLQotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3NjaGVkdWxlX2RvbWFpbihfX3Byb2Nlc3Nfc3RyaXBlLCBzaCwgZG9tYWluKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKGRvbWFpbik7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLQljb25kX3Jlc2NoZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotfQotI2VuZGlmCi0KIAogLyoKICAqIFRoaXMgaXMgb3VyIHJhaWQ1IGtlcm5lbCB0aHJlYWQuCkBAIC00MzkzLDcgKzQ0MDAsNiBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGhhbmRsZWQ7Ci0JTElTVF9IRUFEKHJhaWRfZG9tYWluKTsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKQEAgLTQ0MzAsNyArNDQzNiw5IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkKIAkJaGFuZGxlZCsrOwotCQlwcm9jZXNzX3N0cmlwZShzaCwgJnJhaWRfZG9tYWluKTsKKwkJaGFuZGxlX3N0cmlwZShzaCk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCX0KQEAgLTQ0MzgsNyArNDQ0Niw2IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAotCXN5bmNocm9uaXplX3N0cmlwZV9wcm9jZXNzaW5nKCZyYWlkX2RvbWFpbik7CiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKIAl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKIApAQCAtNDU1OCwxMyArNDU2NSw5IEBACiAKIAlpZiAoIXNlY3RvcnMpCiAJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7Ci0JaWYgKCFyYWlkX2Rpc2tzKSB7CisJaWYgKCFyYWlkX2Rpc2tzKQogCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLwotCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJZWxzZQotCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JfQorCQlyYWlkX2Rpc2tzID0gbWluKGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2VjdG9ycyAtIDEpOwogCXNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbWRkZXYtPm5ld19jaHVua19zZWN0b3JzIC0gMSk7CkBAIC00NjY1LDcgKzQ2NjgsNyBAQAogCQkJfQogCQkJcGVyX2NwdV9wdHIoY29uZi0+cGVyY3B1LCBjcHUpLT5zcGFyZV9wYWdlID0gc3BhcmVfcGFnZTsKIAkJfQotCQlzY3JpYmJsZSA9IGttYWxsb2Moc2NyaWJibGVfbGVuKGNvbmYtPnJhaWRfZGlza3MpLCBHRlBfS0VSTkVMKTsKKwkJc2NyaWJibGUgPSBrbWFsbG9jKGNvbmYtPnNjcmliYmxlX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2NyaWJibGUpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlicmVhazsKQEAgLTQ2ODYsNyArNDY4OSw3IEBACiBzdGF0aWMgcmFpZDVfY29uZl90ICpzZXR1cF9jb25mKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKLQlpbnQgcmFpZF9kaXNrLCBtZW1vcnk7CisJaW50IHJhaWRfZGlzaywgbWVtb3J5LCBtYXhfZGlza3M7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzdHJ1Y3QgZGlza19pbmZvICpkaXNrOwogCkBAIC00NzIyLDI4ICs0NzI1LDYgQEAKIAljb25mID0ga3phbGxvYyhzaXplb2YocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJZ290byBhYm9ydDsKLQotCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKLQljb25mLT5zY3JpYmJsZV9sZW4gPSBzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyk7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWVsc2UKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOwotCi0JY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmYtPmRpc2tzKQotCQlnb3RvIGFib3J0OwotCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKLQotCWlmICgoY29uZi0+c3RyaXBlX2hhc2h0YmwgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5sZXZlbCA9IG1kZGV2LT5uZXdfbGV2ZWw7Ci0JaWYgKHJhaWQ1X2FsbG9jX3BlcmNwdShjb25mKSAhPSAwKQotCQlnb3RvIGFib3J0OwotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwpAQCAtNDc1NywxMSArNDczOCwzMyBAQAogCWF0b21pY19zZXQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzLCAwKTsKIAljb25mLT5ieXBhc3NfdGhyZXNob2xkID0gQllQQVNTX1RIUkVTSE9MRDsKIAorCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJbWF4X2Rpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOworCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihtYXhfZGlza3MpOworCisJY29uZi0+ZGlza3MgPSBremFsbG9jKG1heF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY29uZi0+ZGlza3MpCisJCWdvdG8gYWJvcnQ7CisKKwljb25mLT5tZGRldiA9IG1kZGV2OworCisJaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKKwlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCisJCWdvdG8gYWJvcnQ7CisKIAlwcl9kZWJ1ZygicmFpZDU6IHJ1biglcykgY2FsbGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCXJhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzazsKLQkJaWYgKHJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzCisJCWlmIChyYWlkX2Rpc2sgPj0gbWF4X2Rpc2tzCiAJCSAgICB8fCByYWlkX2Rpc2sgPCAwKQogCQkJY29udGludWU7CiAJCWRpc2sgPSBjb25mLT5kaXNrcyArIHJhaWRfZGlzazsKQEAgLTQ3OTMsNyArNDc5Niw3IEBACiAJfQogCiAJbWVtb3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkgKwotCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKKwkJIG1heF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKIAlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYtPm1heF9ucl9zdHJpcGVzKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKQEAgLTQ5MTgsNyArNDkyMSw4IEBACiAJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJd29ya2luZ19kaXNrcysrOwogCi0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gKG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJICAgLSB3b3JraW5nX2Rpc2tzKTsKIAogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuaCBiL2RyaXZlcnMvbWQvcmFpZDUuaAppbmRleCAyMzkwZTBlLi5kZDcwODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5oCkBAIC0yMTQsMTIgKzIxNCwyMCBAQAogCWludAkJCWRpc2tzOwkJLyogZGlza3MgaW4gc3RyaXBlICovCiAJZW51bSBjaGVja19zdGF0ZXMJY2hlY2tfc3RhdGU7CiAJZW51bSByZWNvbnN0cnVjdF9zdGF0ZXMgcmVjb25zdHJ1Y3Rfc3RhdGU7Ci0JLyogc3RyaXBlX29wZXJhdGlvbnMKKwkvKioKKwkgKiBzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMKIAkgKiBAdGFyZ2V0IC0gU1RSSVBFX09QX0NPTVBVVEVfQkxLIHRhcmdldAorCSAqIEB0YXJnZXQyIC0gMm5kIGNvbXB1dGUgdGFyZ2V0IGluIHRoZSByYWlkNiBjYXNlCisJICogQHplcm9fc3VtX3Jlc3VsdCAtIFAgYW5kIFEgdmVyaWZpY2F0aW9uIGZsYWdzCisJICogQHJlcXVlc3QgLSBhc3luYyBzZXJ2aWNlIHJlcXVlc3QgZmxhZ3MgZm9yIHJhaWRfcnVuX29wcwogCSAqLwogCXN0cnVjdCBzdHJpcGVfb3BlcmF0aW9ucyB7CiAJCWludCAJCSAgICAgdGFyZ2V0LCB0YXJnZXQyOwogCQllbnVtIHN1bV9jaGVja19mbGFncyB6ZXJvX3N1bV9yZXN1bHQ7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJdW5zaWduZWQgbG9uZwkgICAgIHJlcXVlc3Q7CisJCXdhaXRfcXVldWVfaGVhZF90ICAgIHdhaXRfZm9yX29wczsKKwkJI2VuZGlmCiAJfSBvcHM7CiAJc3RydWN0IHI1ZGV2IHsKIAkJc3RydWN0IGJpbwlyZXE7CkBAIC0yOTQsNiArMzAyLDggQEAKICNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCiAjZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAogI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKKyNkZWZpbmUJU1RSSVBFX09QU19SRVFfUEVORElORwkxNgorCiAvKgogICogT3BlcmF0aW9uIHJlcXVlc3QgZmxhZ3MKICAqLwpAQCAtNDc4LDcgKzQ4OCw3IEBACiB7CiAJcmV0dXJuIChsYXlvdXQgPj0gMCAmJiBsYXlvdXQgPD0gNSkKIAkJfHwKLQkJKGxheW91dCA9PSA4IHx8IGxheW91dCA9PSAxMCkKKwkJKGxheW91dCA+PSA4ICYmIGxheW91dCA8PSAxMCkKIAkJfHwKIAkJKGxheW91dCA+PSAxNiAmJiBsYXlvdXQgPD0gMjApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwppbmRleCA2OTlkZmVlLi4yNjU0ZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICQjLXdheSB1bnJvbGxlZCBwb3J0YWJsZSBpbnRlZ2VyIG1hdGggUkFJRC02IGluc3RydWN0aW9uIHNldAogICoKLSAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAorICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLmF3awogICoKICAqIDxiZW5oPiBocGE6IGluIHByb2Nlc3MsCiAgKiB5b3UgY2FuIGp1c3QgInN0ZWFsIiB0aGUgdmVjIHVuaXQgd2l0aCBlbmFibGVfa2VybmVsX2FsdGl2ZWMoKSAoYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwppbmRleCBmOWJmOWNiLi5kMWUyNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiAkIy13YXkgdW5yb2xsZWQgcG9ydGFibGUgaW50ZWdlciBtYXRoIFJBSUQtNiBpbnN0cnVjdGlvbiBzZXQKICAqCi0gKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwucGwKKyAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5hd2sKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQppbmRleCA1OGZmZGY0Li4yODc0Y2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIE9QVEZMQUdTID0gLU8yCQkJIyBBZGp1c3QgYXMgZGVzaXJlZAogQ0ZMQUdTCSA9IC1JLi4gLUkgLi4vLi4vLi4vaW5jbHVkZSAtZyAkKE9QVEZMQUdTKQogTEQJID0gbGQKLVBFUkwJID0gcGVybAorQVdLCSA9IGF3awogQVIJID0gYXIKIFJBTkxJQgkgPSByYW5saWIKIApAQCAtMzUsMzUgKzM1LDM1IEBACiByYWlkNnRlc3Q6IHRlc3QuYyByYWlkNi5hCiAJJChDQykgJChDRkxBR1MpIC1vIHJhaWQ2dGVzdCAkXgogCi1yYWlkNmFsdGl2ZWMxLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzEuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MSA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzIuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0yIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjNC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgNCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTQgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWM4LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA4IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzguYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49OCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2aW50MS5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MSA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDIgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0yIDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDQuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgNCA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50NC5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTQgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50OC5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA4IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQ4LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49OCA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQxNi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxNiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MTYuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xNiA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQzMi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAzMiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MzIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0zMiA8IHJhaWQ2aW50LnVjID4gJEAKIAogcmFpZDZ0YWJsZXMuYzogbWt0YWJsZXMKIAkuL21rdGFibGVzID4gcmFpZDZ0YWJsZXMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC91bnJvbGwuYXdrIGIvZHJpdmVycy9tZC91bnJvbGwuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWEwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL3Vucm9sbC5hd2sKQEAgLTAsMCArMSwyMCBAQAorCisjIFRoaXMgZmlsdGVyIHJlcXVpcmVzIG9uZSBjb21tYW5kIGxpbmUgb3B0aW9uIG9mIGZvcm0gLXZOPW4KKyMgd2hlcmUgbiBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIuCisjCisjIFJlcGVhdCBlYWNoIGlucHV0IGxpbmUgY29udGFpbmluZyAkJCBuIHRpbWVzLCByZXBsYWNpbmcgJCQgd2l0aCAwLi4ubi0xLgorIyBSZXBsYWNlIGVhY2ggJCMgd2l0aCBuLCBhbmQgZWFjaCAkKiB3aXRoIGEgc2luZ2xlICQuCisKK0JFR0lOIHsKKwluID0gTiArIDAKK30KK3sKKwlpZiAoL1wkXCQvKSB7IHJlcCA9IG4gfSBlbHNlIHsgcmVwID0gMSB9CisJZm9yIChpID0gMDsgaSA8IHJlcDsgKytpKSB7CisJCXRtcCA9ICQwCisJCWdzdWIoL1wkXCQvLCBpLCB0bXApCisJCWdzdWIoL1wkXCMvLCBuLCB0bXApCisJCWdzdWIoL1wkXCovLCAiJCIsIHRtcCkKKwkJcHJpbnQgdG1wCisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC91bnJvbGwucGwgYi9kcml2ZXJzL21kL3Vucm9sbC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FjYzcxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21kL3Vucm9sbC5wbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBUYWtlIGEgcGllY2Ugb2YgQyBjb2RlIGFuZCBmb3IgZWFjaCBsaW5lIHdoaWNoIGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSAkJAotIyByZXBlYXQgbiB0aW1lcyB3aXRoICQgcmVwbGFjZWQgYnkgMC4uLm4tMTsgdGhlIHNlcXVlbmNlICQjIGlzIHJlcGxhY2VkCi0jIGJ5IHRoZSB1bnJvbGxpbmcgZmFjdG9yLCBhbmQgJCogd2l0aCBhIHNpbmdsZSAkCi0jCi0KLSgkbikgPSBAQVJHVjsKLSRuICs9IDA7Ci0KLXdoaWxlICggZGVmaW5lZCgkbGluZSA9IDxTVERJTj4pICkgewotICAgIGlmICggJGxpbmUgPX4gL1wkXCQvICkgewotCSRyZXAgPSAkbjsKLSAgICB9IGVsc2UgewotCSRyZXAgPSAxOwotICAgIH0KLSAgICBmb3IgKCAkaSA9IDAgOyAkaSA8ICRyZXAgOyAkaSsrICkgewotCSR0bXAgPSAkbGluZTsKLQkkdG1wID1+IHMvXCRcJC8kaS9nOwotCSR0bXAgPX4gcy9cJFwjLyRuL2c7Ci0JJHRtcCA9fiBzL1wkXCovXCQvZzsKLQlwcmludCAkdG1wOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggNjQ1OTUxMS4uM2E1MGNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTYxNiwxMyArNjE2LDEzIEBACiAJCWNhc2UgUkYyOgogCQkJbWFwW2ldLnJmX2ExID0gKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdIC0KIAkJCQkJcHJvZ19jYWxbUkYxXSArIHByb2dfdGFiW1JGMV0pIC8KLQkJCQkoKHJmX2ZyZXFbUkYyXSAtIHJmX2ZyZXFbUkYxXSkgLyAxMDAwKTsKKwkJCQkoczMyKSgocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDApOwogCQkJbWFwW2ldLnJmMiAgID0gcmZfZnJlcVtSRjJdIC8gMTAwMDsKIAkJCWJyZWFrOwogCQljYXNlIFJGMzoKIAkJCW1hcFtpXS5yZl9hMiA9IChwcm9nX2NhbFtSRjNdIC0gcHJvZ190YWJbUkYzXSAtCiAJCQkJCXByb2dfY2FsW1JGMl0gKyBwcm9nX3RhYltSRjJdKSAvCi0JCQkJKChyZl9mcmVxW1JGM10gLSByZl9mcmVxW1JGMl0pIC8gMTAwMCk7CisJCQkJKHMzMikoKHJmX2ZyZXFbUkYzXSAtIHJmX2ZyZXFbUkYyXSkgLyAxMDAwKTsKIAkJCW1hcFtpXS5yZl9iMiA9IHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdOwogCQkJbWFwW2ldLnJmMyAgID0gcmZfZnJlcVtSRjNdIC8gMTAwMDsKIAkJCWJyZWFrOwpAQCAtMTAwMCwxMiArMTAwMCwxMiBAQAogCXN0cnVjdCB0ZGExODI3MV9zdGRfbWFwX2l0ZW0gKm1hcDsKIAljaGFyICptb2RlOwogCWludCByZXQ7Ci0JdTMyIGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDYyNTAwOworCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiAxMjUgKgorCQkoKHBhcmFtcy0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKSA/IDEgOiAxMDAwKSAvIDI7CiAKIAlwcml2LT5tb2RlID0gVERBMTgyNzFfQU5BTE9HOwogCiAJaWYgKHBhcmFtcy0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKSB7Ci0JCWZyZXEgPSBmcmVxIC8gMTAwMDsKIAkJbWFwID0gJnN0ZF9tYXAtPmZtX3JhZGlvOwogCQltb2RlID0gImZtIjsKIAl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCA5NzQ0YjA2Li4wZTRiOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC03NSw3ICs3NSw3IEBACiAJc2VsZWN0IERWQl9ESUIzMDAwTUMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwCisJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX01UMjI2NiBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwppbmRleCAwNzM3YzYzLi4zZGYyMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCWludCBpID0gMDsKIAlzdHJ1Y3QgcmVxX3QgcmVxOwogCWludCByZXQgPSAwOwotCW1lbXNldCgmcmVxLCAwLCBzaXplb2YoJnJlcSkpOworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CiAKIAlpZiAobnVtID4gMikKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCAwYjI4MTJhLi42YmQ4OTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE5MjUsNyArMTkyNSw3IEBACiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAoU1RLNzcwMFAgYmFzZWQpIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSB9LAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzhdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbMzRdIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIEV4cHJlc3MiLApAQCAtMjA2NCw3ICsyMDY0LDcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSAxMiwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAxMSwKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkRpQmNvbSBTVEs3MDcwUCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxNV0sIE5VTEwgfSwKQEAgLTIwOTgsMTEgKzIwOTgsNiBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMwXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKLQkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMvIFQzIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sCi0JCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs1Ml0sIE5VTEwgfSwKLQkJCQl7IE5VTEwgfSwKLQkJCX0sCiAJCQl7ICAgIkVsZ2F0byBFeWVUViBEVFQiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LApAQCAtMjM0Myw4ICsyMzM4LDEwIEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTldLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAotCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUyAoSEQpIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2MF0gfSwKKwkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMgKEhEKS8gVDMiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMzXSwKKwkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzUyXSwKKwkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzYwXSwgTlVMTH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKaW5kZXggZDFiNjdmZS4uNDg1ZDA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCkBAIC0xMDUwLDI4ICsxMDUwLDI4IEBACiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfUE1UOyAvKiBjYSB0YWcgKi8KIAljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JLyogYy0+b3BlcmFuZFs3XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxNzsgKi8gLyogbGVuZ3RoICovCi0JYy0+b3BlcmFuZFs4XSA9IGxpc3RfbWFuYWdlbWVudDsKLQljLT5vcGVyYW5kWzldID0gMHgwMTsgLyogcG10X2NtZD1PS19kZXNjcmFtYmxlICovCisJLyogVXNlIHRocmVlIGJ5dGVzIGZvciBsZW5ndGggZmllbGQgaW4gY2FzZSBsZW5ndGggPiAxMjcgKi8KKwljLT5vcGVyYW5kWzEwXSA9IGxpc3RfbWFuYWdlbWVudDsKKwljLT5vcGVyYW5kWzExXSA9IDB4MDE7IC8qIHBtdF9jbWQ9T0tfZGVzY3JhbWJsZSAqLwogCiAJLyogVFMgcHJvZ3JhbSBtYXAgdGFibGUgKi8KIAotCWMtPm9wZXJhbmRbMTBdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLwotCWMtPm9wZXJhbmRbMTFdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KLQkvKiBjLT5vcGVyYW5kWzEyXSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KLQljLT5vcGVyYW5kWzEzXSA9IG1zZ1sxXTsgLyogUHJvZ3JhbSBudW1iZXIgKi8KLQljLT5vcGVyYW5kWzE0XSA9IG1zZ1syXTsKLQljLT5vcGVyYW5kWzE1XSA9IDB4MDE7IC8qIFZlcnNpb24gbnVtYmVyPTAgKyBjdXJyZW50L25leHQ9MSAqLwotCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogU2VjdGlvbiBudW1iZXI9MCAqLwotCWMtPm9wZXJhbmRbMTddID0gMHgwMDsgLyogTGFzdCBzZWN0aW9uIG51bWJlcj0wICovCi0JYy0+b3BlcmFuZFsxOF0gPSAweDFmOyAvKiBQQ1JfUElEPTFGRkYgKi8KLQljLT5vcGVyYW5kWzE5XSA9IDB4ZmY7Ci0JYy0+b3BlcmFuZFsyMF0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+PiA4KTsgLyogUHJvZ3JhbSBpbmZvIGxlbmd0aCAqLwotCWMtPm9wZXJhbmRbMjFdID0gKHByb2dyYW1faW5mb19sZW5ndGggJiAweGZmKTsKKwljLT5vcGVyYW5kWzEyXSA9IDB4MDI7IC8qIFRhYmxlIGlkPTIgKi8KKwljLT5vcGVyYW5kWzEzXSA9IDB4ODA7IC8qIFNlY3Rpb24gc3ludGF4ICsgbGVuZ3RoICovCisJLyogYy0+b3BlcmFuZFsxNF0gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTI7ICovCisJYy0+b3BlcmFuZFsxNV0gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCisJYy0+b3BlcmFuZFsxNl0gPSBtc2dbMl07CisJYy0+b3BlcmFuZFsxN10gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KKwljLT5vcGVyYW5kWzE4XSA9IDB4MDA7IC8qIFNlY3Rpb24gbnVtYmVyPTAgKi8KKwljLT5vcGVyYW5kWzE5XSA9IDB4MDA7IC8qIExhc3Qgc2VjdGlvbiBudW1iZXI9MCAqLworCWMtPm9wZXJhbmRbMjBdID0gMHgxZjsgLyogUENSX1BJRD0xRkZGICovCisJYy0+b3BlcmFuZFsyMV0gPSAweGZmOworCWMtPm9wZXJhbmRbMjJdID0gKHByb2dyYW1faW5mb19sZW5ndGggPj4gOCk7IC8qIFByb2dyYW0gaW5mbyBsZW5ndGggKi8KKwljLT5vcGVyYW5kWzIzXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoICYgMHhmZik7CiAKIAkvKiBDQSBkZXNjcmlwdG9ycyBhdCBwcm9ncmFtbWUgbGV2ZWwgKi8KIAlyZWFkX3BvcyA9IDY7Ci0Jd3JpdGVfcG9zID0gMjI7CisJd3JpdGVfcG9zID0gMjQ7CiAJaWYgKHByb2dyYW1faW5mb19sZW5ndGggPiAwKSB7CiAJCXBtdF9jbWRfaWQgPSBtc2dbcmVhZF9wb3MrK107CiAJCWlmIChwbXRfY21kX2lkICE9IDEgJiYgcG10X2NtZF9pZCAhPSA0KQpAQCAtMTExMyw4ICsxMTEzLDEwIEBACiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKIAotCWMtPm9wZXJhbmRbN10gPSB3cml0ZV9wb3MgLSA4OwotCWMtPm9wZXJhbmRbMTJdID0gd3JpdGVfcG9zIC0gMTM7CisJYy0+b3BlcmFuZFs3XSA9IDB4ODI7CisJYy0+b3BlcmFuZFs4XSA9ICh3cml0ZV9wb3MgLSAxMCkgPj4gODsKKwljLT5vcGVyYW5kWzldID0gKHdyaXRlX3BvcyAtIDEwKSAmIDB4ZmY7CisJYy0+b3BlcmFuZFsxNF0gPSB3cml0ZV9wb3MgLSAxNTsKIAogCWNyYzMyX2NzdW0gPSBjcmMzMl9iZSgwLCAmYy0+b3BlcmFuZFsxMF0sIGMtPm9wZXJhbmRbMTJdIC0gMSk7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSA0XSA9IChjcmMzMl9jc3VtID4+IDI0KSAmIDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKaW5kZXggN2JhNDM2My4uZTQ5Y2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYwpAQCAtMTQxLDE4ICsxNDEsMTIgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNkZWZpbmUgQUNDRVBURUQgMHg5Ci0KIHN0YXRpYyBpbnQgZmR0dl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OwogCi0JLyogRklYTUU6IGF2Y190dW5lcl9kc2QgbmV2ZXIgcmV0dXJucyBBQ0NFUFRFRC4gQ2hlY2sgc3RhdHVzPyAqLwotCWlmIChhdmNfdHVuZXJfZHNkKGZkdHYsIHBhcmFtcykgIT0gQUNDRVBURUQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UKLQkJcmV0dXJuIDA7IC8qIG5vdCBzdXJlIG9mIHRoaXMuLi4gKi8KKwlyZXR1cm4gYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKaW5kZXggOGEyZTFlNy4uZWVjOWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCkBAIC01MSw2ICs1MSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CitleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG9wZW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKIHsKQEAgLTYzLDcgKzY0LDExIEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggb3BlbikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKK30KICNlbmRpZgotZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDU1ZWY2ZWViLi4wNzgxZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMTM3NSw2ICsxMzc1LDExIEBACiAJaWYgKGRpYjcwMDBwX2lkZW50aWZ5KHN0KSAhPSAwKQogCQlnb3RvIGVycm9yOwogCisJLyogRklYTUU6IG1ha2Ugc3VyZSB0aGUgZGV2LnBhcmVudCBmaWVsZCBpcyBpbml0aWFsaXplZCwgb3IgZWxzZQorCXJlcXVlc3RfZmlybXdhcmUoKSB3aWxsIGhpdCBhbiBPT1BTICh0aGlzIHNob3VsZCBiZSBtb3ZlZCBzb21ld2hlcmUKKwltb3JlIGNvbW1vbikgKi8KKwlzdC0+aTJjX21hc3Rlci5nYXRlZF90dW5lcl9pMmNfYWRhcC5kZXYucGFyZW50ID0gaTJjX2FkYXAtPmRldi5wYXJlbnQ7CisKIAlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjcwMDBQLCBzdC0+aTJjX2FkYXAsIHN0LT5pMmNfYWRkcik7CiAKIAlkaWI3MDAwcF9kZW1vZF9yZXNldChzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKaW5kZXggODFlNjIzYS4uMWZkODMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCmluZGV4IGNiOGEzNTguLjhmODhhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCkBAIC01MjksNiArNTI5LDEyIEBACiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTklDRSB9LAogCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMSksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVOSUNFIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YjkxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGMwMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDkzOWQxZTUuLmE2NzI0MDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAotCWlmICghbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCisJaWYgKG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAogCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KQEAgLTM4MDAsMTEgKzM4MDAsMzQgQEAKIAkJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGl0ZW0tPnZiLmZpZWxkKSAmJgogCQkgICAgKGl0ZW0tPnZiLnF1ZXVlLm5leHQgIT0gJmJ0di0+Y2FwdHVyZSkpIHsKIAkJCWl0ZW0gPSBsaXN0X2VudHJ5KGl0ZW0tPnZiLnF1ZXVlLm5leHQsIHN0cnVjdCBidHR2X2J1ZmZlciwgdmIucXVldWUpOworCQkJLyogTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAtIE9ubHkgY2hlY2sKKwkJCSAqIGFuZCBzZXQgdXAgdGhlIGJvdHRvbSBmaWVsZCBpbiB0aGUgbG9naWMKKwkJCSAqIGJlbG93LiAgRG9uJ3QgZXZlciBkbyB0aGUgdG9wIGZpZWxkLiAgVGhpcworCQkJICogb2YgY291cnNlIG1lYW5zIHRoYXQgaWYgd2Ugc2V0IHVwIHRoZQorCQkJICogYm90dG9tIGZpZWxkIGluIHRoZSBhYm92ZSBjb2RlIHRoYXQgd2UnbGwKKwkJCSAqIGFjdHVhbGx5IHNraXAgYSBmaWVsZC4gIEJ1dCB0aGF0J3MgT0suCisJCQkgKiBIYXZpbmcgcHJvY2Vzc2VkIG9ubHkgYSBzaW5nbGUgYnVmZmVyIHRoaXMKKwkJCSAqIHRpbWUsIHRoZW4gdGhlIG5leHQgdGltZSBhcm91bmQgdGhlIGZpcnN0CisJCQkgKiBhdmFpbGFibGUgYnVmZmVyIHNob3VsZCBiZSBmb3IgYSB0b3AgZmllbGQuCisJCQkgKiBUaGF0IHdpbGwgdGhlbiBjYXVzZSB1cyBoZXJlIHRvIHNldCB1cCBhCisJCQkgKiB0b3AgdGhlbiBhIGJvdHRvbSBmaWVsZCBpbiB0aGUgbm9ybWFsIHdheS4KKwkJCSAqIFRoZSBhbHRlcm5hdGl2ZSB0byB0aGlzIHVuZGVyc3RhbmRpbmcgaXMKKwkJCSAqIHRoYXQgd2Ugc2V0IHVwIHRoZSBzZWNvbmQgYXZhaWxhYmxlIGJ1ZmZlcgorCQkJICogYXMgYSB0b3AgZmllbGQsIGJ1dCB0aGF0J3Mgb3V0IG9mIG9yZGVyCisJCQkgKiBzaW5jZSB0aGlzIGRyaXZlciBhbHdheXMgcHJvY2Vzc2VzIHRoZSB0b3AKKwkJCSAqIGZpZWxkIGZpcnN0IC0gdGhlIGVmZmVjdCB3aWxsIGJlIHRoZSB0d28KKwkJCSAqIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIHdyb25nIG9yZGVyLAorCQkJICogd2l0aCB0aGUgc2Vjb25kIGJ1ZmZlciBhbHNvIGJlaW5nIGRlbGF5ZWQKKwkJCSAqIGJ5IG9uZSBmaWVsZCB0aW1lIChvd2luZyB0byB0aGUgZmlmbyBuYXR1cmUKKwkJCSAqIG9mIHZpZGVvYnVmKS4gIFdvcnNlIHN0aWxsLCB3ZSdsbCBiZSBzdHVjaworCQkJICogZG9pbmcgZmllbGRzIG91dCBvZiBvcmRlciBub3cgZXZlcnkgdGltZQorCQkJICogdW50aWwgc29tZXRoaW5nIGVsc2UgY2F1c2VzIGEgZmllbGQgdG8gYmUKKwkJCSAqIGRyb3BwZWQuICBCeSBlZmZlY3RpdmVseSBmb3JjaW5nIGEgZmllbGQgdG8KKwkJCSAqIGRyb3AgdGhpcyB3YXkgdGhlbiB3ZSBhbHdheXMgZ2V0IGJhY2sgaW50bworCQkJICogc3luYyB3aXRoaW4gYSBzaW5nbGUgZnJhbWUgdGltZS4gIChPdXQgb2YKKwkJCSAqIG9yZGVyIGZpZWxkcyBjYW4gc2NyZXcgdXAgZGVpbnRlcmxhY2luZworCQkJICogYWxnb3JpdGhtcy4pICovCiAJCQlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoaXRlbS0+dmIuZmllbGQpKSB7Ci0JCQkJaWYgKE5VTEwgPT0gc2V0LT50b3AgJiYKLQkJCQkgICAgVjRMMl9GSUVMRF9UT1AgPT0gaXRlbS0+dmIuZmllbGQpIHsKLQkJCQkJc2V0LT50b3AgPSBpdGVtOwotCQkJCX0KIAkJCQlpZiAoTlVMTCA9PSBzZXQtPmJvdHRvbSAmJgogCQkJCSAgICBWNEwyX0ZJRUxEX0JPVFRPTSA9PSBpdGVtLT52Yi5maWVsZCkgewogCQkJCQlzZXQtPmJvdHRvbSA9IGl0ZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDdiZDhhNzAuLmFjOTQ3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC0zODMsNiArMzgzLDExIEBACiAKIHN0YXRpYyBpbnQgc25kX2VtMjh4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogeworCXN0cnVjdCBlbTI4eHggKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRldi0+YWRldi5od3B0cl9kb25lX2NhcHR1cmUgPSAwOworCWRldi0+YWRldi5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IDU5NDAwZTguLmEyN2FmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMzUsMTIgKzM1LDI1IEBACiAgICAgY29uc3QKIAlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzNWs0YWFfdmZsaXBfZG1pX3RhYmxlW10gPSB7CiAJeworCQkuaWRlbnQgPSAiQlJVTkVJTklUIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRVJTSU9OLCAiMDAwMzBEMDAwMDAwMDAwMSIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGEgMjUyOCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFhhIDI1MjgiKQogCQl9CiAJfSwgeworCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhpIDI1MjgiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYaSAyNTI4IikKKwkJfQorCX0sIHsKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTUwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKQEAgLTU3LDYgKzcwLDEzIEBACiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCisJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjEyLzAyLzIwMDgiKQorCQl9CisJfSwgeworCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKIAkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMjYvMjAwNyIpCiAJCX0KIAl9LCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggMTQwYzhmMy4uZjgzMjhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWRhdGFbM10gPSAweDJjOwkJCSAgIC8qIHJlZyAyLCBIIHNpemUvOCAqLwogCQlkYXRhWzRdID0gMHg0ODsJCQkgICAvKiByZWcgMywgViBzaXplLzQgKi8KIAkJZGF0YVs2XSA9IDB4MDY7CQkJICAgLyogcmVnIDUsIEggc3RhcnQgICovCi0JCWRhdGFbOF0gPSAweDA2ICsgc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCisJCWRhdGFbOF0gPSAweDA2IC0gc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCiAJCWJyZWFrOwogCX0KIAllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IDJmNmUxMzUuLmE1YzE5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTI5MTksNyArMjkxOSw3IEBACiAJLyogQSBmYWxzZSBwb3NpdGl2ZSBoZXJlIGlzIGxpa2VseSwgdW50aWwgT1ZUIGdpdmVzIG1lCiAJICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KIAlpZiAoKCEoZGF0YVswXSB8IGRhdGFbMV0gfCBkYXRhWzJdIHwgZGF0YVszXSB8IGRhdGFbNV0pKSAmJiBkYXRhWzZdKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CiAJCXNkLT5wYWNrZXRfbnIgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDY1NDg5ZDYuLmJmYWU2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMzk0LDcgKzM5NCw4IEBACiAJCQlQREVCVUcoRF9QQUNLLCAiRW5kIG9mIGZyYW1lIGRldGVjdGVkIik7CiAKIAkJCS8qIENvbXBsZXRlIHRoZSBsYXN0IGZyYW1lIChpZiBhbnkpICovCi0JCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLCBkYXRhLCAwKTsKIAogCQkJaWYgKGNodW5rX2xlbikKIAkJCQlQREVCVUcoRF9FUlIsICJDaHVuayBsZW5ndGggaXMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCA2OTUyZTk2Li41MWI2ODNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CkBAIC0xNDMyLDcgKzE0MzMsOSBAQAogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCiAJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IGNhbV9mbXQtPmZvdXJjYzsKLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmNhbV9mKTsKKwljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4LT5waXhlbGZvcm1hdDsKKwkqcGl4ID0gY2FtX2YuZm10LnBpeDsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggOWUzMjYyYy4uMmMwYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtNTk4LDExICs1OTgsNiBAQAogCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LAogCQkJIHN0cnVjdCBzMjI1NV9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkgewotCQkvKiBubyBvbmUgYWN0aXZlICovCi0JCXJjID0gLTE7Ci0JCWdvdG8gdW5sb2NrOwotCX0KIAlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKIAlkcHJpbnRrKDEwMCwgIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA3MTE0NWJmLi4wOTAxMzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTM0MjgsNiArMzQyOCw3IEBACiAJCS50dW5lcl9jb25maWcgICA9IDMsCiAJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS50c190eXBlCT0gU0FBNzEzNF9NUEVHX1RTX1NFUklBTCwKKwkJLnRzX2ZvcmNlX3ZhbCAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwODAwMTAwLCAvKiBHUElPIDIxIGlzIGFuIElOUFVUICovCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCAzZmE2NTIyLi4wMzQ4OGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTI2MiwxMSArMjYyLDEzIEBACiAJc3dpdGNoIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c190eXBlKSB7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfUEFSQUxMRUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfTVBFR19UU19TRVJJQUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweGQ4KTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAweGJjKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDZlZTNlOWIuLmY4Njk3ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzYwLDYgKzM2MCw3IEBACiAJZW51bSBzYWE3MTM0X21wZWdfdHlwZSAgbXBlZzsKIAllbnVtIHNhYTcxMzRfbXBlZ190c190eXBlIHRzX3R5cGU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdmlkX3BvcnRfb3B0czsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICB0c19mb3JjZV92YWw6MTsKIH07CiAKICNkZWZpbmUgY2FyZF9oYXNfcmFkaW8oZGV2KSAgIChOVUxMICE9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvLm5hbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCmluZGV4IGM0NTk2NmUuLjljMWQzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogCS8qIFByZXBhcmUgc29tZSBiYXNpYyBjb21tYW5kL3Jlc3BvbnNlIHN0cnVjdHVyZXMgKi8KIAltZW1zZXQoJmNvbW1hbmRfdCwgMCwgc2l6ZW9mKGNvbW1hbmRfdCkpOwotCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKCZyZXNwb25zZV90KSk7CisJbWVtc2V0KCZyZXNwb25zZV90LCAwLCBzaXplb2YocmVzcG9uc2VfdCkpOwogCXBjb21tYW5kX3QgPSAmY29tbWFuZF90OwogCXByZXNwb25zZV90ID0gJnJlc3BvbnNlX3Q7CiAJY29tbWFuZF90LmlkID0gaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggNjVhYzQ3NC4uMmY3OGI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtMTE3Myw4ICsxMTczLDggQEAKIAl3aWR0aF9pbiA9IHNjYWxlX3VwKGNhbS0+Y2V1X3JlY3Qud2lkdGgsICpzY2FsZV9oKTsKIAloZWlnaHRfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LmhlaWdodCwgKnNjYWxlX3YpOwogCi0JKnNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC53aWR0aCwgaWNkLT51c2VyX3dpZHRoKTsKLQkqc2NhbGVfdiA9IGNhbGNfZ2VuZXJpY19zY2FsZShjYW0tPmNldV9yZWN0LmhlaWdodCwgaWNkLT51c2VyX2hlaWdodCk7CisJKnNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUod2lkdGhfaW4sIGljZC0+dXNlcl93aWR0aCk7CisJKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoaGVpZ2h0X2luLCBpY2QtPnVzZXJfaGVpZ2h0KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA1OWFhN2EzLi4zNmU2MTdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTExNjAsMTMgKzExNjAsMTUgQEAKIAkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewogCQkJLyogVGhlIGJ1cy0+cmVtb3ZlIHdpbGwgYmUgY2FsbGVkICovCiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmaWNkLT5kZXYpOwotCQkJLyogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCi0JCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkgKi8KLQkJCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7Ci0KLQkJCS8qIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCi0JCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCIgKi8KLQkJCW1lbXNldCgmaWNkLT5kZXYua29iaiwgMCwgc2l6ZW9mKGljZC0+ZGV2LmtvYmopKTsKKwkJCS8qCisJCQkgKiBOb3QgYmVmb3JlIGRldmljZV91bnJlZ2lzdGVyKCksIC5yZW1vdmUKKwkJCSAqIG5lZWRzIHBhcmVudCB0byBjYWxsIGljaS0+b3BzLT5yZW1vdmUoKS4KKwkJCSAqIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCisJCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCwiIHNpbmNlIDIuNi4zMgorCQkJICogdGhpcyBpcyBhbHNvIG5lZWRlZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9mIHRoZQorCQkJICogZGV2aWNlIHByaXZhdGUgZGF0YS4KKwkJCSAqLworCQkJbWVtc2V0KCZpY2QtPmRldiwgMCwgc2l6ZW9mKGljZC0+ZGV2KSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGMzMjI1YTUuLjFiODk3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJX19zMzIgdmFsdWUsIF9fdTggKmRhdGEpCiB7CiAJZGF0YVswXSA9IHZhbHVlID09IDAgPyAwIDogKHZhbHVlID4gMCkgPyAxIDogMHhmZjsKLQlkYXRhWzJdID0gbWluKGFicyh2YWx1ZSksIDB4ZmYpOworCWRhdGFbMl0gPSBtaW4oKGludClhYnModmFsdWUpLCAweGZmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nIHV2Y19jdHJsX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IGY5NjBlOGUuLmE2ZTQxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC05MCw3ICs5MCw4IEBACiAJCWN0cmwtPmR3TWF4VmlkZW9GcmFtZVNpemUgPQogCQkJZnJhbWUtPmR3TWF4VmlkZW9GcmFtZUJ1ZmZlclNpemU7CiAKLQlpZiAoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCisJaWYgKCEoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKSAmJgorCSAgICBzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKIAkgICAgc3RyZWFtLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKIAkJdTMyIGludGVydmFsOwogCQl1MzIgYmFuZHdpZHRoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCBlODMyZTk3Li5hMWM0N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtNzk1LDcgKzc5NSw3IEBACiAJCQl0d2wtPmNsaWVudCA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLAogCQkJCQl0d2wtPmFkZHJlc3MpOwogCQkJaWYgKCF0d2wtPmNsaWVudCkgewotCQkJCWRldl9lcnIoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKIAkJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwppbmRleCBkMzAxNWRmLi5hYzA1NmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCkBAIC01MDcsNiArNTA3LDggQEAKIHsKIAlpbnQgaSwgcmV0OwogCisJbXV0ZXhfaW5pdCgmd204MzF4LT5pcnFfbG9jayk7CisKIAlpZiAoIWlycSkgewogCQlkZXZfd2Fybih3bTgzMXgtPmRldiwKIAkJCSAiTm8gaW50ZXJydXB0IHNwZWNpZmllZCAtIGZ1bmN0aW9uYWxpdHkgbGltaXRlZFxuIik7CkBAIC01MjEsNyArNTIzLDYgQEAKIAl9CiAKIAl3bTgzMXgtPmlycSA9IGlycTsKLQltdXRleF9pbml0KCZ3bTgzMXgtPmlycV9sb2NrKTsKIAlJTklUX1dPUksoJndtODMxeC0+aXJxX3dvcmssIHdtODMxeF9pcnFfd29ya2VyKTsKIAogCS8qIE1hc2sgdGhlIGluZGl2aWR1YWwgaW50ZXJydXB0IHNvdXJjZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKaW5kZXggY2NkNDQwOC4uM2YyMzc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKQEAgLTE2MSwxNCArMTYxLDE1IEBACiBzdGF0aWMgc3NpemVfdCBvcHRpb25zX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JY2hhciBidWZbODBdOworCWNoYXIgYnVmWzIwXTsKIAotCWlmIChzdHJuY3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIHNpemVvZihidWYpIC0gMSkgPCAwKQorCWlmIChjb3VudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlidWZbY291bnQgLSAxXSA9ICdcMCc7Ci0JaWYgKCFzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKLQkJZ3J1X29wdGlvbnMgPSB2YWw7CisJYnVmW2NvdW50XSA9ICdcMCc7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJmdydV9vcHRpb25zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKaW5kZXggZTU1NmQ0Mi4uNjM5MjRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwpAQCAtNzIsNyArNzIsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX21jaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwppbmRleCBlN2EzMzFkLi5iOGZkN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwpAQCAtMTUyOSw2ICsxNTI5LDcgQEAKIAkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiAKIAltbWNfb21hcF9mY2xrX2VuYWJsZShob3N0LCAwKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CiAJY2xrX3B1dChob3N0LT5pY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNDQ4N2NjMC4uMGFlY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIwMTMsNyArMjAxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwX2hzbW1jX2RyaXZlciwgb21hcF9oc21tY19wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA4NDFlMDg1Li4xNGJlMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC00ODYsNiArNDg2LDcgQEAKIAogY29uZmlnIE1URF9HUElPX0FERFIKIAl0cmlzdGF0ZSAiR1BJTy1hc3Npc3RlZCBGbGFzaCBDaGlwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8gfHwgR1BJT0xJQgogCWRlcGVuZHMgb24gTVREX0NPTVBMRVhfTUFQUElOR1MKIAlzZWxlY3QgTVREX1BBUlRJVElPTlMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCAxZDVjZjg2Li5hZTJmNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTU4LDQgKzU4LDYgQEAKIG9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfUkJUWDQ5MzkpCSs9IHJidHg0OTM5LWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfVk1VKQkJKz0gdm11LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfR1BJT19BRERSKQkrPSBncGlvLWFkZHItZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKaW5kZXggNDRlZjlhNC4uMWFkNWNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCkBAIC0xMyw3ICsxMyw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CkBAIC0yMyw5ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KICNkZWZpbmUgcHJfZGV2aW5pdChmbXQsIGFyZ3MuLi4pICh7IHN0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBjaGFyIF9fZm10W10gPSBmbXQ7IHByaW50ayhfX2ZtdCwgIyMgYXJncyk7IH0pCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImdwaW8tYWRkci1mbGFzaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDIyMTEzODYuLjI5NTdjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtNzYxLDYgKzc2MSw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCkBAIC03NzcsNiArNzc4LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZyBldmVuIHdoZW4gT09CIGlzbid0IHVzZWQuCiAgKi8KQEAgLTgxOCw2ICs4MjAsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJCXVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCkBAIC05MzksNiArOTQyLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycyB3aGljaCBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KQEAgLTk4Myw2ICs5ODcsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KICAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KQEAgLTEwMzEsNiArMTAzNiw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgogICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGUxZjdkMGEuLjE0Y2VjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlICJ1YmkuaCIKIAogLyogTWF4aW11bSBsZW5ndGggb2YgdGhlICdtdGQ9JyBwYXJhbWV0ZXIgKi8KQEAgLTEyNTcsNyArMTI1OCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXN1bHQ7CiAKIAlyZXN1bHQgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmRwLCAwKTsKLQlpZiAoc3RyID09IGVuZHAgfHwgcmVzdWx0IDwgMCkgeworCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPj0gSU5UX01BWCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVCSSBlcnJvcjogaW5jb3JyZWN0IGJ5dGVzIGNvdW50OiBcIiVzXCJcbiIsCiAJCSAgICAgICBzdHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGU3MTYxYWQuLjkwYWY2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNzk0LDE2ICs3OTQsMTUgQEAKIAkJICogbnVtYmVyLgogCQkgKi8KIAkJaW1hZ2Vfc2VxID0gYmUzMl90b19jcHUoZWNoLT5pbWFnZV9zZXEpOwotCQlpZiAoIXNpLT5pbWFnZV9zZXFfc2V0KSB7CisJCWlmICghdWJpLT5pbWFnZV9zZXEgJiYgaW1hZ2Vfc2VxKQogCQkJdWJpLT5pbWFnZV9zZXEgPSBpbWFnZV9zZXE7Ci0JCQlzaS0+aW1hZ2Vfc2VxX3NldCA9IDE7Ci0JCX0gZWxzZSBpZiAodWJpLT5pbWFnZV9zZXEgJiYgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CisJCWlmICh1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEgJiYKKwkJICAgIHViaS0+aW1hZ2Vfc2VxICE9IGltYWdlX3NlcSkgewogCQkJdWJpX2VycigiYmFkIGltYWdlIHNlcXVlbmNlIG51bWJlciAlZCBpbiBQRUIgJWQsICIKIAkJCQkiZXhwZWN0ZWQgJWQiLCBpbWFnZV9zZXEsIHBudW0sIHViaS0+aW1hZ2Vfc2VxKTsKIAkJCXViaV9kYmdfZHVtcF9lY19oZHIoZWNoKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0KIAl9CiAKIAkvKiBPSywgd2UndmUgZG9uZSB3aXRoIHRoZSBFQyBoZWFkZXIsIGxldCdzIGxvb2sgYXQgdGhlIFZJRCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmggYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCmluZGV4IGJhYjMxNjkuLmZmMTc5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaApAQCAtMTAzLDcgKzEwMyw2IEBACiAgKiBAZWNfc3VtOiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBlY19jb3VudDogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAY29ycl9jb3VudDogY291bnQgb2YgY29ycnVwdGVkIFBFQnMKLSAqIEBpbWFnZV9zZXFfc2V0OiBpbmRpY2F0ZXMgQHViaS0+aW1hZ2Vfc2VxIGlzIGtub3duCiAgKgogICogVGhpcyBkYXRhIHN0cnVjdHVyZSBjb250YWlucyB0aGUgcmVzdWx0IG9mIHNjYW5uaW5nIGFuZCBtYXkgYmUgdXNlZCBieSBvdGhlcgogICogVUJJIHN1Yi1zeXN0ZW1zIHRvIGJ1aWxkIGZpbmFsIFVCSSBkYXRhIHN0cnVjdHVyZXMsIGZ1cnRoZXIgZXJyb3ItcmVjb3ZlcnkKQEAgLTEyNyw3ICsxMjYsNiBAQAogCXVpbnQ2NF90IGVjX3N1bTsKIAlpbnQgZWNfY291bnQ7CiAJaW50IGNvcnJfY291bnQ7Ci0JaW50IGltYWdlX3NlcV9zZXQ7CiB9OwogCiBzdHJ1Y3QgdWJpX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDcxMjc3NjAuLmUxOWNhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTc0MSw2ICsxNzQxLDcgQEAKIGNvbmZpZyBLUzg4NTFfTUxMCiAJdHJpc3RhdGUgIk1pY3JlbCBLUzg4NTEgTUxMIgogCWRlcGVuZHMgb24gSEFTX0lPTUVNCisJc2VsZWN0IE1JSQogCWhlbHAKIAkgIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIGZvciBNaWNyZWwgS1M4ODUxIEFkZHJlc3MvZGF0YSBidXMKIAkgIG11bHRpcGxleGVkIG5ldHdvcmsgY2hpcC4KQEAgLTI0ODIsNiArMjQ4Myw4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzNmdtYWMuCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWciCisKIGVuZGlmICMgTkVUREVWXzEwMDAKIAogIwpAQCAtMzIzMCw0ICszMjMzLDEyIEBACiAJICBUaGlzIGlzIHRoZSB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVyIGZvciB2aXJ0aW8uICBJdCBjYW4gYmUgdXNlZCB3aXRoCiAgICAgICAgICAgbGd1ZXN0IG9yIFFFTVUgYmFzZWQgVk1NcyAobGlrZSBLVk0gb3IgWGVuKS4gIFNheSBZIG9yIE0uCiAKK2NvbmZpZyBWTVhORVQzCisgICAgICAgdHJpc3RhdGUgIlZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlciIKKyAgICAgICBkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgSU5FVAorICAgICAgIGhlbHAKKyAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFZNd2FyZSdzIHZteG5ldDMgdmlydHVhbCBldGhlcm5ldCBOSUMuCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bXhuZXQzLgorCiBlbmRpZiAjIE5FVERFVklDRVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggZDg2NmI4Yy4uMjQ2MzIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTIsNiArMiwxMCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IG5ldHdvcmsgKGV0aGVyY2FyZCkgZGV2aWNlIGRyaXZlcnMuCiAjCiAKK29iai0kKENPTkZJR19NSUkpICs9IG1paS5vCitvYmotJChDT05GSUdfTURJTykgKz0gbWRpby5vCitvYmotJChDT05GSUdfUEhZTElCKSArPSBwaHkvCisKIG9iai0kKENPTkZJR19USV9EQVZJTkNJX0VNQUMpICs9IGRhdmluY2lfZW1hYy5vCiAKIG9iai0kKENPTkZJR19FMTAwMCkgKz0gZTEwMDAvCkBAIC0yNiw2ICszMCw3IEBACiBvYmotJChDT05GSUdfRU5JQykgKz0gZW5pYy8KIG9iai0kKENPTkZJR19KTUUpICs9IGptZS5vCiBvYmotJChDT05GSUdfQkUyTkVUKSArPSBiZW5ldC8KK29iai0kKENPTkZJR19WTVhORVQzKSArPSB2bXhuZXQzLwogCiBnaWFuZmFyX2RyaXZlci1vYmpzIDo9IGdpYW5mYXIubyBcCiAJCWdpYW5mYXJfZXRodG9vbC5vIFwKQEAgLTk1LDE1ICsxMDAsMTIgQEAKIG9iai0kKENPTkZJR19BREFQVEVDX1NUQVJGSVJFKSArPSBzdGFyZmlyZS5vCiBvYmotJChDT05GSUdfUklPTkVUKSArPSByaW9uZXQubwogb2JqLSQoQ09ORklHX1NIX0VUSCkgKz0gc2hfZXRoLm8KK29iai0kKENPTkZJR19TVE1NQUNfRVRIKSArPSBzdG1tYWMvCiAKICMKICMgZW5kIGxpbmsgb3JkZXIgc2VjdGlvbgogIwogCi1vYmotJChDT05GSUdfTUlJKSArPSBtaWkubwotb2JqLSQoQ09ORklHX01ESU8pICs9IG1kaW8ubwotb2JqLSQoQ09ORklHX1BIWUxJQikgKz0gcGh5LwotCiBvYmotJChDT05GSUdfU1VOREFOQ0UpICs9IHN1bmRhbmNlLm8KIG9iai0kKENPTkZJR19IQU1BQ0hJKSArPSBoYW1hY2hpLm8KIG9iai0kKENPTkZJR19ORVQpICs9IFNwYWNlLm8gbG9vcGJhY2subwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCA1ZjBiMDVjLi5kODJhOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtMTIwOSw3ICsxMjA5LDggQEAKIAltZW1zZXQoYXAtPmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgYWNlX2luZm8pKTsKIAltZW1zZXQoYXAtPnNrYiwgMCwgc2l6ZW9mKHN0cnVjdCBhY2Vfc2tiKSk7CiAKLQlpZiAoYWNlX2xvYWRfZmlybXdhcmUoZGV2KSkKKwllY29kZSA9IGFjZV9sb2FkX2Zpcm13YXJlKGRldik7CisJaWYgKGVjb2RlKQogCQlnb3RvIGluaXRfZXJyb3I7CiAKIAlhcC0+ZndfcnVubmluZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggMDRmNjNjNy4uY2U2ZjFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtMzQsNiArMzQsNyBAQAogICoKICAqCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IGE4MGRhMGUuLjNiNzlhMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtMjU5LDYgKzI1OSw4IEBACiAJdTMyIHBvcnRfbnVtOwogCWJvb2wgcHJvbWlzY3VvdXM7CiAJdTMyIGNhcDsKKwl1MzIgcnhfZmM7CQkvKiBSeCBmbG93IGNvbnRyb2wgKi8KKwl1MzIgdHhfZmM7CQkvKiBUeCBmbG93IGNvbnRyb2wgKi8KIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggODk4NzZhZC4uMjhhMGVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMjQzLDE1ICsyNDMsMjYgQEAKIAogaW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXUxNiBzdGFnZSwgZXJyb3I7CisJdTE2IHN0YWdlOworCWludCBzdGF0dXMsIHRpbWVvdXQgPSAwOwogCi0JZXJyb3IgPSBiZV9QT1NUX3N0YWdlX2dldChhZGFwdGVyLCAmc3RhZ2UpOwotCWlmIChlcnJvciB8fCBzdGFnZSAhPSBQT1NUX1NUQUdFX0FSTUZXX1JEWSkgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQT1NUIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWRvIHsKKwkJc3RhdHVzID0gYmVfUE9TVF9zdGFnZV9nZXQoYWRhcHRlciwgJnN0YWdlKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCBlcnJvcjsgc3RhZ2U9MHgleFxuIiwKKwkJCQlzdGFnZSk7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSBpZiAoc3RhZ2UgIT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpIHsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZV90aW1lb3V0KDIgKiBIWik7CisJCQl0aW1lb3V0ICs9IDI7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gd2hpbGUgKHRpbWVvdXQgPCAyMCk7CiAKLQlyZXR1cm4gMDsKKwlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQT1NUIHRpbWVvdXQ7IHN0YWdlPTB4JXhcbiIsIHN0YWdlKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZW1iZWRkZWRfcGF5bG9hZChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQpAQCAtNzI5LDggKzc0MCw4IEBACiAvKiBDcmVhdGUgYW4gcnggZmlsdGVyaW5nIHBvbGljeSBjb25maWd1cmF0aW9uIG9uIGFuIGkvZgogICogVXNlcyBtYm94CiAgKi8KLWludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZmxhZ3MsIHU4ICptYWMsCi0JCWJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKQoraW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjYXBfZmxhZ3MsIHUzMiBlbl9mbGFncywKKwkJdTggKm1hYywgYm9vbCBwbWFjX2ludmFsaWQsIHUzMiAqaWZfaGFuZGxlLCB1MzIgKnBtYWNfaWQpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9pZl9jcmVhdGUgKnJlcTsKQEAgLTc0Niw4ICs3NTcsOCBAQAogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAogCQlPUENPREVfQ09NTU9OX05UV0tfSU5URVJGQUNFX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKIAotCXJlcS0+Y2FwYWJpbGl0eV9mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKLQlyZXEtPmVuYWJsZV9mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwlyZXEtPmNhcGFiaWxpdHlfZmxhZ3MgPSBjcHVfdG9fbGUzMihjYXBfZmxhZ3MpOworCXJlcS0+ZW5hYmxlX2ZsYWdzID0gY3B1X3RvX2xlMzIoZW5fZmxhZ3MpOwogCXJlcS0+cG1hY19pbnZhbGlkID0gcG1hY19pbnZhbGlkOwogCWlmICghcG1hY19pbnZhbGlkKQogCQltZW1jcHkocmVxLT5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKaW5kZXggYTg2ZjkxNy4uZTVmOTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaApAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX01BU0sJCTB4RkZGRgogI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX1NISUZUCQkwCS8qIGJpdHMgMCAtIDE1ICovCiAjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLCQkweEZGRkYKLSNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX1NISUZUCQkwCS8qIGJpdHMgMCAtIDE1ICovCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9TSElGVAkJMTYJLyogYml0cyAxNiAtIDMxICovCiAKIHN0cnVjdCBiZV9tY2NfY29tcGwgewogCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAwICovCkBAIC03MjAsOCArNzIwLDkgQEAKIGV4dGVybiBpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCiAJCQl1MzIgaWZfaWQsIHUzMiAqcG1hY19pZCk7CiBleHRlcm4gaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLCB1MzIgcG1hY19pZCk7Ci1leHRlcm4gaW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9mbGFncywgdTggKm1hYywKLQkJCWJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKTsKK2V4dGVybiBpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGNhcF9mbGFncywKKwkJCXUzMiBlbl9mbGFncywgdTggKm1hYywgYm9vbCBwbWFjX2ludmFsaWQsCisJCQl1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKTsKIGV4dGVybiBpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9oYW5kbGUpOwogZXh0ZXJuIGludCBiZV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IGNkYTViZjIuLmYwZmQ5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTMyMywxMCArMzIzLDEyIEBACiAKIAlpZiAoZWNtZC0+YXV0b25lZyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlhZGFwdGVyLT50eF9mYyA9IGVjbWQtPnR4X3BhdXNlOworCWFkYXB0ZXItPnJ4X2ZjID0gZWNtZC0+cnhfcGF1c2U7CiAKLQlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCBlY21kLT50eF9wYXVzZSwKLQkJCWVjbWQtPnJ4X3BhdXNlKTsKLQlpZiAoIXN0YXR1cykKKwlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLAorCQkJCQlhZGFwdGVyLT50eF9mYywgYWRhcHRlci0+cnhfZmMpOworCWlmIChzdGF0dXMpCiAJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQYXVzZSBwYXJhbSBzZXQgZmFpbGVkLlxuIik7CiAKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDZkNWU4MWYuLjg3NmIzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTE2MTAsMjkgKzE2MTAsNDIgQEAKIAogCXN0YXR1cyA9IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShhZGFwdGVyLCAmbGlua191cCk7CiAJaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byByZXRfc3RzOwogCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyLCBsaW5rX3VwKTsKIAorCXN0YXR1cyA9IGJlX3ZpZF9jb25maWcoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byByZXRfc3RzOworCisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwKKwkJCQkJYWRhcHRlci0+dHhfZmMsIGFkYXB0ZXItPnJ4X2ZjKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHJldF9zdHM7CisKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci0JcmV0dXJuIDA7CityZXRfc3RzOgorCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgYmVfc2V0dXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1MzIgaWZfZmxhZ3M7CisJdTMyIGNhcF9mbGFncywgZW5fZmxhZ3M7CiAJaW50IHN0YXR1czsKIAotCWlmX2ZsYWdzID0gQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwgQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMgfAotCQlCRV9JRl9GTEFHU19NQ0FTVF9QUk9NSVNDVU9VUyB8IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwKLQkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKLQlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGFkYXB0ZXIsIGlmX2ZsYWdzLCBuZXRkZXYtPmRldl9hZGRyLAotCQkJZmFsc2UvKiBwbWFjX2ludmFsaWQgKi8sICZhZGFwdGVyLT5pZl9oYW5kbGUsCi0JCQkmYWRhcHRlci0+cG1hY19pZCk7CisJY2FwX2ZsYWdzID0gQkVfSUZfRkxBR1NfVU5UQUdHRUQgfCBCRV9JRl9GTEFHU19CUk9BRENBU1QgfAorCQkJQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMgfAorCQkJQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMgfAorCQkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKKwllbl9mbGFncyA9IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwgQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwKKwkJCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlM7CisKKwlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGFkYXB0ZXIsIGNhcF9mbGFncywgZW5fZmxhZ3MsCisJCQluZXRkZXYtPmRldl9hZGRyLCBmYWxzZS8qIHBtYWNfaW52YWxpZCAqLywKKwkJCSZhZGFwdGVyLT5pZl9oYW5kbGUsICZhZGFwdGVyLT5wbWFjX2lkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gZG9fbm9uZTsKIAotCiAJc3RhdHVzID0gYmVfdHhfcXVldWVzX2NyZWF0ZShhZGFwdGVyKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gaWZfZGVzdHJveTsKQEAgLTE2NDUsMTcgKzE2NTgsOCBAQAogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byByeF9xc19kZXN0cm95OwogCi0Jc3RhdHVzID0gYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gbWNjcXNfZGVzdHJveTsKLQotCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKGFkYXB0ZXIsIHRydWUsIHRydWUpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBtY2Nxc19kZXN0cm95OwogCXJldHVybiAwOwogCi1tY2Nxc19kZXN0cm95OgotCWJlX21jY19xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKIHJ4X3FzX2Rlc3Ryb3k6CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiB0eF9xc19kZXN0cm95OgpAQCAtMTkwNiw2ICsxOTEwLDEwIEBACiAKIAlhZGFwdGVyLT5yeF9jc3VtID0gdHJ1ZTsKIAorCS8qIERlZmF1bHQgc2V0dGluZ3MgZm9yIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKi8KKwlhZGFwdGVyLT5yeF9mYyA9IHRydWU7CisJYWRhcHRlci0+dHhfZmMgPSB0cnVlOworCiAJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShuZXRkZXYsIDY1NTM1KTsKIAogCUJFX1NFVF9ORVRERVZfT1BTKG5ldGRldiwgJmJlX25ldGRldl9vcHMpOwpAQCAtMjA1NSw2ICsyMDYzLDEwIEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAorCXN0YXR1cyA9IGJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJc3RhdHVzID0gYmVfY21kX2dldF9md192ZXIoYWRhcHRlciwgYWRhcHRlci0+ZndfdmVyKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMjEwOCwxMCArMjEyMCw2IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBmcmVlX25ldGRldjsKIAotCXN0YXR1cyA9IGJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGN0cmxfY2xlYW47Ci0KIAlzdGF0dXMgPSBiZV9zdGF0c19pbml0KGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gY3RybF9jbGVhbjsKQEAgLTIxNjgsNiArMjE3Niw3IEBACiAJCWJlX2Nsb3NlKG5ldGRldik7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJfQorCWJlX2NtZF9nZXRfZmxvd19jb250cm9sKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9mYywgJmFkYXB0ZXItPnJ4X2ZjKTsKIAliZV9jbGVhcihhZGFwdGVyKTsKIAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDZjN2Y3OTUuLmE0ZDgzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTM2MSw5ICszNjEsMTIgQEAKICNkZWZpbmUgQk5YMl9MMkNUWF9DVFhfVFlQRV9DVFhfQkRfQ0hOX1RZUEVfVkFMVUUJICgxPDwyOCkKIAogI2RlZmluZSBCTlgyX0wyQ1RYX0hPU1RfQkRJRFgJCQkJMHgwMDAwMDAwNAotI2RlZmluZSBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNX1NISUZUCQkJIDE2Ci0jZGVmaW5lIEJOWDJfTDJDVFhfU1RBVFVTQl9OVU0oc2JfaWQpCQkJIFwKLQkoKChzYl9pZCkgPiAwKSA/ICgoKHNiX2lkKSArIDcpIDw8IEJOWDJfTDJDVFhfU1RBVFVTQl9OVU1fU0hJRlQpIDogMCkKKyNkZWZpbmUgQk5YMl9MMkNUWF9MNV9TVEFUVVNCX05VTV9TSElGVAkJCSAxNgorI2RlZmluZSBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNX1NISUZUCQkJIDI0CisjZGVmaW5lIEJOWDJfTDJDVFhfTDVfU1RBVFVTQl9OVU0oc2JfaWQpCQlcCisJKCgoc2JfaWQpID4gMCkgPyAoKChzYl9pZCkgKyA3KSA8PCBCTlgyX0wyQ1RYX0w1X1NUQVRVU0JfTlVNX1NISUZUKSA6IDApCisjZGVmaW5lIEJOWDJfTDJDVFhfTDJfU1RBVFVTQl9OVU0oc2JfaWQpCQlcCisJKCgoc2JfaWQpID4gMCkgPyAoKChzYl9pZCkgKyA3KSA8PCBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNX1NISUZUKSA6IDApCiAjZGVmaW5lIEJOWDJfTDJDVFhfSE9TVF9CU0VRCQkJCTB4MDAwMDAwMDgKICNkZWZpbmUgQk5YMl9MMkNUWF9OWF9CU0VRCQkJCTB4MDAwMDAwMGMKICNkZWZpbmUgQk5YMl9MMkNUWF9OWF9CREhBRERSX0hJCQkJMHgwMDAwMDAxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggNjljNWIxNS4uNDBmYjVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LCBpbnQgcmVwb3J0aW5nKQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LT5uZXRkZXZfb3BzOwotCXN0YXRpYyBpbnQgKCppb2N0bCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCk7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOwogCXN0cnVjdCBpZnJlcSBpZnI7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWk7CiAKQEAgLTM2NjUsMTAgKzM2NjUsMTAgQEAKIAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewogCQlyZXR1cm4gKChudG9obChpcGgtPnNhZGRyIF4gaXBoLT5kYWRkcikgJiAweGZmZmYpIF4KLQkJCShkYXRhLT5oX2Rlc3RbNV0gXiBib25kX2Rldi0+ZGV2X2FkZHJbNV0pKSAlIGNvdW50OworCQkJKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSkgJSBjb3VudDsKIAl9CiAKLQlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGJvbmRfZGV2LT5kZXZfYWRkcls1XSkgJSBjb3VudDsKKwlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSAlIGNvdW50OwogfQogCiAvKgpAQCAtMzY5NSw3ICszNjk1LDcgQEAKIAogCX0KIAotCXJldHVybiAoZGF0YS0+aF9kZXN0WzVdIF4gYm9uZF9kZXYtPmRldl9hZGRyWzVdKSAlIGNvdW50OworCXJldHVybiAoZGF0YS0+aF9kZXN0WzVdIF4gZGF0YS0+aF9zb3VyY2VbNV0pICUgY291bnQ7CiB9CiAKIC8qCkBAIC0zNzA2LDcgKzM3MDYsNyBAQAogewogCXN0cnVjdCBldGhoZHIgKmRhdGEgPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKIAotCXJldHVybiAoZGF0YS0+aF9kZXN0WzVdIF4gYm9uZF9kZXYtPmRldl9hZGRyWzVdKSAlIGNvdW50OworCXJldHVybiAoZGF0YS0+aF9kZXN0WzVdIF4gZGF0YS0+aF9zb3VyY2VbNV0pICUgY291bnQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGV2aWNlIGVudHJ5IHBvaW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwppbmRleCBmMGI5YTFlLi41NjRlMzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCkBAIC01ODksNiArNTg5LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzaXplX3QgY2FuX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzaXplX3Qgc2l6ZTsKKworCXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7ICAgLyogSUZMQV9DQU5fU1RBVEUgKi8KKwlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2N0cmxtb2RlKTsgIC8qIElGTEFfQ0FOX0NUUkxNT0RFICovCisJc2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7ICAvKiBJRkxBX0NBTl9SRVNUQVJUX01TICovCisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGNhbl9iaXR0aW1pbmcpOyAvKiBJRkxBX0NBTl9CSVRUSU1JTkcgKi8KKwlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2Nsb2NrKTsgICAgIC8qIElGTEFfQ0FOX0NMT0NLICovCisJaWYgKHByaXYtPmJpdHRpbWluZ19jb25zdCkJICAgICAgLyogSUZMQV9DQU5fQklUVElNSU5HX0NPTlNUICovCisJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0KTsKKworCXJldHVybiBzaXplOworfQorCiBzdGF0aWMgaW50IGNhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjM5LDYgKzY1NSw3IEBACiAJLnNldHVwCQk9IGNhbl9zZXR1cCwKIAkubmV3bGluawk9IGNhbl9uZXdsaW5rLAogCS5jaGFuZ2VsaW5rCT0gY2FuX2NoYW5nZWxpbmssCisJLmdldF9zaXplCT0gY2FuX2dldF9zaXplLAogCS5maWxsX2luZm8JPSBjYW5fZmlsbF9pbmZvLAogCS5maWxsX3hzdGF0cwk9IGNhbl9maWxsX3hzdGF0cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMKaW5kZXggMzM3MzU2MC4uOWRkMDc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9vZl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfb2ZfcGxhdGZvcm0uYwpAQCAtMjEzLDYgKzIxMyw3IEBACiAJey5jb21wYXRpYmxlID0gIm54cCxzamExMDAwIn0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2phMTAwMF9vZnBfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzamExMDAwX29mcF9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCmluZGV4IDkwMTJlMGEuLmFiZGJkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAogCWNmID0gKHN0cnVjdCBjYW5fZnJhbWUgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpKTsKIAotCWNmLT5jYW5faWQgPSBtc2ctPm1zZy5jYW5fbXNnLmlkOworCWNmLT5jYW5faWQgPSBsZTMyX3RvX2NwdShtc2ctPm1zZy5jYW5fbXNnLmlkKTsKIAljZi0+Y2FuX2RsYyA9IG1pbl90KHU4LCBtc2ctPm1zZy5jYW5fbXNnLmxlbmd0aCwgOCk7CiAKIAlpZiAobXNnLT50eXBlID09IENQQ19NU0dfVFlQRV9FWFRfQ0FOX0ZSQU1FCkBAIC04MTMsNiArODEzLDkgQEAKIAkJbXNnLT5sZW5ndGggPSBDUENfQ0FOX01TR19NSU5fU0laRSArIGNmLT5jYW5fZGxjOwogCX0KIAorCS8qIFJlc3BlY3QgYnl0ZSBvcmRlciAqLworCW1zZy0+bXNnLmNhbl9tc2cuaWQgPSBjcHVfdG9fbGUzMihtc2ctPm1zZy5jYW5fbXNnLmlkKTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfVVJCUzsgaSsrKSB7CiAJCWlmIChkZXYtPnR4X2NvbnRleHRzW2ldLmVjaG9faW5kZXggPT0gTUFYX1RYX1VSQlMpIHsKIAkJCWNvbnRleHQgPSAmZGV2LT50eF9jb250ZXh0c1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCAwNTkxNmFhLi5mODU3YWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC00MzQyLDExICs0MzQyLDExIEBACiAJCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKIAl9CiAKKwllcnIgPSAtRU5PTUVNOwogCWlmIChjYXNfdHhfdGlueV9hbGxvYyhjcCkgPCAwKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnJfdW5sb2NrOwogCiAJLyogYWxsb2MgcnggZGVzY3JpcHRvcnMgKi8KLQllcnIgPSAtRU5PTUVNOwogCWlmIChjYXNfYWxsb2NfcnhkcyhjcCkgPCAwKQogCQlnb3RvIGVycl90eF90aW55OwogCkBAIC00Mzg2LDYgKzQzODYsNyBAQAogCWNhc19mcmVlX3J4ZHMoY3ApOwogZXJyX3R4X3Rpbnk6CiAJY2FzX3R4X3RpbnlfZnJlZShjcCk7CitlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygmY3AtPnBtX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5jIGIvZHJpdmVycy9uZXQvY25pYy5jCmluZGV4IDQ2Yzg3ZWMuLjNiZjFiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuYworKysgYi9kcml2ZXJzL25ldC9jbmljLmMKQEAgLTIyNjQsOSArMjI2NCw5IEBACiAJY25pY19jdHhfd3IoZGV2LCBjaWRfYWRkciwgQk5YMl9MMkNUWF9DVFhfVFlQRSwgdmFsKTsKIAogCWlmIChzYl9pZCA9PSAwKQotCQl2YWwgPSAyIDw8IEJOWDJfTDJDVFhfU1RBVFVTQl9OVU1fU0hJRlQ7CisJCXZhbCA9IDIgPDwgQk5YMl9MMkNUWF9MMl9TVEFUVVNCX05VTV9TSElGVDsKIAllbHNlCi0JCXZhbCA9IEJOWDJfTDJDVFhfU1RBVFVTQl9OVU0oc2JfaWQpOworCQl2YWwgPSBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNKHNiX2lkKTsKIAljbmljX2N0eF93cihkZXYsIGNpZF9hZGRyLCBCTlgyX0wyQ1RYX0hPU1RfQkRJRFgsIHZhbCk7CiAKIAlyeGJkID0gKHN0cnVjdCByeF9iZCAqKSAoY3AtPmwyX3JpbmcgKyBCQ01fUEFHRV9TSVpFKTsKQEAgLTI0MjMsNyArMjQyMyw3IEBACiAJY3AtPmludF9udW0gPSAwOwogCWlmIChldGhkZXYtPmRydl9zdGF0ZSAmIENOSUNfRFJWX1NUQVRFX1VTSU5HX01TSVgpIHsKIAkJdTMyIHNiX2lkID0gY3AtPnN0YXR1c19ibGtfbnVtOwotCQl1MzIgc2IgPSBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNKHNiX2lkKTsKKwkJdTMyIHNiID0gQk5YMl9MMkNUWF9MNV9TVEFUVVNCX05VTShzYl9pZCk7CiAKIAkJY3AtPmludF9udW0gPSBzYl9pZCA8PCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTlRfTlVNX1NISUZUOwogCQljbmljX2N0eF93cihkZXYsIGNwLT5rd3FfY2lkX2FkZHIsIEw1X0tSTkxRX0hPU1RfUUlEWCwgc2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCA2NWEyZDBiLi4zMTc5NTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMzMzLDYgKzMzMyw5IEBACiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19FT0lfQzBfUlhFTgkoMHgwMSkKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9UWEVOCSgweDAyKQogCisvKiBFTUFDIFN0YXRzIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRU1BQ19TVEFUU19DTFJfTUFTSyAgICAoMHhGRkZGRkZGRikKKwogLyoqIG5ldF9idWZfb2JqOiBFTUFDIG5ldHdvcmsgYnVmZmVyZGF0YSBzdHJ1Y3R1cmUKICAqCiAgKiBFTUFDIG5ldHdvcmsgYnVmZmVyIGRhdGEgc3RydWN0dXJlCkBAIC0yMjE4LDcgKzIyMjEsNyBAQAogCXN0cnVjdCBlbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWVtYWNfaW50X2Rpc2FibGUocHJpdik7Ci0JZW1hY19pcnEobmRldi0+aXJxLCBwcml2KTsKKwllbWFjX2lycShuZGV2LT5pcnEsIG5kZXYpOwogCWVtYWNfaW50X2VuYWJsZShwcml2KTsKIH0KICNlbmRpZgpAQCAtMjU0OCw0MCArMjU1MSw0OSBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplbWFjX2Rldl9nZXRuZXRzdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgZW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTMyIG1hY19jb250cm9sOworCXUzMiBzdGF0c19jbGVhcl9tYXNrOwogCiAJLyogdXBkYXRlIGVtYWMgaGFyZHdhcmUgc3RhdHMgYW5kIHJlc2V0IHRoZSByZWdpc3RlcnMqLwogCisJbWFjX2NvbnRyb2wgPSBlbWFjX3JlYWQoRU1BQ19NQUNDT05UUk9MKTsKKworCWlmIChtYWNfY29udHJvbCAmIEVNQUNfTUFDQ09OVFJPTF9HTUlJRU4pCisJCXN0YXRzX2NsZWFyX21hc2sgPSBFTUFDX1NUQVRTX0NMUl9NQVNLOworCWVsc2UKKwkJc3RhdHNfY2xlYXJfbWFzayA9IDA7CisKIAlwcml2LT5uZXRfZGV2X3N0YXRzLm11bHRpY2FzdCArPSBlbWFjX3JlYWQoRU1BQ19SWE1DQVNURlJBTUVTKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhNQ0FTVEZSQU1FUywgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhNQ0FTVEZSQU1FUywgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLmNvbGxpc2lvbnMgKz0gKGVtYWNfcmVhZChFTUFDX1RYQ09MTElTSU9OKSArCiAJCQkJCSAgIGVtYWNfcmVhZChFTUFDX1RYU0lOR0xFQ09MTCkgKwogCQkJCQkgICBlbWFjX3JlYWQoRU1BQ19UWE1VTFRJQ09MTCkpOwotCWVtYWNfd3JpdGUoRU1BQ19UWENPTExJU0lPTiwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKLQllbWFjX3dyaXRlKEVNQUNfVFhTSU5HTEVDT0xMLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOwotCWVtYWNfd3JpdGUoRU1BQ19UWE1VTFRJQ09MTCwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfVFhDT0xMSVNJT04sIHN0YXRzX2NsZWFyX21hc2spOworCWVtYWNfd3JpdGUoRU1BQ19UWFNJTkdMRUNPTEwsIHN0YXRzX2NsZWFyX21hc2spOworCWVtYWNfd3JpdGUoRU1BQ19UWE1VTFRJQ09MTCwgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gKGVtYWNfcmVhZChFTUFDX1JYT1ZFUlNJWkVEKSArCiAJCQkJCQllbWFjX3JlYWQoRU1BQ19SWEpBQkJFUikgKwogCQkJCQkJZW1hY19yZWFkKEVNQUNfUlhVTkRFUlNJWkVEKSk7Ci0JZW1hY193cml0ZShFTUFDX1JYT1ZFUlNJWkVELCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOwotCWVtYWNfd3JpdGUoRU1BQ19SWEpBQkJFUiwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhVTkRFUlNJWkVELCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19SWE9WRVJTSVpFRCwgc3RhdHNfY2xlYXJfbWFzayk7CisJZW1hY193cml0ZShFTUFDX1JYSkFCQkVSLCBzdGF0c19jbGVhcl9tYXNrKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhVTkRFUlNJWkVELCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gKGVtYWNfcmVhZChFTUFDX1JYU09GT1ZFUlJVTlMpICsKIAkJCQkJICAgICAgIGVtYWNfcmVhZChFTUFDX1JYTU9GT1ZFUlJVTlMpKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhTT0ZPVkVSUlVOUywgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhNT0ZPVkVSUlVOUywgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhTT0ZPVkVSUlVOUywgc3RhdHNfY2xlYXJfbWFzayk7CisJZW1hY193cml0ZShFTUFDX1JYTU9GT1ZFUlJVTlMsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBlbWFjX3JlYWQoRU1BQ19SWERNQU9WRVJSVU5TKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhETUFPVkVSUlVOUywgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhETUFPVkVSUlVOUywgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9CiAJCWVtYWNfcmVhZChFTUFDX1RYQ0FSUklFUlNFTlNFKTsKLQllbWFjX3dyaXRlKEVNQUNfVFhDQVJSSUVSU0VOU0UsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1RYQ0FSUklFUlNFTlNFLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMudHhfZmlmb19lcnJvcnMgPSBlbWFjX3JlYWQoRU1BQ19UWFVOREVSUlVOKTsKLQllbWFjX3dyaXRlKEVNQUNfVFhVTkRFUlJVTiwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfVFhVTkRFUlJVTiwgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlyZXR1cm4gJnByaXYtPm5ldF9kZXZfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuaCBiL2RyaXZlcnMvbmV0L2RtOTAwMC5oCmluZGV4IDgwODE3YzIuLmZiMWM5MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuaAorKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBETTkwMDBfUkNTUgkgICAgICAgMHgzMgogCiAjZGVmaW5lIENISVBSX0RNOTAwMEEJICAgICAgIDB4MTkKLSNkZWZpbmUgQ0hJUFJfRE05MDAwQgkgICAgICAgMHgxQgorI2RlZmluZSBDSElQUl9ETTkwMDBCCSAgICAgICAweDFBCiAKICNkZWZpbmUgRE05MDAwX01SQ01EWCAgICAgICAgICAweEYwCiAjZGVmaW5lIERNOTAwMF9NUkNNRCAgICAgICAgICAgMHhGMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDVkMmY0OGYuLjNjMjlhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE0MjcsMTkgKzE0MjcsMzEgQEAKIAl9IGVsc2UKIAkJRFBSSU5USyhIVywgREVCVUcsICJwaHlfYWRkciA9ICVkXG4iLCBuaWMtPm1paS5waHlfaWQpOwogCi0JLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKLQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KLQlibWNyICY9IH5CTUNSX0lTT0xBVEU7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwotCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CiAJaWRfaGkgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQyKTsKIAluaWMtPnBoeSA9ICh1MzIpaWRfaGkgPDwgMTYgfCAodTMyKWlkX2xvOwogCURQUklOVEsoSFcsIERFQlVHLCAicGh5IElEID0gMHglMDhYXG4iLCBuaWMtPnBoeSk7CiAKKwkvKiBTZWxlY3QgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7CisJCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgeworCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCQl9IGVsc2UgaWYgKG5pYy0+cGh5ICE9IHBoeV84MjU1Ml92KSB7CisJCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IpOworCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLAorCQkJCWJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKKwkJfQorCX0KKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDgyNTUyOgorCSAqIENsZWFyIHRoZSBJU09MQVRFIGJpdCBvbiBzZWxlY3RlZCBwaHlfaWQgbGFzdCAobWlycm9yZWQgb24gYWxsCisJICogb3RoZXIgcGh5X2lkJ3MpIHVzaW5nIGJtY3IgdmFsdWUgZnJvbSBhZGRyIGRpc2NvdmVyeSBsb29wIGFib3ZlLgorCSAqLworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7CisKIAkvKiBIYW5kbGUgTmF0aW9uYWwgdHggcGh5cyAqLwogI2RlZmluZSBOQ1NfUEhZX01PREVMX01BU0sJMHhGRkYwRkZGRgogCWlmICgobmljLT5waHkgJiBOQ1NfUEhZX01PREVMX01BU0spID09IHBoeV9uc2NfdHgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGMwZjE4NWIuLjExOTAxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNzYsNiArNzYsNyBAQAogLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5hYmxlIFBpbiA3ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VFX1JTVCAgICAweDAwMDAyMDAwIC8qIFJlaW5pdGlhbGl6ZSBmcm9tIEVFUFJPTSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TUERfQllQUyAgMHgwMDAwODAwMCAvKiBTcGVlZCBTZWxlY3QgQnlwYXNzICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1JPX0RJUyAgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTiAweDAwMDgwMDAwIC8qIERNQSBEeW5hbWljIENsb2NrIEdhdGluZyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCkBAIC0zNDcsNiArMzQ4LDcgQEAKIC8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gQ29udHJvbCBhbmQgU2l6ZSAqLwogI2RlZmluZSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUCAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgRTEwMDBfRVhUQ05GX0NUUkxfTENEX1dSSVRFX0VOQUJMRSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX09FTV9XUklURV9FTkFCTEUgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBFMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUcgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgRTEwMDBfRVhUQ05GX1NJWkVfRVhUX1BDSUVfTEVOR1RIX01BU0sgICAweDAwRkYwMDAwCiAjZGVmaW5lIEUxMDAwX0VYVENORl9TSVpFX0VYVF9QQ0lFX0xFTkdUSF9TSElGVCAgICAgICAgICAxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCA5ODE5MzZjLi4xODlkZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtMTQxLDYgKzE0MSwyMCBAQAogI2RlZmluZSBIVl9UTkNSU19VUFBFUgkJUEhZX1JFRyg3NzgsIDI5KSAvKiBUcmFuc21pdCB3aXRoIG5vIENSUyAqLwogI2RlZmluZSBIVl9UTkNSU19MT1dFUgkJUEhZX1JFRyg3NzgsIDMwKQogCisvKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIFN0YXR1cyAqLworI2RlZmluZSBCTV9DU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQk1fQ1NfU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBCTV9DU19TVEFUVVNfUkVTT0xWRUQgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEJNX0NTX1NUQVRVU19TUEVFRF9NQVNLICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgQk1fQ1NfU1RBVFVTX1NQRUVEXzEwMDAgICAgICAgICAgIDB4ODAwMAorCisvKiA4MjU3NyBNb2JpbGUgUGh5IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIVl9NX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgSFZfTV9TVEFUVVNfQVVUT05FR19DT01QTEVURSAgICAgIDB4MTAwMAorI2RlZmluZSBIVl9NX1NUQVRVU19TUEVFRF9NQVNLICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEhWX01fU1RBVFVTX1NQRUVEXzEwMDAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgSFZfTV9TVEFUVVNfTElOS19VUCAgICAgICAgICAgICAgIDB4MDA0MAorCiBlbnVtIGUxMDAwX2JvYXJkcyB7CiAJYm9hcmRfODI1NzEsCiAJYm9hcmRfODI1NzIsCkBAIC01MTksOSArNTMzLDEzIEBACiBleHRlcm4gczMyIGUxMDAwZV9nZXRfY2FibGVfbGVuZ3RoX2lncF8yKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZ2V0X3BoeV9pbmZvX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3BfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfcGh5X2h3X3Jlc2V0X2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9zZXRfZDNfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSk7CiBleHRlcm4gczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CitleHRlcm4gczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncF9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfc3dfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2dldF9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTUzOCw3ICs1NTYsMTEgQEAKIGV4dGVybiBzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfYm0yKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqcGh5X2N0cmwpOwogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWdfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZ19sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfaGFzX2xpbmtfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaXRlcmF0aW9ucywKIAkJCSAgICAgICB1MzIgdXNlY19pbnRlcnZhbCwgYm9vbCAqc3VjY2Vzcyk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtNTQ2LDcgKzU2OCwxMSBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKIGV4dGVybiBzMzIgZTEwMDBlX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBfcmVhZF9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSk7CitleHRlcm4gczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBfd3JpdGVfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBzbG93KTsKIGV4dGVybiBzMzIgZTEwMDBfbGlua19zdGFsbF93b3JrYXJvdW5kX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMF9jb3BwZXJfbGlua19zZXR1cF84MjU3NyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKaW5kZXggZmQ0NGQ5Zi4uYWFlYTQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKQEAgLTc2NCwxMSArNzY0LDEzIEBACiAJczMyICAoKmdldF9jYWJsZV9sZW5ndGgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X3BoeV9pbmZvKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnJlYWRfcGh5X3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOworCXMzMiAgKCpyZWFkX3BoeV9yZWdfbG9ja2VkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7CiAJdm9pZCAoKnJlbGVhc2VfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnJlc2V0X3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXRfZDBfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogCXMzMiAgKCpzZXRfZDNfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogCXMzMiAgKCp3cml0ZV9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOworCXMzMiAgKCp3cml0ZV9waHlfcmVnX2xvY2tlZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKIAlzMzIgICgqY2ZnX29uX2xpbmtfdXApKHN0cnVjdCBlMTAwMF9odyAqKTsKIH07CiAKQEAgLTkwMSw2ICs5MDMsNyBAQAogc3RydWN0IGUxMDAwX2Rldl9zcGVjX2ljaDhsYW4gewogCWJvb2wga21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9lbmFibGVkOwogCXN0cnVjdCBlMTAwMF9zaGFkb3dfcmFtIHNoYWRvd19yYW1bRTEwMDBfSUNIOF9TSEFET1dfUkFNX1dPUkRTXTsKKwlib29sIG52bV9rMV9lbmFibGVkOwogfTsKIAogc3RydWN0IGUxMDAwX2h3IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCmluZGV4IDk5ZGYyYWIuLjUxZGRiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwpAQCAtMTIyLDYgKzEyMiwyNyBAQAogCiAjZGVmaW5lIEhWX0xFRF9DT05GSUcJCVBIWV9SRUcoNzY4LCAzMCkgLyogTEVEIENvbmZpZ3VyYXRpb24gKi8KIAorI2RlZmluZSBTV19GTEFHX1RJTUVPVVQgICAgMTAwMCAvKiBTVyBTZW1hcGhvcmUgZmxhZyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworCisvKiBTTUJ1cyBBZGRyZXNzIFBoeSBSZWdpc3RlciAqLworI2RlZmluZSBIVl9TTUJfQUREUiAgICAgICAgICAgIFBIWV9SRUcoNzY4LCAyNikKKyNkZWZpbmUgSFZfU01CX0FERFJfUEVDX0VOICAgICAweDAyMDAKKyNkZWZpbmUgSFZfU01CX0FERFJfVkFMSUQgICAgICAweDAwODAKKworLyogU3RyYXBwaW5nIE9wdGlvbiBSZWdpc3RlciAtIFJPICovCisjZGVmaW5lIEUxMDAwX1NUUkFQICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQworI2RlZmluZSBFMTAwMF9TVFJBUF9TTUJVU19BRERSRVNTX01BU0sgIDB4MDBGRTAwMDAKKyNkZWZpbmUgRTEwMDBfU1RSQVBfU01CVVNfQUREUkVTU19TSElGVCAxNworCisvKiBPRU0gQml0cyBQaHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSFZfT0VNX0JJVFMgICAgICAgICAgICBQSFlfUkVHKDc2OCwgMjUpCisjZGVmaW5lIEhWX09FTV9CSVRTX0xQTFUgICAgICAgMHgwMDA0IC8qIExvdyBQb3dlciBMaW5rIFVwICovCisjZGVmaW5lIEhWX09FTV9CSVRTX0dCRV9ESVMgICAgMHgwMDQwIC8qIEdpZ2FiaXQgRGlzYWJsZSAqLworI2RlZmluZSBIVl9PRU1fQklUU19SRVNUQVJUX0FOIDB4MDQwMCAvKiBSZXN0YXJ0IEF1dG8tbmVnb3RpYXRpb24gKi8KKworI2RlZmluZSBFMTAwMF9OVk1fSzFfQ09ORklHIDB4MUIgLyogTlZNIEsxIENvbmZpZyBXb3JkICovCisjZGVmaW5lIEUxMDAwX05WTV9LMV9FTkFCTEUgMHgxICAvKiBOVk0gRW5hYmxlIEsxIGJpdCAqLworCiAvKiBJQ0ggR2JFIEZsYXNoIEhhcmR3YXJlIFNlcXVlbmNpbmcgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyIGJpdCBicmVha2Rvd24gKi8KIC8qIE9mZnNldCAwNGggSFNGU1RTICovCiB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgewpAQCAtMjAwLDYgKzIyMSwxMCBAQAogc3RhdGljIHMzMiBlMTAwMF9jbGVhbnVwX2xlZF9wY2hsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2xlZF9vbl9wY2hsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2xlZF9vZmZfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9zZXRfbHBsdV9zdGF0ZV9wY2hsYW4oc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpOworc3RhdGljIHZvaWQgZTEwMDBfbGFuX2luaXRfZG9uZV9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiAgZTEwMDBfazFfZ2lnX3dvcmthcm91bmRfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBsaW5rKTsKK3N0YXRpYyBzMzIgZTEwMDBfY29uZmlndXJlX2sxX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBrMV9lbmFibGUpOwogCiBzdGF0aWMgaW5saW5lIHUxNiBfX2VyMTZmbGFzaChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJlZykKIHsKQEAgLTI0Miw3ICsyNjcsMTEgQEAKIAogCXBoeS0+b3BzLmNoZWNrX3BvbGFyaXR5ICAgICAgID0gZTEwMDBfY2hlY2tfcG9sYXJpdHlfaWZlX2ljaDhsYW47CiAJcGh5LT5vcHMucmVhZF9waHlfcmVnICAgICAgICAgPSBlMTAwMF9yZWFkX3BoeV9yZWdfaHY7CisJcGh5LT5vcHMucmVhZF9waHlfcmVnX2xvY2tlZCAgPSBlMTAwMF9yZWFkX3BoeV9yZWdfaHZfbG9ja2VkOworCXBoeS0+b3BzLnNldF9kMF9scGx1X3N0YXRlICAgID0gZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuOworCXBoeS0+b3BzLnNldF9kM19scGx1X3N0YXRlICAgID0gZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuOwogCXBoeS0+b3BzLndyaXRlX3BoeV9yZWcgICAgICAgID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19odjsKKwlwaHktPm9wcy53cml0ZV9waHlfcmVnX2xvY2tlZCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfaHZfbG9ja2VkOwogCXBoeS0+YXV0b25lZ19tYXNrICAgICAgICAgICAgID0gQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVDsKIAogCXBoeS0+aWQgPSBlMTAwMF9waHlfdW5rbm93bjsKQEAgLTMwMyw2ICszMzIsOCBAQAogCWNhc2UgSUdQMDNFMTAwMF9FX1BIWV9JRDoKIAkJcGh5LT50eXBlID0gZTEwMDBfcGh5X2lncF8zOwogCQlwaHktPmF1dG9uZWdfbWFzayA9IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQ7CisJCXBoeS0+b3BzLnJlYWRfcGh5X3JlZ19sb2NrZWQgPSBlMTAwMGVfcmVhZF9waHlfcmVnX2lncF9sb2NrZWQ7CisJCXBoeS0+b3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwX2xvY2tlZDsKIAkJYnJlYWs7CiAJY2FzZSBJRkVfRV9QSFlfSUQ6CiAJY2FzZSBJRkVfUExVU19FX1BIWV9JRDoKQEAgLTQ2OSwxNCArNTAwLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKLQkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9LMV9DT05GSUcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfRU5BQkxFKTsKLQkJaWYgKHJldF92YWwpCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAkvKgogCSAqIEZpcnN0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIHJlcG9ydHMKIAkgKiBsaW5rLiAgSWYgc28sIHRoZW4gd2Ugd2FudCB0byBnZXQgdGhlIGN1cnJlbnQgc3BlZWQvZHVwbGV4CkBAIC00ODYsNiArNTA5LDEyIEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX2sxX2dpZ193b3JrYXJvdW5kX2h2KGh3LCBsaW5rKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoIWxpbmspCiAJCWdvdG8gb3V0OyAvKiBObyBsaW5rIGRldGVjdGVkICovCiAKQEAgLTU2OCwxMiArNTk3LDM5IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKG52bV9tdXRleCk7CiAKIC8qKgorICogIGUxMDAwX2FjcXVpcmVfbnZtX2ljaDhsYW4gLSBBY3F1aXJlIE5WTSBtdXRleAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEFjcXVpcmVzIHRoZSBtdXRleCBmb3IgcGVyZm9ybWluZyBOVk0gb3BlcmF0aW9ucy4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfYWNxdWlyZV9udm1faWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCW11dGV4X2xvY2soJm52bV9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgZTEwMDBfcmVsZWFzZV9udm1faWNoOGxhbiAtIFJlbGVhc2UgTlZNIG11dGV4CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVsZWFzZXMgdGhlIG11dGV4IHVzZWQgd2hpbGUgcGVyZm9ybWluZyBOVk0gb3BlcmF0aW9ucy4KKyAqKi8KK3N0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2VfbnZtX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwltdXRleF91bmxvY2soJm52bV9tdXRleCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBERUZJTkVfTVVURVgoc3dmbGFnX211dGV4KTsKKworLyoqCiAgKiAgZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbiAtIEFjcXVpcmUgc29mdHdhcmUgY29udHJvbCBmbGFnCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgQWNxdWlyZXMgdGhlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZyBmb3IgcGVyZm9ybWluZyBOVk0gYW5kIFBIWQotICogIG9wZXJhdGlvbnMuICBUaGlzIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBlbnRyeSBwb2ludCBvbmx5IGNhbGxlZCBieQotICogIHJlYWQvd3JpdGUgcm91dGluZXMgZm9yIHRoZSBQSFkgYW5kIE5WTSBwYXJ0cy4KKyAqICBBY3F1aXJlcyB0aGUgc29mdHdhcmUgY29udHJvbCBmbGFnIGZvciBwZXJmb3JtaW5nIFBIWSBhbmQgc2VsZWN0CisgKiAgTUFDIENTUiBhY2Nlc3Nlcy4KICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpAQCAtNTgyLDcgKzYzOCw3IEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0JbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKKwltdXRleF9sb2NrKCZzd2ZsYWdfbXV0ZXgpOwogCiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJZXh0Y25mX2N0cmwgPSBlcjMyKEVYVENORl9DVFJMKTsKQEAgLTU5OSw3ICs2NTUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl0aW1lb3V0ID0gUEhZX0NGR19USU1FT1VUICogMjsKKwl0aW1lb3V0ID0gU1dfRkxBR19USU1FT1VUOwogCiAJZXh0Y25mX2N0cmwgfD0gRTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKQEAgLTYyMyw3ICs2NzksNyBAQAogCiBvdXQ6CiAJaWYgKHJldF92YWwpCi0JCW11dGV4X3VubG9jaygmbnZtX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZzd2ZsYWdfbXV0ZXgpOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC02MzIsOSArNjg4LDggQEAKICAqICBlMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuIC0gUmVsZWFzZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKLSAqICBSZWxlYXNlcyB0aGUgc29mdHdhcmUgY29udHJvbCBmbGFnIGZvciBwZXJmb3JtaW5nIE5WTSBhbmQgUEhZIG9wZXJhdGlvbnMuCi0gKiAgVGhpcyBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgZW50cnkgcG9pbnQgb25seSBjYWxsZWQgYnkgcmVhZC93cml0ZQotICogIHJvdXRpbmVzIGZvciB0aGUgUEhZIGFuZCBOVk0gcGFydHMuCisgKiAgUmVsZWFzZXMgdGhlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZyBmb3IgcGVyZm9ybWluZyBQSFkgYW5kIHNlbGVjdAorICogIE1BQyBDU1IgYWNjZXNzZXMuCiAgKiovCiBzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC02NDQsNyArNjk5LDkgQEAKIAlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKIAotCW11dGV4X3VubG9jaygmbnZtX211dGV4KTsKKwltdXRleF91bmxvY2soJnN3ZmxhZ19tdXRleCk7CisKKwlyZXR1cm47CiB9CiAKIC8qKgpAQCAtNzUyLDYgKzgwOSwzMjYgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfc3dfbGNkX2NvbmZpZ19pY2g4bGFuIC0gU1ctYmFzZWQgTENEIENvbmZpZ3VyYXRpb24KKyAqICBAaHc6ICAgcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNXIHNob3VsZCBjb25maWd1cmUgdGhlIExDRCBmcm9tIHRoZSBOVk0gZXh0ZW5kZWQgY29uZmlndXJhdGlvbiByZWdpb24KKyAqICBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gcGFydHMuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX3N3X2xjZF9jb25maWdfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJdTMyIGksIGRhdGEsIGNuZl9zaXplLCBjbmZfYmFzZV9hZGRyLCBzd19jZmdfbWFzazsKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgd29yZF9hZGRyLCByZWdfZGF0YSwgcmVnX2FkZHIsIHBoeV9wYWdlID0gMDsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBQSFkgZnJvbSB0aGUgTlZNIG9uIElDSCBwbGF0Zm9ybXMuICBUaGlzCisJICogaXMgbmVlZGVkIGR1ZSB0byBhbiBpc3N1ZSB3aGVyZSB0aGUgTlZNIGNvbmZpZ3VyYXRpb24gaXMKKwkgKiBub3QgcHJvcGVybHkgYXV0b2xvYWRlZCBhZnRlciBwb3dlciB0cmFuc2l0aW9ucy4KKwkgKiBUaGVyZWZvcmUsIGFmdGVyIGVhY2ggUEhZIHJlc2V0LCB3ZSB3aWxsIGxvYWQgdGhlCisJICogY29uZmlndXJhdGlvbiBkYXRhIG91dCBvZiB0aGUgTlZNIG1hbnVhbGx5LgorCSAqLworCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4gJiYgcGh5LT50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgfHwKKwkJKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pKSB7CisJCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gaHctPmFkYXB0ZXI7CisKKwkJLyogQ2hlY2sgaWYgU1cgbmVlZHMgdG8gY29uZmlndXJlIHRoZSBQSFkgKi8KKwkJaWYgKChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UKSB8fAorCQkgICAgKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSkgfHwKKwkJICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSkKKwkJCXN3X2NmZ19tYXNrID0gRTEwMDBfRkVYVE5WTV9TV19DT05GSUdfSUNIOE07CisJCWVsc2UKKwkJCXN3X2NmZ19tYXNrID0gRTEwMDBfRkVYVE5WTV9TV19DT05GSUc7CisKKwkJZGF0YSA9IGVyMzIoRkVYVE5WTSk7CisJCWlmICghKGRhdGEgJiBzd19jZmdfbWFzaykpCisJCQlnb3RvIG91dDsKKworCQkvKiBXYWl0IGZvciBiYXNpYyBjb25maWd1cmF0aW9uIGNvbXBsZXRlcyBiZWZvcmUgcHJvY2VlZGluZyAqLworCQllMTAwMF9sYW5faW5pdF9kb25lX2ljaDhsYW4oaHcpOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSBIVyBkb2VzIG5vdCBjb25maWd1cmUgTENEIGZyb20gUEhZCisJCSAqIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gYmVmb3JlIFNXIGNvbmZpZ3VyYXRpb24KKwkJICovCisJCWRhdGEgPSBlcjMyKEVYVENORl9DVFJMKTsKKwkJaWYgKGRhdGEgJiBFMTAwMF9FWFRDTkZfQ1RSTF9MQ0RfV1JJVEVfRU5BQkxFKQorCQkJZ290byBvdXQ7CisKKwkJY25mX3NpemUgPSBlcjMyKEVYVENORl9TSVpFKTsKKwkJY25mX3NpemUgJj0gRTEwMDBfRVhUQ05GX1NJWkVfRVhUX1BDSUVfTEVOR1RIX01BU0s7CisJCWNuZl9zaXplID4+PSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfU0hJRlQ7CisJCWlmICghY25mX3NpemUpCisJCQlnb3RvIG91dDsKKworCQljbmZfYmFzZV9hZGRyID0gZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9NQVNLOworCQljbmZfYmFzZV9hZGRyID4+PSBFMTAwMF9FWFRDTkZfQ1RSTF9FWFRfQ05GX1BPSU5URVJfU0hJRlQ7CisKKwkJaWYgKCEoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX09FTV9XUklURV9FTkFCTEUpICYmCisJCSAgICAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikpIHsKKwkJCS8qCisJCQkgKiBIVyBjb25maWd1cmVzIHRoZSBTTUJ1cyBhZGRyZXNzIGFuZCBMRURzIHdoZW4gdGhlCisJCQkgKiBPRU0gYW5kIExDRCBXcml0ZSBFbmFibGUgYml0cyBhcmUgc2V0IGluIHRoZSBOVk0uCisJCQkgKiBXaGVuIGJvdGggTlZNIGJpdHMgYXJlIGNsZWFyZWQsIFNXIHdpbGwgY29uZmlndXJlCisJCQkgKiB0aGVtIGluc3RlYWQuCisJCQkgKi8KKwkJCWRhdGEgPSBlcjMyKFNUUkFQKTsKKwkJCWRhdGEgJj0gRTEwMDBfU1RSQVBfU01CVVNfQUREUkVTU19NQVNLOworCQkJcmVnX2RhdGEgPSBkYXRhID4+IEUxMDAwX1NUUkFQX1NNQlVTX0FERFJFU1NfU0hJRlQ7CisJCQlyZWdfZGF0YSB8PSBIVl9TTUJfQUREUl9QRUNfRU4gfCBIVl9TTUJfQUREUl9WQUxJRDsKKwkJCXJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChodywgSFZfU01CX0FERFIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisKKwkJCWRhdGEgPSBlcjMyKExFRENUTCk7CisJCQlyZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19odl9sb2NrZWQoaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZfTEVEX0NPTkZJRywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2KWRhdGEpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJLyogQ29uZmlndXJlIExDRCBmcm9tIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gcmVnaW9uLiAqLworCisJCS8qIGNuZl9iYXNlX2FkZHIgaXMgaW4gRFdPUkQgKi8KKwkJd29yZF9hZGRyID0gKHUxNikoY25mX2Jhc2VfYWRkciA8PCAxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY25mX3NpemU7IGkrKykgeworCQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCAod29yZF9hZGRyICsgaSAqIDIpLCAxLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlZ19kYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCisJCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsICh3b3JkX2FkZHIgKyBpICogMiArIDEpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJnJlZ19hZGRyKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCisJCQkvKiBTYXZlIG9mZiB0aGUgUEhZIHBhZ2UgZm9yIGZ1dHVyZSB3cml0ZXMuICovCisJCQlpZiAocmVnX2FkZHIgPT0gSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QpIHsKKwkJCQlwaHlfcGFnZSA9IHJlZ19kYXRhOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZWdfYWRkciAmPSBQSFlfUkVHX01BU0s7CisJCQlyZWdfYWRkciB8PSBwaHlfcGFnZTsKKworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMilyZWdfYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBlMTAwMF9rMV9naWdfd29ya2Fyb3VuZF9odiAtIEsxIFNpIHdvcmthcm91bmQKKyAqICBAaHc6ICAgcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGxpbms6IGxpbmsgdXAgYm9vbCBmbGFnCisgKgorICogIElmIEsxIGlzIGVuYWJsZWQgZm9yIDFHYnBzLCB0aGUgTUFDIG1pZ2h0IHN0YWxsIHdoZW4gdHJhbnNpdGlvbmluZworICogIGZyb20gYSBsb3dlciBzcGVlZC4gIFRoaXMgd29ya2Fyb3VuZCBkaXNhYmxlcyBLMSB3aGVuZXZlciBsaW5rIGlzIGF0IDFHaWcKKyAqICBJZiBsaW5rIGlzIGRvd24sIHRoZSBmdW5jdGlvbiB3aWxsIHJlc3RvcmUgdGhlIGRlZmF1bHQgSzEgc2V0dGluZyBsb2NhdGVkCisgKiAgaW4gdGhlIE5WTS4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfazFfZ2lnX3dvcmthcm91bmRfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBsaW5rKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgc3RhdHVzX3JlZyA9IDA7CisJYm9vbCBrMV9lbmFibGUgPSBody0+ZGV2X3NwZWMuaWNoOGxhbi5udm1fazFfZW5hYmxlZDsKKworCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfcGNobGFuKQorCQlnb3RvIG91dDsKKworCS8qIFdyYXAgdGhlIHdob2xlIGZsb3cgd2l0aCB0aGUgc3cgZmxhZyAqLworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyogRGlzYWJsZSBLMSB3aGVuIGxpbmsgaXMgMUdicHMsIG90aGVyd2lzZSB1c2UgdGhlIE5WTSBzZXR0aW5nICovCisJaWYgKGxpbmspIHsKKwkJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzgpIHsKKwkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWdfbG9ja2VkKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fQ1NfU1RBVFVTLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1c19yZWcpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byByZWxlYXNlOworCisJCQlzdGF0dXNfcmVnICY9IEJNX0NTX1NUQVRVU19MSU5LX1VQIHwKKwkJCSAgICAgICAgICAgICAgQk1fQ1NfU1RBVFVTX1JFU09MVkVEIHwKKwkJCSAgICAgICAgICAgICAgQk1fQ1NfU1RBVFVTX1NQRUVEX01BU0s7CisKKwkJCWlmIChzdGF0dXNfcmVnID09IChCTV9DU19TVEFUVVNfTElOS19VUCB8CisJCQkgICAgICAgICAgICAgICAgICAgQk1fQ1NfU1RBVFVTX1JFU09MVkVEIHwKKwkJCSAgICAgICAgICAgICAgICAgICBCTV9DU19TVEFUVVNfU1BFRURfMTAwMCkpCisJCQkJazFfZW5hYmxlID0gZmFsc2U7CisJCX0KKworCQlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgeworCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZ19sb2NrZWQoaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVl9NX1NUQVRVUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXNfcmVnKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gcmVsZWFzZTsKKworCQkJc3RhdHVzX3JlZyAmPSBIVl9NX1NUQVRVU19MSU5LX1VQIHwKKwkJCSAgICAgICAgICAgICAgSFZfTV9TVEFUVVNfQVVUT05FR19DT01QTEVURSB8CisJCQkgICAgICAgICAgICAgIEhWX01fU1RBVFVTX1NQRUVEX01BU0s7CisKKwkJCWlmIChzdGF0dXNfcmVnID09IChIVl9NX1NUQVRVU19MSU5LX1VQIHwKKwkJCSAgICAgICAgICAgICAgICAgICBIVl9NX1NUQVRVU19BVVRPTkVHX0NPTVBMRVRFIHwKKwkJCSAgICAgICAgICAgICAgICAgICBIVl9NX1NUQVRVU19TUEVFRF8xMDAwKSkKKwkJCQlrMV9lbmFibGUgPSBmYWxzZTsKKwkJfQorCisJCS8qIExpbmsgc3RhbGwgZml4IGZvciBsaW5rIHVwICovCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnX2xvY2tlZChodywgUEhZX1JFRyg3NzAsIDE5KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byByZWxlYXNlOworCisJfSBlbHNlIHsKKwkJLyogTGluayBzdGFsbCBmaXggZm9yIGxpbmsgZG93biAqLworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQoaHcsIFBIWV9SRUcoNzcwLCAxOSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxMDApOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gcmVsZWFzZTsKKwl9CisKKwlyZXRfdmFsID0gZTEwMDBfY29uZmlndXJlX2sxX2ljaDhsYW4oaHcsIGsxX2VuYWJsZSk7CisKK3JlbGVhc2U6CisJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBlMTAwMF9jb25maWd1cmVfazFfaWNoOGxhbiAtIENvbmZpZ3VyZSBLMSBwb3dlciBzdGF0ZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGVuYWJsZTogSzEgc3RhdGUgdG8gY29uZmlndXJlCisgKgorICogIENvbmZpZ3VyZSB0aGUgSzEgcG93ZXIgc3RhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlci4KKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoKKyAqICBTdWNjZXNzIHJldHVybnMgMCwgRmFpbHVyZSByZXR1cm5zIC1FMTAwMF9FUlJfUEhZICgtMikKKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfY29uZmlndXJlX2sxX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBrMV9lbmFibGUpCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBjdHJsX3JlZyA9IDA7CisJdTMyIGN0cmxfZXh0ID0gMDsKKwl1MzIgcmVnID0gMDsKKwl1MTYga21ybl9yZWcgPSAwOworCisJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX2ttcm5fcmVnX2xvY2tlZChodywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfQ09ORklHLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma21ybl9yZWcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWlmIChrMV9lbmFibGUpCisJCWttcm5fcmVnIHw9IEUxMDAwX0tNUk5DVFJMU1RBX0sxX0VOQUJMRTsKKwllbHNlCisJCWttcm5fcmVnICY9IH5FMTAwMF9LTVJOQ1RSTFNUQV9LMV9FTkFCTEU7CisKKwlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnX2xvY2tlZChodywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX0sxX0NPTkZJRywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGttcm5fcmVnKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwl1ZGVsYXkoMjApOworCWN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7CisJY3RybF9yZWcgPSBlcjMyKENUUkwpOworCisJcmVnID0gY3RybF9yZWcgJiB+KEUxMDAwX0NUUkxfU1BEXzEwMDAgfCBFMTAwMF9DVFJMX1NQRF8xMDApOworCXJlZyB8PSBFMTAwMF9DVFJMX0ZSQ1NQRDsKKwlldzMyKENUUkwsIHJlZyk7CisKKwlldzMyKENUUkxfRVhULCBjdHJsX2V4dCB8IEUxMDAwX0NUUkxfRVhUX1NQRF9CWVBTKTsKKwl1ZGVsYXkoMjApOworCWV3MzIoQ1RSTCwgY3RybF9yZWcpOworCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKwl1ZGVsYXkoMjApOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX29lbV9iaXRzX2NvbmZpZ19pY2g4bGFuIC0gU1ctYmFzZWQgTENEIENvbmZpZ3VyYXRpb24KKyAqICBAaHc6ICAgICAgIHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBkMF9zdGF0ZTogYm9vbGVhbiBpZiBlbnRlcmluZyBkMCBvciBkMyBkZXZpY2Ugc3RhdGUKKyAqCisgKiAgU1cgd2lsbCBjb25maWd1cmUgR2JlIERpc2FibGUgYW5kIExQTFUgYmFzZWQgb24gdGhlIE5WTS4gVGhlIGZvdXIgYml0cyBhcmUKKyAqICBjb2xsZWN0aXZlbHkgY2FsbGVkIE9FTSBiaXRzLiAgVGhlIE9FTSBXcml0ZSBFbmFibGUgYml0IGFuZCBTVyBDb25maWcgYml0CisgKiAgaW4gTlZNIGRldGVybWluZXMgd2hldGhlciBIVyBzaG91bGQgY29uZmlndXJlIExQTFUgYW5kIEdiZSBEaXNhYmxlLgorICoqLworc3RhdGljIHMzMiBlMTAwMF9vZW1fYml0c19jb25maWdfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGQwX3N0YXRlKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgbWFjX3JlZzsKKwl1MTYgb2VtX3JlZzsKKworCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfcGNobGFuKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJbWFjX3JlZyA9IGVyMzIoRVhUQ05GX0NUUkwpOworCWlmIChtYWNfcmVnICYgRTEwMDBfRVhUQ05GX0NUUkxfT0VNX1dSSVRFX0VOQUJMRSkKKwkJZ290byBvdXQ7CisKKwltYWNfcmVnID0gZXIzMihGRVhUTlZNKTsKKwlpZiAoIShtYWNfcmVnICYgRTEwMDBfRkVYVE5WTV9TV19DT05GSUdfSUNIOE0pKQorCQlnb3RvIG91dDsKKworCW1hY19yZWcgPSBlcjMyKFBIWV9DVFJMKTsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWdfbG9ja2VkKGh3LCBIVl9PRU1fQklUUywgJm9lbV9yZWcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCW9lbV9yZWcgJj0gfihIVl9PRU1fQklUU19HQkVfRElTIHwgSFZfT0VNX0JJVFNfTFBMVSk7CisKKwlpZiAoZDBfc3RhdGUpIHsKKwkJaWYgKG1hY19yZWcgJiBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSkKKwkJCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfR0JFX0RJUzsKKworCQlpZiAobWFjX3JlZyAmIEUxMDAwX1BIWV9DVFJMX0QwQV9MUExVKQorCQkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19MUExVOworCX0gZWxzZSB7CisJCWlmIChtYWNfcmVnICYgRTEwMDBfUEhZX0NUUkxfTk9ORDBBX0dCRV9ESVNBQkxFKQorCQkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19HQkVfRElTOworCisJCWlmIChtYWNfcmVnICYgRTEwMDBfUEhZX0NUUkxfTk9ORDBBX0xQTFUpCisJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CisJfQorCS8qIFJlc3RhcnQgYXV0by1uZWcgdG8gYWN0aXZhdGUgdGhlIGJpdHMgKi8KKwlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkKGh3LCBIVl9PRU1fQklUUywgb2VtX3JlZyk7CisKK291dDoKKwlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworCisvKioKICAqICBlMTAwMF9odl9waHlfd29ya2Fyb3VuZHNfaWNoOGxhbiAtIEEgc2VyaWVzIG9mIFBoeSB3b3JrYXJvdW5kcyB0byBiZQogICogIGRvbmUgYWZ0ZXIgZXZlcnkgUEhZIHJlc2V0LgogICoqLwpAQCAtNzkxLDEwICsxMTY4LDIwIEBACiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CisKIAlody0+cGh5LmFkZHIgPSAxOwotCWUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULCAwKTsKKwlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDApOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgSzEgU2kgd29ya2Fyb3VuZCBkdXJpbmcgcGh5IHJlc2V0IGFzc3VtaW5nIHRoZXJlIGlzCisJICogbGluayBzbyB0aGF0IGl0IGRpc2FibGVzIEsxIGlmIGxpbmsgaXMgaW4gMUdicHMuCisJICovCisJcmV0X3ZhbCA9IGUxMDAwX2sxX2dpZ193b3JrYXJvdW5kX2h2KGh3LCB0cnVlKTsKKworb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC04NDAsMTEgKzEyMjcsOCBAQAogICoqLwogc3RhdGljIHMzMiBlMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7Ci0JdTMyIGk7Ci0JdTMyIGRhdGEsIGNuZl9zaXplLCBjbmZfYmFzZV9hZGRyLCBzd19jZmdfbWFzazsKLQlzMzIgcmV0X3ZhbDsKLQl1MTYgd29yZF9hZGRyLCByZWdfZGF0YSwgcmVnX2FkZHIsIHBoeV9wYWdlID0gMDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IHJlZzsKIAogCXJldF92YWwgPSBlMTAwMGVfcGh5X2h3X3Jlc2V0X2dlbmVyaWMoaHcpOwogCWlmIChyZXRfdmFsKQpAQCAtODU5LDgxICsxMjQzLDIwIEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIFBIWSBmcm9tIHRoZSBOVk0gb24gSUNIIHBsYXRmb3Jtcy4gIFRoaXMKLQkgKiBpcyBuZWVkZWQgZHVlIHRvIGFuIGlzc3VlIHdoZXJlIHRoZSBOVk0gY29uZmlndXJhdGlvbiBpcwotCSAqIG5vdCBwcm9wZXJseSBhdXRvbG9hZGVkIGFmdGVyIHBvd2VyIHRyYW5zaXRpb25zLgotCSAqIFRoZXJlZm9yZSwgYWZ0ZXIgZWFjaCBQSFkgcmVzZXQsIHdlIHdpbGwgbG9hZCB0aGUKLQkgKiBjb25maWd1cmF0aW9uIGRhdGEgb3V0IG9mIHRoZSBOVk0gbWFudWFsbHkuCi0JICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuICYmIHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpIHsKLQkJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YWRhcHRlcjsKKwkvKiBEdW1teSByZWFkIHRvIGNsZWFyIHRoZSBwaHkgd2FrZXVwIGJpdCBhZnRlciBsY2QgcmVzZXQgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZTFlX3JwaHkoaHcsIEJNX1dVQywgJnJlZyk7CiAKLQkJLyogQ2hlY2sgaWYgU1cgbmVlZHMgY29uZmlndXJlIHRoZSBQSFkgKi8KLQkJaWYgKChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UKSB8fAotCQkgICAgKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSkpCi0JCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHX0lDSDhNOwotCQllbHNlCi0JCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHOworCS8qIENvbmZpZ3VyZSB0aGUgTENEIHdpdGggdGhlIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gcmVnaW9uIGluIE5WTSAqLworCXJldF92YWwgPSBlMTAwMF9zd19sY2RfY29uZmlnX2ljaDhsYW4oaHcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAotCQlkYXRhID0gZXIzMihGRVhUTlZNKTsKLQkJaWYgKCEoZGF0YSAmIHN3X2NmZ19tYXNrKSkKLQkJCXJldHVybiAwOworCS8qIENvbmZpZ3VyZSB0aGUgTENEIHdpdGggdGhlIE9FTSBiaXRzIGluIE5WTSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQorCQlyZXRfdmFsID0gZTEwMDBfb2VtX2JpdHNfY29uZmlnX2ljaDhsYW4oaHcsIHRydWUpOwogCi0JCS8qIFdhaXQgZm9yIGJhc2ljIGNvbmZpZ3VyYXRpb24gY29tcGxldGVzIGJlZm9yZSBwcm9jZWVkaW5nICovCi0JCWUxMDAwX2xhbl9pbml0X2RvbmVfaWNoOGxhbihodyk7Ci0KLQkJLyoKLQkJICogTWFrZSBzdXJlIEhXIGRvZXMgbm90IGNvbmZpZ3VyZSBMQ0QgZnJvbSBQSFkKLQkJICogZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgU1cgY29uZmlndXJhdGlvbgotCQkgKi8KLQkJZGF0YSA9IGVyMzIoRVhUQ05GX0NUUkwpOwotCQlpZiAoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUpCi0JCQlyZXR1cm4gMDsKLQotCQljbmZfc2l6ZSA9IGVyMzIoRVhUQ05GX1NJWkUpOwotCQljbmZfc2l6ZSAmPSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfTUFTSzsKLQkJY25mX3NpemUgPj49IEUxMDAwX0VYVENORl9TSVpFX0VYVF9QQ0lFX0xFTkdUSF9TSElGVDsKLQkJaWYgKCFjbmZfc2l6ZSkKLQkJCXJldHVybiAwOwotCi0JCWNuZl9iYXNlX2FkZHIgPSBkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfRVhUX0NORl9QT0lOVEVSX01BU0s7Ci0JCWNuZl9iYXNlX2FkZHIgPj49IEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9TSElGVDsKLQotCQkvKiBDb25maWd1cmUgTENEIGZyb20gZXh0ZW5kZWQgY29uZmlndXJhdGlvbiByZWdpb24uICovCi0KLQkJLyogY25mX2Jhc2VfYWRkciBpcyBpbiBEV09SRCAqLwotCQl3b3JkX2FkZHIgPSAodTE2KShjbmZfYmFzZV9hZGRyIDw8IDEpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjbmZfc2l6ZTsgaSsrKSB7Ci0JCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsCi0JCQkJCQkod29yZF9hZGRyICsgaSAqIDIpLAotCQkJCQkJMSwKLQkJCQkJCSZyZWdfZGF0YSk7Ci0JCQlpZiAocmV0X3ZhbCkKLQkJCQlyZXR1cm4gcmV0X3ZhbDsKLQotCQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LAotCQkJCQkJKHdvcmRfYWRkciArIGkgKiAyICsgMSksCi0JCQkJCQkxLAotCQkJCQkJJnJlZ19hZGRyKTsKLQkJCWlmIChyZXRfdmFsKQotCQkJCXJldHVybiByZXRfdmFsOwotCi0JCQkvKiBTYXZlIG9mZiB0aGUgUEhZIHBhZ2UgZm9yIGZ1dHVyZSB3cml0ZXMuICovCi0JCQlpZiAocmVnX2FkZHIgPT0gSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QpIHsKLQkJCQlwaHlfcGFnZSA9IHJlZ19kYXRhOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlyZWdfYWRkciB8PSBwaHlfcGFnZTsKLQotCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCAodTMyKXJlZ19hZGRyLCByZWdfZGF0YSk7Ci0JCQlpZiAocmV0X3ZhbCkKLQkJCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQotCX0KLQorb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0xMDU0LDYgKzEzNzcsMzggQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuIC0gU2V0IExvdyBQb3dlciBMaW5rIFVwIHN0YXRlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAYWN0aXZlOiB0cnVlIHRvIGVuYWJsZSBMUExVLCBmYWxzZSB0byBkaXNhYmxlCisgKgorICogIFNldHMgdGhlIExQTFUgc3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBhY3RpdmUgZmxhZy4gIEZvciBQQ0gsIGlmIE9FTSB3cml0ZQorICogIGJpdCBhcmUgZGlzYWJsZWQgaW4gdGhlIE5WTSwgd3JpdGluZyB0aGUgTFBMVSBiaXRzIGluIHRoZSBNQUMgd2lsbCBub3Qgc2V0CisgKiAgdGhlIHBoeSBzcGVlZC4gVGhpcyBmdW5jdGlvbiB3aWxsIG1hbnVhbGx5IHNldCB0aGUgTFBMVSBiaXQgYW5kIHJlc3RhcnQKKyAqICBhdXRvLW5lZyBhcyBodyB3b3VsZCBkby4gRDMgYW5kIEQwIExQTFUgd2lsbCBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uCisgKiAgc2luY2UgaXQgY29uZmlndXJlcyB0aGUgc2FtZSBiaXQuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX3NldF9scGx1X3N0YXRlX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IG9lbV9yZWc7CisKKwlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIEhWX09FTV9CSVRTLCAmb2VtX3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGFjdGl2ZSkKKwkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19MUExVOworCWVsc2UKKwkJb2VtX3JlZyAmPSB+SFZfT0VNX0JJVFNfTFBMVTsKKworCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfUkVTVEFSVF9BTjsKKwlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIEhWX09FTV9CSVRTLCBvZW1fcmVnKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF9zZXRfZDBfbHBsdV9zdGF0ZV9pY2g4bGFuIC0gU2V0IExvdyBQb3dlciBMaW5rdXAgRDAgc3RhdGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBhY3RpdmU6IFRSVUUgdG8gZW5hYmxlIExQTFUsIEZBTFNFIHRvIGRpc2FibGUKQEAgLTEzMTQsMTIgKzE2NjksMTEgQEAKIAlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gbnZtLT53b3JkX3NpemUgLSBvZmZzZXQpIHx8CiAJICAgICh3b3JkcyA9PSAwKSkgewogCQlod19kYmcoaHcsICJudm0gcGFyYW1ldGVyKHMpIG91dCBvZiBib3VuZHNcbiIpOwotCQlyZXR1cm4gLUUxMDAwX0VSUl9OVk07CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKKwkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4oaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKKwludm0tPm9wcy5hY3F1aXJlX252bShodyk7CiAKIAlyZXRfdmFsID0gZTEwMDBfdmFsaWRfbnZtX2JhbmtfZGV0ZWN0X2ljaDhsYW4oaHcsICZiYW5rKTsKIAlpZiAocmV0X3ZhbCkgewpAQCAtMTM0NSw3ICsxNjk5LDcgQEAKIAkJfQogCX0KIAotCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAogb3V0OgogCWlmIChyZXRfdmFsKQpAQCAtMTYwMywxMSArMTk1NywxNSBAQAogCQlyZXR1cm4gLUUxMDAwX0VSUl9OVk07CiAJfQogCisJbnZtLT5vcHMuYWNxdWlyZV9udm0oaHcpOworCiAJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKIAkJZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLm1vZGlmaWVkID0gMTsKIAkJZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLnZhbHVlID0gZGF0YVtpXTsKIAl9CiAKKwludm0tPm9wcy5yZWxlYXNlX252bShodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzNyw5ICsxOTk1LDcgQEAKIAlpZiAobnZtLT50eXBlICE9IGUxMDAwX252bV9mbGFzaF9zdykKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OworCW52bS0+b3BzLmFjcXVpcmVfbnZtKGh3KTsKIAogCS8qCiAJICogV2UncmUgd3JpdGluZyB0byB0aGUgb3Bwb3NpdGUgYmFuayBzbyBpZiB3ZSdyZSBvbiBiYW5rIDEsCkBAIC0xNjU3LDcgKzIwMTMsNyBAQAogCQlvbGRfYmFua19vZmZzZXQgPSAwOwogCQlyZXRfdmFsID0gZTEwMDBfZXJhc2VfZmxhc2hfYmFua19pY2g4bGFuKGh3LCAxKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTY2NSw3ICsyMDIxLDcgQEAKIAkJbmV3X2Jhbmtfb2Zmc2V0ID0gMDsKIAkJcmV0X3ZhbCA9IGUxMDAwX2VyYXNlX2ZsYXNoX2JhbmtfaWNoOGxhbihodywgMCk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMTcyMyw3ICsyMDc5LDcgQEAKIAlpZiAocmV0X3ZhbCkgewogCQkvKiBQb3NzaWJseSByZWFkLW9ubHksIHNlZSBlMTAwMGVfd3JpdGVfcHJvdGVjdF9udm1faWNoOGxhbigpICovCiAJCWh3X2RiZyhodywgIkZsYXNoIGNvbW1pdCBmYWlsZWQuXG4iKTsKLQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzM2LDcgKzIwOTIsNyBAQAogCWFjdF9vZmZzZXQgPSBuZXdfYmFua19vZmZzZXQgKyBFMTAwMF9JQ0hfTlZNX1NJR19XT1JEOwogCXJldF92YWwgPSBlMTAwMF9yZWFkX2ZsYXNoX3dvcmRfaWNoOGxhbihodywgYWN0X29mZnNldCwgJmRhdGEpOwogCWlmIChyZXRfdmFsKSB7Ci0JCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQludm0tPm9wcy5yZWxlYXNlX252bShodyk7CiAJCWdvdG8gb3V0OwogCX0KIAlkYXRhICY9IDB4QkZGRjsKQEAgLTE3NDQsNyArMjEwMCw3IEBACiAJCQkJCQkgICAgICAgYWN0X29mZnNldCAqIDIgKyAxLAogCQkJCQkJICAgICAgICh1OCkoZGF0YSA+PiA4KSk7CiAJaWYgKHJldF92YWwpIHsKLQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzU3LDcgKzIxMTMsNyBAQAogCWFjdF9vZmZzZXQgPSAob2xkX2Jhbmtfb2Zmc2V0ICsgRTEwMDBfSUNIX05WTV9TSUdfV09SRCkgKiAyICsgMTsKIAlyZXRfdmFsID0gZTEwMDBfcmV0cnlfd3JpdGVfZmxhc2hfYnl0ZV9pY2g4bGFuKGh3LCBhY3Rfb2Zmc2V0LCAwKTsKIAlpZiAocmV0X3ZhbCkgewotCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3NjcsNyArMjEyMyw3IEBACiAJCWRldl9zcGVjLT5zaGFkb3dfcmFtW2ldLnZhbHVlID0gMHhGRkZGOwogCX0KIAotCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAogCS8qCiAJICogUmVsb2FkIHRoZSBFRVBST00sIG9yIGVsc2UgbW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBhcHBlYXIKQEAgLTE4MzEsMTQgKzIxODcsMTIgQEAKICAqKi8KIHZvaWQgZTEwMDBlX3dyaXRlX3Byb3RlY3RfbnZtX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKKwlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOwogCXVuaW9uIGljaDhfZmxhc2hfcHJvdGVjdGVkX3JhbmdlIHByMDsKIAl1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwogCXUzMiBnZnByZWc7Ci0JczMyIHJldF92YWw7CiAKLQlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybjsKKwludm0tPm9wcy5hY3F1aXJlX252bShodyk7CiAKIAlnZnByZWcgPSBlcjMyZmxhc2goSUNIX0ZMQVNIX0dGUFJFRyk7CiAKQEAgLTE4NTksNyArMjIxMyw3IEBACiAJaHNmc3RzLmhzZl9zdGF0dXMuZmxvY2tkbiA9IHRydWU7CiAJZXczMmZsYXNoKElDSF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOwogCi0JZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogfQogCiAvKioKQEAgLTIyMjksNiArMjU4Myw4IEBACiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3Jlc2V0X2h3X2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfaWNoOGxhbiAqZGV2X3NwZWMgPSAmaHctPmRldl9zcGVjLmljaDhsYW47CisJdTE2IHJlZzsKIAl1MzIgY3RybCwgaWNyLCBrYWI7CiAJczMyIHJldF92YWw7CiAKQEAgLTIyNjMsNiArMjYxOSwxOCBAQAogCQlldzMyKFBCUywgRTEwMDBfUEJTXzE2Syk7CiAJfQogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyogU2F2ZSB0aGUgTlZNIEsxIGJpdCBzZXR0aW5nKi8KKwkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBFMTAwMF9OVk1fSzFfQ09ORklHLCAxLCAmcmVnKTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKworCQlpZiAocmVnICYgRTEwMDBfTlZNX0sxX0VOQUJMRSkKKwkJCWRldl9zcGVjLT5udm1fazFfZW5hYmxlZCA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9zcGVjLT5udm1fazFfZW5hYmxlZCA9IGZhbHNlOworCX0KKwogCWN0cmwgPSBlcjMyKENUUkwpOwogCiAJaWYgKCFlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpIHsKQEAgLTIzMDQsNyArMjY3MiwxOSBAQAogCQkJaHdfZGJnKGh3LCAiQXV0byBSZWFkIERvbmUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCX0KIAl9CisJLyogRHVtbXkgcmVhZCB0byBjbGVhciB0aGUgcGh5IHdha2V1cCBiaXQgYWZ0ZXIgbGNkIHJlc2V0ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCisJCWUxZV9ycGh5KGh3LCBCTV9XVUMsICZyZWcpOwogCisJcmV0X3ZhbCA9IGUxMDAwX3N3X2xjZF9jb25maWdfaWNoOGxhbihodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX29lbV9iaXRzX2NvbmZpZ19pY2g4bGFuKGh3LCB0cnVlKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CiAJLyoKIAkgKiBGb3IgUENILCB0aGlzIHdyaXRlIHdpbGwgbWFrZSBzdXJlIHRoYXQgYW55IG5vaXNlCiAJICogd2lsbCBiZSBkZXRlY3RlZCBhcyBhIENSQyBlcnJvciBhbmQgYmUgZHJvcHBlZCByYXRoZXIgdGhhbiBzaG93IHVwCkBAIC0yMzIzLDYgKzI3MDMsNyBAQAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQogCQlyZXRfdmFsID0gZTEwMDBfaHZfcGh5X3dvcmthcm91bmRzX2ljaDhsYW4oaHcpOwogCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTI2MjcsMTQgKzMwMDgsNiBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgJiYgKCpzcGVlZCA9PSBTUEVFRF8xMDAwKSkgewotCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfQ09ORklHLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfRElTQUJMRSk7Ci0JCWlmIChyZXRfdmFsKQotCQkJcmV0dXJuIHJldF92YWw7Ci0JfQotCiAJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfaWNoOGxhbikgJiYKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCiAJICAgICgqc3BlZWQgPT0gU1BFRURfMTAwMCkpIHsKQEAgLTI4NDMsOSArMzIxNiw4IEBACiAJCSAgICAgICAgICAgIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFOwogCQlldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAKLQkJLyogV29ya2Fyb3VuZCBTV0ZMQUcgdW5leHBlY3RlZGx5IHNldCBkdXJpbmcgUzAtPlN4ICovCiAJCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQotCQkJdWRlbGF5KDUwMCk7CisJCQllMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihodyk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMzExMyw5ICszNDg1LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgaWNoOF9udm1fb3BzID0gewotCS5hY3F1aXJlX252bQkJPSBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuLAorCS5hY3F1aXJlX252bQkJPSBlMTAwMF9hY3F1aXJlX252bV9pY2g4bGFuLAogCS5yZWFkX252bQkgCT0gZTEwMDBfcmVhZF9udm1faWNoOGxhbiwKLQkucmVsZWFzZV9udm0JCT0gZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbiwKKwkucmVsZWFzZV9udm0JCT0gZTEwMDBfcmVsZWFzZV9udm1faWNoOGxhbiwKIAkudXBkYXRlX252bQkJPSBlMTAwMF91cGRhdGVfbnZtX2NoZWNrc3VtX2ljaDhsYW4sCiAJLnZhbGlkX2xlZF9kZWZhdWx0CT0gZTEwMDBfdmFsaWRfbGVkX2RlZmF1bHRfaWNoOGxhbiwKIAkudmFsaWRhdGVfbnZtCQk9IGUxMDAwX3ZhbGlkYXRlX252bV9jaGVja3N1bV9pY2g4bGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCmluZGV4IDk5NDQwMWYuLjAzMTc1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKQEAgLTk1LDEzICs5NSw2IEBACiAvKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIENvbnRyb2wgMSAqLwogI2RlZmluZSBCTV9DU19DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgMTYKIAotLyogQk0gUEhZIENvcHBlciBTcGVjaWZpYyBTdGF0dXMgKi8KLSNkZWZpbmUgQk1fQ1NfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEJNX0NTX1NUQVRVU19MSU5LX1VQICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgQk1fQ1NfU1RBVFVTX1JFU09MVkVEICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBCTV9DU19TVEFUVVNfU1BFRURfTUFTSyAgICAgICAgICAgMHhDMDAwCi0jZGVmaW5lIEJNX0NTX1NUQVRVU19TUEVFRF8xMDAwICAgICAgICAgICAweDgwMDAKLQogI2RlZmluZSBIVl9NVVhfREFUQV9DVFJMICAgICAgICAgICAgICAgUEhZX1JFRyg3NzYsIDE2KQogI2RlZmluZSBIVl9NVVhfREFUQV9DVFJMX0dFTl9UT19NQUMgICAgMHgwNDAwCiAjZGVmaW5lIEhWX01VWF9EQVRBX0NUUkxfRk9SQ0VfU1BFRUQgICAweDAwMDQKQEAgLTE2NCwxNiArMTU3LDI1IEBACiAJCSAqIE1ESUMgbW9kZS4gTm8gaGFybSBpbiB0cnlpbmcgYWdhaW4gaW4gdGhpcyBjYXNlIHNpbmNlCiAJCSAqIHRoZSBQSFkgSUQgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50IGFueXdheQogCQkgKi8KKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKIAkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgdHJ1ZSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CisJCXBoeS0+b3BzLnJlbGVhc2VfcGh5KGh3KTsKIAogCQlyZXRyeV9jb3VudCsrOwogCX0KIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KLQlpZiAocmV0cnlfY291bnQpCisJaWYgKHJldHJ5X2NvdW50KSB7CisJCXJldF92YWwgPSBwaHktPm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CiAJCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIGZhbHNlKTsKKwkJcGh5LT5vcHMucmVsZWFzZV9waHkoaHcpOworCX0KIAogCXJldHVybiByZXRfdmFsOwogfQpAQCAtMzU0LDM4ICszNTYsMTE3IEBACiB9CiAKIC8qKgotICogIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwIC0gUmVhZCBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgX19lMTAwMGVfcmVhZF9waHlfcmVnX2lncCAtIFJlYWQgaWdwIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKKyAqICBhbmQgc3RvcmVzIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkCiAgKiAgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KICAqKi8KLXMzMiBlMTAwMGVfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJcmV0dXJuIHJldF92YWw7CisJaWYgKCFsb2NrZWQpIHsKKwkJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZV9waHkpKQorCQkJZ290byBvdXQ7CisKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKIAkJCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCQkJCSAgICAodTE2KW9mZnNldCk7Ci0JCWlmIChyZXRfdmFsKSB7Ci0JCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQorCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAotCQkJCQkgICBkYXRhKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CityZWxlYXNlOgorCWlmICghbG9ja2VkKQorCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CiAKKy8qKgorICogIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwIC0gUmVhZCBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgYW5kIHN0b3JlcyB0aGUKKyAqICByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4KKyAqICBSZWxlYXNlIHRoZSBhY3F1aXJlZCBzZW1hcGhvcmUgYmVmb3JlIGV4aXRpbmcuCisgKiovCitzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXJldHVybiBfX2UxMDAwZV9yZWFkX3BoeV9yZWdfaWdwKGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKK30KKworLyoqCisgKiAgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3BfbG9ja2VkIC0gUmVhZCBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgUmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgYW5kIHN0b3JlcyB0aGUgcmV0cmlldmVkIGluZm9ybWF0aW9uCisgKiAgaW4gZGF0YS4gIEFzc3VtZXMgc2VtYXBob3JlIGFscmVhZHkgYWNxdWlyZWQuCisgKiovCitzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3BfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMGVfcmVhZF9waHlfcmVnX2lncChodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCisgKiAgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwIC0gV3JpdGUgaWdwIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKKyAqICBhdCB0aGUgb2Zmc2V0LiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3N0YXRpYyBzMzIgX19lMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCit7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKCFsb2NrZWQpIHsKKwkJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZV9waHkpKQorCQkJZ290byBvdXQ7CisKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgeworCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJCQkJCSAgICAodTE2KW9mZnNldCk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byByZWxlYXNlOworCX0KKworCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAorCQkJCQkgICAgZGF0YSk7CisKK3JlbGVhc2U6CisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKworb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0zOTUsNTMgKzQ3Niw1MyBAQAogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bwogICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAogICoKLSAqICBBY3F1aXJlcyBzZW1hcGhvcmUsIGlmIG5lY2Vzc2FyeSwgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlcgogICogIGF0IHRoZSBvZmZzZXQuICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgogICoqLwogczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKLQlzMzIgcmV0X3ZhbDsKLQotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCi0JaWYgKG9mZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKLQkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCi0JCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0JCQkJCQkgICAgKHUxNilvZmZzZXQpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJcmV0dXJuIHJldF92YWw7Ci0JCX0KLQl9Ci0KLQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKLQkJCQkJICAgIGRhdGEpOwotCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCi0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIF9fZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwKGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKIH0KIAogLyoqCi0gKiAgZTEwMDBlX3JlYWRfa21ybl9yZWcgLSBSZWFkIGt1bWVyYW4gcmVnaXN0ZXIKKyAqICBlMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3BfbG9ja2VkIC0gV3JpdGUgaWdwIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4KKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncF9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwKGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKKyAqICBfX2UxMDAwX3JlYWRfa21ybl9yZWcgLSBSZWFkIGt1bWVyYW4gcmVnaXN0ZXIKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICogIEBsb2NrZWQ6IHNlbWFwaG9yZSBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIG9yIG5vdAogICoKICAqICBBY3F1aXJlcyBzZW1hcGhvcmUsIGlmIG5lY2Vzc2FyeS4gIFRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQKICAqICB1c2luZyB0aGUga3VtZXJhbiBpbnRlcmZhY2UuICBUaGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIGlzIHN0b3JlZCBpbiBkYXRhLgogICogIFJlbGVhc2UgYW55IGFjcXVpcmVkIHNlbWFwaG9yZXMgYmVmb3JlIGV4aXRpbmcuCiAgKiovCi1zMzIgZTEwMDBlX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBfX2UxMDAwX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7CiAJdTMyIGttcm5jdHJsc3RhOwotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOworCWlmICghbG9ja2VkKSB7CisJCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KSkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQogCiAJa21ybmN0cmxzdGEgPSAoKG9mZnNldCA8PCBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKIAkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVCkgfCBFMTAwMF9LTVJOQ1RSTFNUQV9SRU47CkBAIC00NTIsNDEgKzUzMywxMTEgQEAKIAlrbXJuY3RybHN0YSA9IGVyMzIoS01STkNUUkxTVEEpOwogCSpkYXRhID0gKHUxNilrbXJuY3RybHN0YTsKIAotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgotICogIGUxMDAwZV93cml0ZV9rbXJuX3JlZyAtIFdyaXRlIGt1bWVyYW4gcmVnaXN0ZXIKKyAqICBlMTAwMGVfcmVhZF9rbXJuX3JlZyAtICBSZWFkIGt1bWVyYW4gcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCisgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiByZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCB1c2luZyB0aGUKKyAqICBrdW1lcmFuIGludGVyZmFjZS4gIFRoZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgaXMgc3RvcmVkIGluIGRhdGEuCisgKiAgUmVsZWFzZSB0aGUgYWNxdWlyZWQgc2VtYXBob3JlIGJlZm9yZSBleGl0aW5nLgorICoqLworczMyIGUxMDAwZV9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF9yZWFkX2ttcm5fcmVnKGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKK30KKworLyoqCisgKiAgZTEwMDBlX3JlYWRfa21ybl9yZWdfbG9ja2VkIC0gIFJlYWQga3VtZXJhbiByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFRoZQorICogIGluZm9ybWF0aW9uIHJldHJpZXZlZCBpcyBzdG9yZWQgaW4gZGF0YS4KKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwZV9yZWFkX2ttcm5fcmVnX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfcmVhZF9rbXJuX3JlZyhodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCisgKiAgX19lMTAwMF93cml0ZV9rbXJuX3JlZyAtIFdyaXRlIGt1bWVyYW4gcmVnaXN0ZXIKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bwogICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICogIEBsb2NrZWQ6IHNlbWFwaG9yZSBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIG9yIG5vdAogICoKICAqICBBY3F1aXJlcyBzZW1hcGhvcmUsIGlmIG5lY2Vzc2FyeS4gIFRoZW4gd3JpdGUgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyCiAgKiAgYXQgdGhlIG9mZnNldCB1c2luZyB0aGUga3VtZXJhbiBpbnRlcmZhY2UuICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzCiAgKiAgYmVmb3JlIGV4aXRpbmcuCiAgKiovCi1zMzIgZTEwMDBlX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQorc3RhdGljIHMzMiBfX2UxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQogewogCXUzMiBrbXJuY3RybHN0YTsKLQlzMzIgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbCA9IDA7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlpZiAoIWxvY2tlZCkgeworCQlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkpCisJCQlnb3RvIG91dDsKKworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KIAogCWttcm5jdHJsc3RhID0gKChvZmZzZXQgPDwgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX1NISUZUKSAmCiAJCSAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVQpIHwgZGF0YTsKIAlldzMyKEtNUk5DVFJMU1RBLCBrbXJuY3RybHN0YSk7CiAKIAl1ZGVsYXkoMik7Ci0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKworb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKKyAqICBlMTAwMGVfd3JpdGVfa21ybl9yZWcgLSAgV3JpdGUga3VtZXJhbiByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQKKyAqICB1c2luZyB0aGUga3VtZXJhbiBpbnRlcmZhY2UuICBSZWxlYXNlIHRoZSBhY3F1aXJlZCBzZW1hcGhvcmUgYmVmb3JlIGV4aXRpbmcuCisgKiovCitzMzIgZTEwMDBlX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3dyaXRlX2ttcm5fcmVnKGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKK30KKworLyoqCisgKiAgZTEwMDBlX3dyaXRlX2ttcm5fcmVnX2xvY2tlZCAtICBXcml0ZSBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqCisgKiAgV3JpdGUgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQgdXNpbmcgdGhlIGt1bWVyYW4gaW50ZXJmYWNlLgorICogIEFzc3VtZXMgc2VtYXBob3JlIGFscmVhZHkgYWNxdWlyZWQuCisgKiovCitzMzIgZTEwMDBlX3dyaXRlX2ttcm5fcmVnX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF93cml0ZV9rbXJuX3JlZyhodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCiAgKiAgZTEwMDBfY29wcGVyX2xpbmtfc2V0dXBfODI1NzcgLSBTZXR1cCA4MjU3NyBQSFkgZm9yIGNvcHBlciBsaW5rCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0yMTA1LDYgKzIyNTYsMTAgQEAKIAl1MzIgcGFnZSA9IG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVDsKIAl1MzIgcGFnZV9zaGlmdCA9IDA7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgJmRhdGEsCkBAIC0yMTEyLDEwICsyMjY3LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KIAlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2JtX3BhZ2UocGFnZSwgb2Zmc2V0KTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMTM1LDE4ICsyMjg2LDE1IEBACiAJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLwogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgcGFnZV9zZWxlY3QsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IHBhZ2Vfc2hpZnQpKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQkJfQogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwogCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCiBvdXQ6CisJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yMTY3LDYgKzIzMTUsMTAgQEAKIAl1MzIgcGFnZSA9IG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVDsKIAl1MzIgcGFnZV9zaGlmdCA9IDA7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgZGF0YSwKQEAgLTIxNzQsMTAgKzIzMjYsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQogCWh3LT5waHkuYWRkciA9IGUxMDAwX2dldF9waHlfYWRkcl9mb3JfYm1fcGFnZShwYWdlLCBvZmZzZXQpOwogCiAJaWYgKG9mZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKQEAgLTIxOTcsMTcgKzIzNDUsMTQgQEAKIAkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBwYWdlX3NlbGVjdCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgcGFnZV9zaGlmdCkpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQl9CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogb3V0OgorCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjIyNiwxNyArMjM3MSwxNyBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBwYWdlID0gKHUxNikob2Zmc2V0ID4+IElHUF9QQUdFX1NISUZUKTsKIAorCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCiAJLyogUGFnZSA4MDAgd29ya3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgcmVzdCBzbyBpdCBoYXMgaXRzIG93biBmdW5jICovCiAJaWYgKHBhZ2UgPT0gQk1fV1VDX1BBR0UpIHsKIAkJcmV0X3ZhbCA9IGUxMDAwX2FjY2Vzc19waHlfd2FrZXVwX3JlZ19ibShodywgb2Zmc2V0LCBkYXRhLAogCQkJCQkJCSB0cnVlKTsKLQkJcmV0dXJuIHJldF92YWw7CisJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCiAJaHctPnBoeS5hZGRyID0gMTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMjQ1LDE2ICsyMzkwLDE0IEBACiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBCTV9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgcGFnZSk7CiAKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkJCQkJICAgZGF0YSk7CitvdXQ6CiAJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTIyNzIsMTcgKzI0MTUsMTcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGFnZSA9ICh1MTYpKG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVCk7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgJmRhdGEsCiAJCQkJCQkJIGZhbHNlKTsKLQkJcmV0dXJuIHJldF92YWw7CisJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCiAJaHctPnBoeS5hZGRyID0gMTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMjkwLDE3ICsyNDMzLDE1IEBACiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBCTV9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgcGFnZSk7CiAKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJCQkJCSAgICBkYXRhKTsKIAorb3V0OgogCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yMzIwLDYgKzI0NjEsOCBAQAogICogIDMpIFdyaXRlIHRoZSBhZGRyZXNzIHVzaW5nIHRoZSBhZGRyZXNzIG9wY29kZSAoMHgxMSkKICAqICA0KSBSZWFkIG9yIHdyaXRlIHRoZSBkYXRhIHVzaW5nIHRoZSBkYXRhIG9wY29kZSAoMHgxMikKICAqICA1KSBSZXN0b3JlIDc2OV8xNy4yIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorICoKKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgogICoqLwogc3RhdGljIHMzMiBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKIAkJCQkJICB1MTYgKmRhdGEsIGJvb2wgcmVhZCkKQEAgLTIzMjcsMjAgKzI0NzAsMTIgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcmVnID0gQk1fUEhZX1JFR19OVU0ob2Zmc2V0KTsKIAl1MTYgcGh5X3JlZyA9IDA7Ci0JdTggIHBoeV9hY3F1aXJlZCA9IDE7Ci0KIAogCS8qIEdpZyBtdXN0IGJlIGRpc2FibGVkIGZvciBNRElPIGFjY2Vzc2VzIHRvIHBhZ2UgODAwICovCiAJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSAmJgogCSAgICghKGVyMzIoUEhZX0NUUkwpICYgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKSkKIAkJaHdfZGJnKGh3LCAiQXR0ZW1wdGluZyB0byBhY2Nlc3MgcGFnZSA4MDAgd2hpbGUgZ2lnIGVuYWJsZWRcbiIpOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlwaHlfYWNxdWlyZWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBBbGwgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBwaHkgYWRkcmVzcyAxICovCiAJaHctPnBoeS5hZGRyID0gMTsKIApAQCAtMjM5Nyw4ICsyNTMyLDYgQEAKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgQk1fV1VDX0VOQUJMRV9SRUcsIHBoeV9yZWcpOwogCiBvdXQ6Ci0JaWYgKHBoeV9hY3F1aXJlZCA9PSAxKQotCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTI0MzksNTIgKzI1NzIsNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiAgZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2IC0gU2V0IHNsb3cgTURJTyBhY2Nlc3MgbW9kZQorICogIEBodzogICBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAc2xvdzogdHJ1ZSBmb3Igc2xvdyBtb2RlLCBmYWxzZSBmb3Igbm9ybWFsIG1vZGUKKyAqCisgKiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KIHMzMiBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBzbG93KQogewogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgZGF0YSA9IDA7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCS8qIFNldCBNRElPIG1vZGUgLSBwYWdlIDc2OSwgcmVnaXN0ZXIgMTY6IDB4MjU4MD09c2xvdywgMHgyMTgwPT1mYXN0ICovCiAJaHctPnBoeS5hZGRyID0gMTsKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJICAgICAgICAgKEJNX1BPUlRfQ1RSTF9QQUdFIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JaWYgKHJldF92YWwpIHsKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQlyZXR1cm4gcmV0X3ZhbDsKLQl9CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIEJNX0NTX0NUUkwxLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjE4MCB8IChzbG93IDw8IDEwKSkpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAogCS8qIGR1bW15IHJlYWQgd2hlbiByZXZlcnRpbmcgdG8gZmFzdCBtb2RlIC0gdGhyb3cgYXdheSByZXN1bHQgKi8KIAlpZiAoIXNsb3cpCi0JCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgQk1fQ1NfQ1RSTDEsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgQk1fQ1NfQ1RSTDEsICZkYXRhKTsKIAotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQorb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX3BoeV9yZWdfaHYgLSAgUmVhZCBIViBQSFkgcmVnaXN0ZXIKKyAqICBfX2UxMDAwX3JlYWRfcGh5X3JlZ19odiAtICBSZWFkIEhWIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKKyAqICBhbmQgc3RvcmVzIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkCiAgKiAgc2VtYXBob3JlIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfcmVhZF9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7CiAJczMyIHJldF92YWw7CiAJdTE2IHBhZ2UgPSBCTV9QSFlfUkVHX1BBR0Uob2Zmc2V0KTsKIAl1MTYgcmVnID0gQk1fUEhZX1JFR19OVU0ob2Zmc2V0KTsKIAlib29sIGluX3Nsb3dfbW9kZSA9IGZhbHNlOwogCisJaWYgKCFsb2NrZWQpIHsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKIAkvKiBXb3JrYXJvdW5kIGZhaWx1cmUgaW4gTURJTyBhY2Nlc3Mgd2hpbGUgY2FibGUgaXMgZGlzY29ubmVjdGVkICovCiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSAmJgogCSAgICAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpIHsKQEAgLTI1MDgsMTAgKzI2NTIsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQogCWh3LT5waHkuYWRkciA9IGUxMDAwX2dldF9waHlfYWRkcl9mb3JfaHZfcGFnZShwYWdlKTsKIAogCWlmIChwYWdlID09IEhWX0lOVENfRkNfUEFHRV9TVEFSVCkKQEAgLTI1MjksNDIgKzI2NjksNzYgQEAKIAkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWlmIChyZXRfdmFsKSB7Ci0JCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJCWdvdG8gb3V0OwotCQkJfQogCQkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CiAJCX0KIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKIAkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMF93cml0ZV9waHlfcmVnX2h2IC0gV3JpdGUgSFYgUEhZIHJlZ2lzdGVyCisgKiAgZTEwMDBfcmVhZF9waHlfcmVnX2h2IC0gIFJlYWQgSFYgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgYW5kIHN0b3JlcworICogIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZQorICogIGJlZm9yZSBleGl0aW5nLgorICoqLworczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfcmVhZF9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKK30KKworLyoqCisgKiAgZTEwMDBfcmVhZF9waHlfcmVnX2h2X2xvY2tlZCAtICBSZWFkIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbgorICogIGluIGRhdGEuICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3JlYWRfcGh5X3JlZ19odihodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCisgKiAgX19lMTAwMF93cml0ZV9waHlfcmVnX2h2IC0gV3JpdGUgSFYgUEhZIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KICAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqICBAbG9ja2VkOiBzZW1hcGhvcmUgaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCBvciBub3QKICAqCiAgKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlcgogICogIGF0IHRoZSBvZmZzZXQuICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfd3JpdGVfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQogewogCXMzMiByZXRfdmFsOwogCXUxNiBwYWdlID0gQk1fUEhZX1JFR19QQUdFKG9mZnNldCk7CiAJdTE2IHJlZyA9IEJNX1BIWV9SRUdfTlVNKG9mZnNldCk7CiAJYm9vbCBpbl9zbG93X21vZGUgPSBmYWxzZTsKIAorCWlmICghbG9ja2VkKSB7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJfQorCiAJLyogV29ya2Fyb3VuZCBmYWlsdXJlIGluIE1ESU8gYWNjZXNzIHdoaWxlIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYKIAkgICAgIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CkBAIC0yNTg4LDEwICsyNzYyLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KIAlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UocGFnZSk7CiAKIAlpZiAocGFnZSA9PSBIVl9JTlRDX0ZDX1BBR0VfU1RBUlQpCkBAIC0yNjA3LDE1ICsyNzc3LDEwIEBACiAJICAgICgoTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZykgPT0gMCkgJiYKIAkgICAgKGRhdGEgJiAoMSA8PCAxMSkpKSB7CiAJCXUxNiBkYXRhMiA9IDB4N0VGRjsKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV9kZWJ1Z19yZWdzX2h2KGh3LCAoMSA8PCA2KSB8IDB4MywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YTIsIGZhbHNlKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWdvdG8gb3V0OwogCX0KIAogCWlmIChyZWcgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yNjMwLDI3ICsyNzk1LDUzIEBACiAJCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlpZiAocmV0X3ZhbCkgewotCQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KIAkJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOwogCQl9CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiByZWcsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAogb3V0OgogCS8qIFJldmVydCB0byBNRElPIGZhc3QgbW9kZSwgaWYgYXBwbGljYWJsZSAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYgaW5fc2xvd19tb2RlKQogCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CiAKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgorICogIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYgLSBXcml0ZSBIViBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQuCisgKiAgUmVsZWFzZSB0aGUgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3dyaXRlX3BoeV9yZWdfaHYoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZCAtIFdyaXRlIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4gIEFzc3VtZXMgc2VtYXBob3JlCisgKiAgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF93cml0ZV9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKICAqICBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UgLSBHZXQgUEhZIGFkcnJlc3MgYmFzZWQgb24gcGFnZQogICogIEBwYWdlOiBwYWdlIHRvIGJlIGFjY2Vzc2VkCiAgKiovCkBAIC0yNjcxLDEwICsyODYyLDkgQEAKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSByZWFkIG9yIHdyaXR0ZW4KICAqICBAcmVhZDogZGV0ZXJtaW5lcyBpZiBvcGVyYXRpb24gaXMgcmVhZCBvciB3cml0dGVuCiAgKgotICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJlaXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKLSAqICBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLiAgTm90ZSB0aGF0IHRoZSBwcm9jZWR1cmUgdG8gcmVhZCB0aGVzZSByZWdzCi0gKiAgdXNlcyB0aGUgYWRkcmVzcyBwb3J0IGFuZCBkYXRhIHBvcnQgdG8gcmVhZC93cml0ZS4KKyAqICBSZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXRyZWl2ZWQgaW5mb3JtYXRpb24KKyAqICBpbiBkYXRhLiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4gIE5vdGUgdGhhdCB0aGUgcHJvY2VkdXJlCisgKiAgdG8gcmVhZCB0aGVzZSByZWdzIHVzZXMgdGhlIGFkZHJlc3MgcG9ydCBhbmQgZGF0YSBwb3J0IHRvIHJlYWQvd3JpdGUuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX2FjY2Vzc19waHlfZGVidWdfcmVnc19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhLCBib29sIHJlYWQpCkBAIC0yNjgyLDIwICsyODcyLDEyIEBACiAJczMyIHJldF92YWw7CiAJdTMyIGFkZHJfcmVnID0gMDsKIAl1MzIgZGF0YV9yZWcgPSAwOwotCXU4ICBwaHlfYWNxdWlyZWQgPSAxOwogCiAJLyogVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBkaWZmZXJlbmNlIHdpdGggZGVza3RvcCB2cyBtb2JpbGUgcGh5ICovCiAJYWRkcl9yZWcgPSAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgPwogCSAgICAgICAgICAgSTgyNTc4X0FERFJfUkVHIDogSTgyNTc3X0FERFJfUkVHOwogCWRhdGFfcmVnID0gYWRkcl9yZWcgKyAxOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJDb3VsZCBub3QgYWNxdWlyZSBQSFlcbiIpOwotCQlwaHlfYWNxdWlyZWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBBbGwgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBwaHkgYWRkcmVzcyAyICovCiAJaHctPnBoeS5hZGRyID0gMjsKIApAQCAtMjcxOCw4ICsyOTAwLDYgQEAKIAl9CiAKIG91dDoKLQlpZiAocGh5X2FjcXVpcmVkID09IDEpCi0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggOTZmNWIyYS4uZjdkOWFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0yMjMsMjQgKzIyMywyNSBAQAogCXUzMiBhZGRyOwogfTsKIAotc3RhdGljIHUzMiBldGhvY19yZWFkKHN0cnVjdCBldGhvYyAqZGV2LCBsb2ZmX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1MzIgZXRob2NfcmVhZChzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCkKIHsKIAlyZXR1cm4gaW9yZWFkMzIoZGV2LT5pb2Jhc2UgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBldGhvY193cml0ZShzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCwgdTMyIGRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGUoc3RydWN0IGV0aG9jICpkZXYsIGxvZmZfdCBvZmZzZXQsIHUzMiBkYXRhKQogewogCWlvd3JpdGUzMihkYXRhLCBkZXYtPmlvYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3JlYWRfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19yZWFkX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCisJCXN0cnVjdCBldGhvY19iZCAqYmQpCiB7CiAJbG9mZl90IG9mZnNldCA9IEVUSE9DX0JEX0JBU0UgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IGV0aG9jX2JkKSk7CiAJYmQtPnN0YXQgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgMCk7CiAJYmQtPmFkZHIgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgNCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3dyaXRlX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGVfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwKIAkJY29uc3Qgc3RydWN0IGV0aG9jX2JkICpiZCkKIHsKIAlsb2ZmX3Qgb2Zmc2V0ID0gRVRIT0NfQkRfQkFTRSArIChpbmRleCAqIHNpemVvZihzdHJ1Y3QgZXRob2NfYmQpKTsKQEAgLTI0OCwzMyArMjQ5LDMzIEBACiAJZXRob2Nfd3JpdGUoZGV2LCBvZmZzZXQgKyA0LCBiZC0+YWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCXUzMiBpbWFzayA9IGV0aG9jX3JlYWQoZGV2LCBJTlRfTUFTSyk7CiAJaW1hc2sgfD0gbWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Rpc2FibGVfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19kaXNhYmxlX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCiB7CiAJdTMyIGltYXNrID0gZXRob2NfcmVhZChkZXYsIElOVF9NQVNLKTsKIAlpbWFzayAmPSB+bWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCWV0aG9jX3dyaXRlKGRldiwgSU5UX1NPVVJDRSwgbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZW5hYmxlX3J4X2FuZF90eChzdHJ1Y3QgZXRob2MgKmRldikKIHsKIAl1MzIgbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CiAJbW9kZSB8PSBNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTjsKIAlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCiB7CiAJdTMyIG1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOwogCW1vZGUgJj0gfihNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTik7CkBAIC01MDgsNyArNTA5LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwlldGhvY19hY2tfaXJxKHByaXYsIHBlbmRpbmcpOwogCiAJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19CVVNZKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicGFja2V0IGRyb3BwZWRcbiIpOwpAQCAtNjY0LDcgKzY2NSw4IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUWC9SWCBidWZmZXJzLCBtYXhpbXVtIDEyOCBzdXBwb3J0ZWQgKi8KLQludW1fYmQgPSBtaW4oMTI4LCAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQgKyAxKSAvIEVUSE9DX0JVRlNJWik7CisJbnVtX2JkID0gbWluX3QodW5zaWduZWQgaW50LAorCQkxMjgsIChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laKTsKIAlwcml2LT5udW1fdHggPSBtYXgobWluX3R4LCBudW1fYmQgLyA0KTsKIAlwcml2LT5udW1fcnggPSBudW1fYmQgLSBwcml2LT5udW1fdHg7CiAJZXRob2Nfd3JpdGUocHJpdiwgVFhfQkRfTlVNLCBwcml2LT5udW1fdHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyOTIzNDM4Li4xNmExZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMTY1NCw3ICsxNjU0LDcgQEAKICAgKgogICAqIGluZGV4IGlzIG9ubHkgdXNlZCBpbiBsZWdhY3kgY29kZQogICAqLwotaW50IF9faW5pdCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJ1ZmRlc2MgKmNiZF9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggYzQwMTEzZi4uNjZkYWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC03NTksMTIgKzc1OSw2IEBACiAKIAltcGM1Mnh4X2ZlY19od19pbml0KGRldik7CiAKLQlpZiAocHJpdi0+cGh5ZGV2KSB7Ci0JCXBoeV9zdG9wKHByaXYtPnBoeWRldik7Ci0JCXBoeV93cml0ZShwcml2LT5waHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7Ci0JfQotCiAJYmNvbV9mZWNfcnhfcmVzZXQocHJpdi0+cnhfZG1hdHNrKTsKIAliY29tX2ZlY190eF9yZXNldChwcml2LT50eF9kbWF0c2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCmluZGV4IDMxZTZkNjIuLmVlMGYzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCkBAIC0xNTUsNiArMTU1LDcgQEAKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDBiLWZlYy1waHkiLCB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXBjNTJ4eF9mZWNfbWRpb19tYXRjaCk7CiAKIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9mZWNfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAibXBjNTIwMGItZmVjLXBoeSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCAyYmMyZDJiLi5lYzJmNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTExMTAsNiArMTExMCw3IEBACiAjZW5kaWYKIAl7fQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzX2VuZXRfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc19lbmV0X2RyaXZlciA9IHsKIAkubmFtZQk9ICJmc19lbmV0IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwppbmRleCA5M2I0ODFiLi4yNGZmOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCkBAIC0yMjEsNiArMjIxLDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzX2VuZXRfbWRpb19iYl9tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzX2VuZXRfYmJfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZnNsLWJiLW1kaW8iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCBhMmQ2OWMxLi45NmViYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAjZW5kaWYKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc19lbmV0X21kaW9fZmVjX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNfZW5ldF9mZWNfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZnNsLWZlYy1tZGlvIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IGQxNjcwOTAuLmVmYmY2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtNDA3LDYgKzQwNyw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc2xfcHFfbWRpb19tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzbF9wcV9tZGlvX2RyaXZlciA9IHsKIAkubmFtZSA9ICJmc2wtcHFfbWRpbyIsCkBAIC00MjYsMyArNDI3LDQgQEAKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGZzbF9wcV9tZGlvX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDFlNTI4OWYuLjViZjMxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTIzMjUsOSArMjMyNSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06ZnNsLWdpYW5mYXIiKTsKLQogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tYXRjaFtdID0KIHsKIAl7CkBAIC0yMzM2LDYgKzIzMzMsNyBAQAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7CiAKIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCA4OWM4MmM1Li4zZmFlODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00NDMsNyArNDQ0LDcgQEAKIAkJcmV0IHw9IEVNQUNfTVIxX1RGU18ySzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gUnggRklGTyBzaXplICVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBUeCBGSUZPIHNpemUgJWRcbiIsCiAJCSAgICAgICBkZXYtPm5kZXYtPm5hbWUsIHR4X3NpemUpOwogCX0KIApAQCAtNDcwLDYgKzQ3MSw5IEBACiAJREJHMihkZXYsICJfX2VtYWM0X2NhbGNfYmFzZV9tcjEiIE5MKTsKIAogCXN3aXRjaCh0eF9zaXplKSB7CisJY2FzZSAxNjM4NDoKKwkJcmV0IHw9IEVNQUM0X01SMV9URlNfMTZLOworCQlicmVhazsKIAljYXNlIDQwOTY6CiAJCXJldCB8PSBFTUFDNF9NUjFfVEZTXzRLOwogCQlicmVhazsKQEAgLTQ3Nyw3ICs0ODEsNyBAQAogCQlyZXQgfD0gRU1BQzRfTVIxX1RGU18ySzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gUnggRklGTyBzaXplICVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBUeCBGSUZPIHNpemUgJWRcbiIsCiAJCSAgICAgICBkZXYtPm5kZXYtPm5hbWUsIHR4X3NpemUpOwogCX0KIApAQCAtMjk4NSw2ICsyOTg5LDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGVtYWNfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBlbWFjX2RyaXZlciA9IHsKIAkubmFtZSA9ICJlbWFjIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2VtYWMuaCBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2VtYWMuaAppbmRleCAwYWZjMmNmLi5kMzRhZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9lbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvZW1hYy5oCkBAIC0xNTMsNiArMTUzLDcgQEAKICNkZWZpbmUgRU1BQzRfTVIxX1JGU18xNksJCTB4MDAyODAwMDAKICNkZWZpbmUgRU1BQzRfTVIxX1RGU18ySyAgICAgICAJCTB4MDAwMjAwMDAKICNkZWZpbmUgRU1BQzRfTVIxX1RGU180SwkJMHgwMDAzMDAwMAorI2RlZmluZSBFTUFDNF9NUjFfVEZTXzE2SwkJMHgwMDA1MDAwMAogI2RlZmluZSBFTUFDNF9NUjFfVFIJCQkweDAwMDA4MDAwCiAjZGVmaW5lIEVNQUM0X01SMV9NV1NXXzAwMQkJMHgwMDAwMTAwMAogI2RlZmluZSBFTUFDNF9NUjFfSlBTTQkJCTB4MDAwMDA4MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lmYi5jIGIvZHJpdmVycy9uZXQvaWZiLmMKaW5kZXggODAxZjA4OC4uMDMwOTEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWZiLmMKKysrIGIvZHJpdmVycy9uZXQvaWZiLmMKQEAgLTk4LDEyICs5OCwxMyBAQAogCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCQlzdGF0cy0+dHhfYnl0ZXMgKz1za2ItPmxlbjsKIAotCQlza2ItPmRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKKwkJc2tiLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOwogCQlpZiAoIXNrYi0+ZGV2KSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJYnJlYWs7CiAJCX0KKwkJZGV2X3B1dChza2ItPmRldik7CiAJCXNrYi0+aWlmID0gX2Rldi0+aWZpbmRleDsKIAogCQlpZiAoZnJvbSAmIEFUX0VHUkVTUykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBkZWFlYThmLi5iMjQzZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtNzMyLDcgKzczMiw3IEBACiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaWdiX3JpbmcgKnRlbXBfcmluZzsKLQlpbnQgaSwgZXJyOworCWludCBpLCBlcnIgPSAwOwogCXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKIAogCWlmICgocmluZy0+cnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy0+cnhfanVtYm9fcGVuZGluZykpCkBAIC03NTIsMTggKzc1MiwzMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJYWRhcHRlci0+dHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDsKKwkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJZ290byBjbGVhcl9yZXNldDsKKwl9CisKIAlpZiAoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA+IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpCiAJCXRlbXBfcmluZyA9IHZtYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKIAllbHNlCiAJCXRlbXBfcmluZyA9IHZtYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKLQlpZiAoIXRlbXBfcmluZykKLQkJcmV0dXJuIC1FTk9NRU07CiAKLQl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwlpZiAoIXRlbXBfcmluZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFyX3Jlc2V0OworCX0KIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYl9kb3duKGFkYXB0ZXIpOworCWlnYl9kb3duKGFkYXB0ZXIpOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBqdXN0IGZyZWUgZXZlcnl0aGluZyBhbmQgdGhlbiBzZXR1cCBhZ2FpbiwKQEAgLTgyMCwxNCArODMyLDExIEBACiAKIAkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIAl9Ci0KLQllcnIgPSAwOwogZXJyX3NldHVwOgotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYl91cChhZGFwdGVyKTsKLQotCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWdiX3VwKGFkYXB0ZXIpOwogCXZmcmVlKHRlbXBfcmluZyk7CitjbGVhcl9yZXNldDoKKwljbGVhcl9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYwppbmRleCBlZTE3YTA5Li5jNjgyNjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCkBAIC0yNzksNyArMjc5LDcgQEAKIHsKIAlzdHJ1Y3QgaWdidmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGlnYnZmX3JpbmcgKnRlbXBfcmluZzsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKIAogCWlmICgocmluZy0+cnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy0+cnhfanVtYm9fcGVuZGluZykpCkBAIC0yOTksMTUgKzI5OSwyMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl0ZW1wX3JpbmcgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaWdidmZfcmluZykpOwotCWlmICghdGVtcF9yaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQotCQlpZ2J2Zl9kb3duKGFkYXB0ZXIpOworCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCWFkYXB0ZXItPnR4X3JpbmctPmNvdW50ID0gbmV3X3R4X2NvdW50OworCQlhZGFwdGVyLT5yeF9yaW5nLT5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJZ290byBjbGVhcl9yZXNldDsKKwl9CisKKwl0ZW1wX3JpbmcgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaWdidmZfcmluZykpOworCWlmICghdGVtcF9yaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gY2xlYXJfcmVzZXQ7CisJfQorCisJaWdidmZfZG93bihhZGFwdGVyKTsKIAogCS8qCiAJICogV2UgY2FuJ3QganVzdCBmcmVlIGV2ZXJ5dGhpbmcgYW5kIHRoZW4gc2V0dXAgYWdhaW4sCkBAIC0zMzksMTQgKzM0NiwxMSBAQAogCiAJCW1lbWNweShhZGFwdGVyLT5yeF9yaW5nLCB0ZW1wX3Jpbmcsc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9yaW5nKSk7CiAJfQotCi0JZXJyID0gMDsKIGVycl9zZXR1cDoKLQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQotCQlpZ2J2Zl91cChhZGFwdGVyKTsKLQotCWNsZWFyX2JpdChfX0lHQlZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZ2J2Zl91cChhZGFwdGVyKTsKIAl2ZnJlZSh0ZW1wX3JpbmcpOworY2xlYXJfcmVzZXQ6CisJY2xlYXJfYml0KF9fSUdCVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCmluZGV4IDM4YmY3Y2YuLmM0MTJlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwpAQCAtMjMyLDggKzIzMiwxMSBAQAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIHBvcnRzIGZvciB0aGlzIGRldmljZSBhcmUgc2V0dXAgY29ycmVjdGx5LgogCSAqLwotCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApCi0JCXNpLT5wZGF0YS0+c3RhcnR1cChzaS0+ZGV2KTsKKwlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKQl7CisJCXJldCA9IHNpLT5wZGF0YS0+c3RhcnR1cChzaS0+ZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJLyoKIAkgKiBDb25maWd1cmUgUFBDIGZvciBJUkRBIC0gd2Ugd2FudCB0byBkcml2ZSBUWEQyIGxvdy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCBmYTMxNGNiLi44NTZjMThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC03OTgsNyArNzk4LDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnRlbXBfdHhfcmluZywgKnRlbXBfcnhfcmluZzsKLQlpbnQgaSwgZXJyOworCWludCBpLCBlcnIgPSAwOwogCXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKIAlib29sIG5lZWRfdXBkYXRlID0gZmFsc2U7CiAKQEAgLTgyMiw2ICs4MjIsMTYgQEAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbXNsZWVwKDEpOwogCisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OworCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCQlnb3RvIGVycl9zZXR1cDsKKwl9CisKIAl0ZW1wX3R4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCiAJICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRlbXBfdHhfcmluZykgewpAQCAtODc5LDggKzg4OSw3IEBACiAKIAkvKiBpZiByaW5ncyBuZWVkIHRvIGJlIHVwZGF0ZWQsIGhlcmUncyB0aGUgcGxhY2UgdG8gZG8gaXQgaW4gb25lIHNob3QgKi8KIAlpZiAobmVlZF91cGRhdGUpIHsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CiAKIAkJLyogdHggKi8KIAkJaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50KSB7CkBAIC04OTcsMTMgKzkwNiw4IEBACiAJCQl0ZW1wX3J4X3JpbmcgPSBOVUxMOwogCQkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIAkJfQotCX0KLQotCS8qIHN1Y2Nlc3MhICovCi0JZXJyID0gMDsKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiZV91cChhZGFwdGVyKTsKLQorCX0KIGVycl9zZXR1cDoKIAljbGVhcl9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCBjYmIxNDNjLi41YmQ5ZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC00NCw2ICs0NCw3IEBACiAKICNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgogCiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW10gPSAiaXhnYmUiOwogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KQEAgLTIyNiw2ICsyMjcsNTYgQEAKIAkvKiB0eF9idWZmZXJfaW5mbyBtdXN0IGJlIGNvbXBsZXRlbHkgc2V0IHVwIGluIHRoZSB0cmFuc21pdCBwYXRoICovCiB9CiAKKy8qKgorICogaXhnYmVfdHhfaXNfcGF1c2VkIC0gY2hlY2sgaWYgdGhlIHR4IHJpbmcgaXMgcGF1c2VkCisgKiBAYWRhcHRlcjogdGhlIGl4Z2JlIGFkYXB0ZXIKKyAqIEB0eF9yaW5nOiB0aGUgY29ycmVzcG9uZGluZyB0eF9yaW5nCisgKgorICogSWYgbm90IGluIERDQiBtb2RlLCBjaGVja3MgVEZDUy5UWE9GRiwgb3RoZXJ3aXNlLCBmaW5kIG91dCB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgVEMgb2YgdGhpcyB0eF9yaW5nIHdoZW4gY2hlY2tpbmcgVEZDUy4KKyAqCisgKiBSZXR1cm5zIDogdHJ1ZSBpZiBwYXVzZWQKKyAqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3R4X2lzX3BhdXNlZChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCit7CisJaW50IHRjOworCXUzMiB0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkY7CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlpbnQgcmVnX2lkeCA9IHR4X3JpbmctPnJlZ19pZHg7CisJCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdGMgPSByZWdfaWR4ID4+IDI7CisJCQl0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkYwOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQl0YyA9IDA7CisJCQl0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkY7CisJCQlpZiAoZGNiX2kgPT0gOCkgeworCQkJCS8qIFRDMCwgVEMxICovCisJCQkJdGMgPSByZWdfaWR4ID4+IDU7CisJCQkJaWYgKHRjID09IDIpIC8qIFRDMiwgVEMzICovCisJCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDQ7CisJCQkJZWxzZSBpZiAodGMgPT0gMykgLyogVEM0LCBUQzUsIFRDNiwgVEM3ICovCisJCQkJCXRjICs9IDEgKyAoKHJlZ19pZHggLSA5NikgPj4gMyk7CisJCQl9IGVsc2UgaWYgKGRjYl9pID09IDQpIHsKKwkJCQkvKiBUQzAsIFRDMSAqLworCQkJCXRjID0gcmVnX2lkeCA+PiA2OworCQkJCWlmICh0YyA9PSAxKSB7CisJCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDU7CisJCQkJCWlmICh0YyA9PSAyKSAvKiBUQzIsIFRDMyAqLworCQkJCQkJdGMgKz0gKHJlZ19pZHggLSA5NikgPj4gNDsKKwkJCQl9CisJCQl9CisJCX0KKwkJdHhvZmYgPDw9IHRjOworCX0KKyNlbmRpZgorCXJldHVybiBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1RGQ1MpICYgdHhvZmY7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jaGVja190eF9oYW5nKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW9wKQpAQCAtMjM3LDcgKzI4OCw3IEBACiAJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKIAlpZiAodHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopICYmCi0JICAgICEoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URkNTKSAmIElYR0JFX1RGQ1NfVFhPRkYpKSB7CisJICAgICFpeGdiZV90eF9pc19wYXVzZWQoYWRhcHRlciwgdHhfcmluZykpIHsKIAkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCiAJCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICp0eF9kZXNjOwogCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGVvcCk7CkBAIC00MTIsMTkgKzQ2MywyMyBAQAogCXUzMiB0eGN0cmw7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAlpbnQgcSA9IHR4X3JpbmcgLSBhZGFwdGVyLT50eF9yaW5nOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAodHhfcmluZy0+Y3B1ICE9IGNwdSkgewotCQl0eGN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9UWENUUkwocSkpOwogCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpKTsKIAkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwogCQkJdHhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOworCQkJdHhjdHJsIHw9IElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU47CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkwocSksIHR4Y3RybCk7CiAJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHEpKTsKIAkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OwogCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAotCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJCSAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHEpLCB0eGN0cmwpOwogCQl9Ci0JCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpLCB0eGN0cmwpOwogCQl0eF9yaW5nLT5jcHUgPSBjcHU7CiAJfQogCXB1dF9jcHUoKTsKQEAgLTE5MTMsMTEgKzE5NjgsMjUgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQl1MzIgcnR0ZGNzOworCisJCS8qIGRpc2FibGUgdGhlIGFyYml0ZXIgd2hpbGUgc2V0dGluZyBNVFFDICovCisJCXJ0dGRjcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SVFREQ1MpOworCQlydHRkY3MgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJ0dGRjcyk7CisKIAkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLwogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCAoSVhHQkVfTVRRQ19SVF9FTkEgfAogCQkJICAgICAgICAgICAgICAgIElYR0JFX01UUUNfOFRDXzhUUSkpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIElYR0JFX01UUUNfNjRRXzFQQik7CisKKwkJLyogcmUtZWFibGUgdGhlIGFyYml0ZXIgKi8KKwkJcnR0ZGNzICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcnR0ZGNzKTsKIAl9CiB9CiAKQEAgLTI0NzEsNyArMjU0MCwxMCBAQAogCWl4Z2JlX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgewotCQluZXRpZl9zZXRfZ3NvX21heF9zaXplKG5ldGRldiwgMzI3NjgpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShuZXRkZXYsIDMyNzY4KTsKKwkJZWxzZQorCQkJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShuZXRkZXYsIDY1NTM2KTsKIAkJaXhnYmVfY29uZmlndXJlX2RjYihhZGFwdGVyKTsKIAl9IGVsc2UgewogCQluZXRpZl9zZXRfZ3NvX21heF9zaXplKG5ldGRldiwgNjU1MzYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwppbmRleCBiMDJhOTgxLi4zNGE2Y2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwpAQCAtMTE5LDI0ICsxMTksOSBAQAogCX0KIH07CiAKLXN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2Ci17Ci0Jc3RydWN0IGl4cGRldl9wcml2CQlpeHBkZXZfcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkJc3RhdHM7Ci19OwotCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5kc1szXTsKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBsaW5rX2NoZWNrX3RpbWVyOwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVucDI2MTFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGVucDI2MTFfaXhwZGV2X3ByaXYgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXBtMzM4Nl9nZXRfc3RhdHMoaXAtPml4cGRldl9wcml2LmNoYW5uZWwsICYoaXAtPnN0YXRzKSk7Ci0KLQlyZXR1cm4gJihpcC0+c3RhdHMpOwotfQotCiAvKiBAQEAgUG9sbCB0aGUgU0ZQIG1vZGRlZjAgbGluZSB0b28uICAqLwogLyogQEBAIFRyeSB0byB1c2UgdGhlIHBtMzM4NiBET09MIGludGVycnVwdCBhcyB3ZWxsLiAgKi8KIHN0YXRpYyB2b2lkIGVucDI2MTFfY2hlY2tfbGlua19zdGF0dXModW5zaWduZWQgbG9uZyBfX2R1bW15KQpAQCAtMjAzLDE0ICsxODgsMTMgQEAKIAogCXBvcnRzID0gcG0zMzg2X3BvcnRfY291bnQoKTsKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewotCQluZHNbaV0gPSBpeHBkZXZfYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2KSk7CisJCW5kc1tpXSA9IGl4cGRldl9hbGxvYyhpLCBzaXplb2Yoc3RydWN0IGl4cGRldl9wcml2KSk7CiAJCWlmIChuZHNbaV0gPT0gTlVMTCkgewogCQkJd2hpbGUgKC0taSA+PSAwKQogCQkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCW5kc1tpXS0+Z2V0X3N0YXRzID0gZW5wMjYxMV9nZXRfc3RhdHM7CiAJCXBtMzM4Nl9pbml0X3BvcnQoaSk7CiAJCXBtMzM4Nl9nZXRfbWFjKGksIG5kc1tpXS0+ZGV2X2FkZHIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDEyNzI0MzQuLjlhZWUwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIml4cDI0MDBfdHgudWNvZGUiCiAjaW5jbHVkZSAiaXhwZGV2X3ByaXYuaCIKICNpbmNsdWRlICJpeHBkZXYuaCIKKyNpbmNsdWRlICJwbTMzODYuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuMiIKIApAQCAtMjcxLDYgKzI3MiwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKml4cGRldl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXhwZGV2X3ByaXYgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXBtMzM4Nl9nZXRfc3RhdHMoaXAtPmNoYW5uZWwsICYoZGV2LT5zdGF0cykpOworCisJcmV0dXJuICYoZGV2LT5zdGF0cyk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhwZGV2X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGl4cGRldl9vcGVuLAogCS5uZG9fc3RvcAkJPSBpeHBkZXZfY2xvc2UsCkBAIC0yNzgsNiArMjg4LDcgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb19nZXRfc3RhdHMJCT0gaXhwZGV2X2dldF9zdGF0cywKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gaXhwZGV2X3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCAyMzc4MzU4Li5hMjNmNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtMTcxLDYgKzE3MSwzNiBAQAogfQogCiAvKioKKyAqIGtzODg1MV93cnJlZzggLSB3cml0ZSA4Yml0IHJlZ2lzdGVyIHZhbHVlIHRvIGNoaXAKKyAqIEBrczogVGhlIGNoaXAgc3RhdGUKKyAqIEByZWc6IFRoZSByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsOiBUaGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBJc3N1ZSBhIHdyaXRlIHRvIHB1dCB0aGUgdmFsdWUgQHZhbCBpbnRvIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgaW4gQHJlZy4KKyAqLworc3RhdGljIHZvaWQga3M4ODUxX3dycmVnOChzdHJ1Y3Qga3M4ODUxX25ldCAqa3MsIHVuc2lnbmVkIHJlZywgdW5zaWduZWQgdmFsKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIgPSAma3MtPnNwaV94ZmVyMTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9ICZrcy0+c3BpX21zZzE7CisJX19sZTE2IHR4YlsyXTsKKwlpbnQgcmV0OworCWludCBiaXQ7CisKKwliaXQgPSAxIDw8IChyZWcgJiAzKTsKKworCXR4YlswXSA9IGNwdV90b19sZTE2KE1LX09QKGJpdCwgcmVnKSB8IEtTX1NQSU9QX1dSKTsKKwl0eGJbMV0gPSB2YWw7CisKKwl4ZmVyLT50eF9idWYgPSB0eGI7CisJeGZlci0+cnhfYnVmID0gTlVMTDsKKwl4ZmVyLT5sZW4gPSAzOworCisJcmV0ID0gc3BpX3N5bmMoa3MtPnNwaWRldiwgbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJa3NfZXJyKGtzLCAic3BpX3N5bmMoKSBmYWlsZWRcbiIpOworfQorCisvKioKICAqIGtzODg1MV9yeF8xbXNnIC0gc2VsZWN0IHdoZXRoZXIgdG8gdXNlIG9uZSBvciB0d28gbWVzc2FnZXMgZm9yIHNwaSByZWFkCiAgKiBAa3M6IFRoZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgpAQCAtMzIyLDEzICszNTIsMTIgQEAKIHN0YXRpYyBpbnQga3M4ODUxX3dyaXRlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGtzODg1MV9uZXQgKmtzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgKm1jcCA9ICh1MTYgKilkZXYtPmRldl9hZGRyOworCWludCBpOwogCiAJbXV0ZXhfbG9jaygma3MtPmxvY2spOwogCi0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUkwsIG1jcFswXSk7Ci0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUk0sIG1jcFsxXSk7Ci0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUkgsIG1jcFsyXSk7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWtzODg1MV93cnJlZzgoa3MsIEtTX01BUihpKSwgZGV2LT5kZXZfYWRkcltpXSk7CiAKIAltdXRleF91bmxvY2soJmtzLT5sb2NrKTsKIApAQCAtOTUxLDcgKzk4MCw3IEBACiAJCQltY3B0ciA9IG1jcHRyLT5uZXh0OwogCQl9CiAKLQkJcnhjdHJsLnJ4Y3IxID0gUlhDUjFfUlhNRSB8IFJYQ1IxX1JYQUUgfCBSWENSMV9SWFBBRk1BOworCQlyeGN0cmwucnhjcjEgPSBSWENSMV9SWE1FIHwgUlhDUjFfUlhQQUZNQTsKIAl9IGVsc2UgewogCQkvKiBqdXN0IGFjY2VwdCBicm9hZGNhc3QgLyB1bmljYXN0ICovCiAJCXJ4Y3RybC5yeGNyMSA9IFJYQ1IxX1JYUEFGTUE7CkBAIC0xMjM5LDYgKzEyNjgsOSBAQAogCW5kZXYtPm5ldGRldl9vcHMgPSAma3M4ODUxX25ldGRldl9vcHM7CiAJbmRldi0+aXJxID0gc3BpLT5pcnE7CiAKKwkvKiBpc3N1ZSBhIGdsb2JhbCBzb2Z0IHJlc2V0IHRvIHJlc2V0IHRoZSBkZXZpY2UuICovCisJa3M4ODUxX3NvZnRfcmVzZXQoa3MsIEdSUl9HU1IpOworCiAJLyogc2ltcGxlIGNoZWNrIGZvciBhIHZhbGlkIGNoaXAgYmVpbmcgY29ubmVjdGVkIHRvIHRoZSBidXMgKi8KIAogCWlmICgoa3M4ODUxX3JkcmVnMTYoa3MsIEtTX0NJREVSKSAmIH5DSURFUl9SRVZfTUFTSykgIT0gQ0lERVJfSUQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MS5oIGIvZHJpdmVycy9uZXQva3M4ODUxLmgKaW5kZXggODVhYmUxNC4uZjUyYzMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxLmgKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgQ0NSXzMyUElOCQkJCSgxIDw8IDApCiAKIC8qIE1BQyBhZGRyZXNzIHJlZ2lzdGVycyAqLworI2RlZmluZSBLU19NQVIoX20pCQkJCTB4MTUgLSAoX20pCiAjZGVmaW5lIEtTX01BUkwJCQkJCTB4MTAKICNkZWZpbmUgS1NfTUFSTQkJCQkJMHgxMgogI2RlZmluZSBLU19NQVJICQkJCQkweDE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCA2MWVhYmNhLi5iM2Q3ZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTIyMyw2OSArMjIzLDczIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1hY19vbmJvYXJkX3NvbmljX2V0aGVybmV0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKyNkZWZpbmUgSU5WQUxJRF9NQUMobWFjKSAobWVtY21wKG1hYywgIlx4MDhceDAwXHgwNyIsIDMpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKG1hYywgIlx4MDBceEEwXHg0MCIsIDMpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKG1hYywgIlx4MDBceDgwXHgxOSIsIDMpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKG1hYywgIlx4MDBceDA1XHgwMiIsIDMpKQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbWFjX29uYm9hcmRfc29uaWNfZXRoZXJuZXRfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzb25pY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNvbnN0IGludCBwcm9tX2FkZHIgPSBPTkJPQVJEX1NPTklDX1BST01fQkFTRTsKLQlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB2YWw7CiAKLQkvKiBPbiBOdUJ1cyBib2FyZHMgd2UgY2FuIHNvbWV0aW1lcyBsb29rIGluIHRoZSBST00gcmVzb3VyY2VzLgotCSAgIE5vIHN1Y2ggbHVjayBmb3IgY29tbS1zbG90L29uYm9hcmQuICovCi0JZm9yKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlkZXYtPmRldl9hZGRyW2ldID0gU09OSUNfUkVBRF9QUk9NKGkpOworCS8qCisJICogT24gTnVCdXMgYm9hcmRzIHdlIGNhbiBzb21ldGltZXMgbG9vayBpbiB0aGUgUk9NIHJlc291cmNlcy4KKwkgKiBObyBzdWNoIGx1Y2sgZm9yIGNvbW0tc2xvdC9vbmJvYXJkLgorCSAqIE9uIHRoZSBQb3dlckJvb2sgNTIwLCB0aGUgUFJPTSBiYXNlIGFkZHJlc3MgaXMgYSBteXN0ZXJ5LgorCSAqLworCWlmIChod3JlZ19wcmVzZW50KCh2b2lkICopcHJvbV9hZGRyKSkgeworCQlpbnQgaTsKIAotCS8qIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBhZGRyZXNzIGlzIGJpdC1yZXZlcnNlZC4gIFRoZSBOZXRCU0QKLQkgICBzb3VyY2UgaGFzIGEgcmF0aGVyIGxvbmcgYW5kIGRldGFpbGVkIGhpc3RvcmljYWwgYWNjb3VudCBvZgotCSAgIHdoeSB0aGlzIGlzIHNvLiAqLwotCWlmIChtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDhceDAwXHgwNyIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4QTBceDQwIiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHg4MFx4MTkiLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceDA1XHgwMiIsIDMpKQotCQliaXRfcmV2ZXJzZV9hZGRyKGRldi0+ZGV2X2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlkZXYtPmRldl9hZGRyW2ldID0gU09OSUNfUkVBRF9QUk9NKGkpOworCQlpZiAoIUlOVkFMSURfTUFDKGRldi0+ZGV2X2FkZHIpKQorCQkJcmV0dXJuOwogCi0JLyogSWYgd2Ugc3RpbGwgaGF2ZSB3aGF0IHNlZW1zIHRvIGJlIGEgYm9ndXMgYWRkcmVzcywgd2UnbGwKLSAgICAgICAgICAgbG9vayBpbiB0aGUgQ0FNLiAgVGhlIHRvcCBlbnRyeSBzaG91bGQgYmUgb3Vycy4gKi8KLQkvKiBEYW5nZXIhIFRoaXMgb25seSB3b3JrcyBpZiBNYWNPUyBoYXMgYWxyZWFkeSBpbml0aWFsaXplZAotICAgICAgICAgICB0aGUgY2FyZC4uLiAqLwotCWlmIChtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDhceDAwXHgwNyIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4QTBceDQwIiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHg4MFx4MTkiLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceDA1XHgwMiIsIDMpKQotCXsKLQkJdW5zaWduZWQgc2hvcnQgdmFsOwotCi0JCXByaW50ayhLRVJOX0lORk8gIm1hY3NvbmljOiBQUk9NIHNlZW1zIHRvIGJlIHdyb25nLCB0cnlpbmcgQ0FNIGVudHJ5IDE1XG4iKTsKLQotCQlTT05JQ19XUklURShTT05JQ19DTUQsIFNPTklDX0NSX1JTVCk7Ci0JCVNPTklDX1dSSVRFKFNPTklDX0NFUCwgMTUpOwotCi0JCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMik7Ci0JCWRldi0+ZGV2X2FkZHJbNV0gPSB2YWwgPj4gODsKLQkJZGV2LT5kZXZfYWRkcls0XSA9IHZhbCAmIDB4ZmY7Ci0JCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMSk7Ci0JCWRldi0+ZGV2X2FkZHJbM10gPSB2YWwgPj4gODsKLQkJZGV2LT5kZXZfYWRkclsyXSA9IHZhbCAmIDB4ZmY7Ci0JCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMCk7Ci0JCWRldi0+ZGV2X2FkZHJbMV0gPSB2YWwgPj4gODsKLQkJZGV2LT5kZXZfYWRkclswXSA9IHZhbCAmIDB4ZmY7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiSFcgQWRkcmVzcyBmcm9tIENBTSAxNTogJXBNXG4iLAotCQkgICAgICAgZGV2LT5kZXZfYWRkcik7Ci0JfSBlbHNlIHJldHVybiAwOwotCi0JaWYgKG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwOFx4MDBceDA3IiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHhBMFx4NDAiLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceDgwXHgxOSIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4MDVceDAyIiwgMykpCi0JewogCQkvKgotCQkgKiBTdGlsbCBub25zZW5zZSAuLi4gbWVzc2VkIHVwIHNvbWVwbGFjZSEKKwkJICogTW9zdCBvZiB0aGUgdGltZSwgdGhlIGFkZHJlc3MgaXMgYml0LXJldmVyc2VkLiBUaGUgTmV0QlNECisJCSAqIHNvdXJjZSBoYXMgYSByYXRoZXIgbG9uZyBhbmQgZGV0YWlsZWQgaGlzdG9yaWNhbCBhY2NvdW50IG9mCisJCSAqIHdoeSB0aGlzIGlzIHNvLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJtYWNzb25pYzogRVJST1IgKElOVkFMSUQgTUFDKVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0gZWxzZSByZXR1cm4gMDsKKwkJYml0X3JldmVyc2VfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJaWYgKCFJTlZBTElEX01BQyhkZXYtPmRldl9hZGRyKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBJZiB3ZSBzdGlsbCBoYXZlIHdoYXQgc2VlbXMgdG8gYmUgYSBib2d1cyBhZGRyZXNzLCB3ZSdsbAorCQkgKiBsb29rIGluIHRoZSBDQU0uIFRoZSB0b3AgZW50cnkgc2hvdWxkIGJlIG91cnMuCisJCSAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNzb25pYzogTUFDIGFkZHJlc3MgaW4gUFJPTSBzZWVtcyAiCisJCSAgICAgICAgICAgICAgICAgICAgInRvIGJlIGludmFsaWQsIHRyeWluZyBDQU1cbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1hY3NvbmljOiBjYW5ub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tICIKKwkJICAgICAgICAgICAgICAgICAgICAiUFJPTSwgdHJ5aW5nIENBTVxuIik7CisJfQorCisJLyogVGhpcyBvbmx5IHdvcmtzIGlmIE1hY09TIGhhcyBhbHJlYWR5IGluaXRpYWxpemVkIHRoZSBjYXJkLiAqLworCisJU09OSUNfV1JJVEUoU09OSUNfQ01ELCBTT05JQ19DUl9SU1QpOworCVNPTklDX1dSSVRFKFNPTklDX0NFUCwgMTUpOworCisJdmFsID0gU09OSUNfUkVBRChTT05JQ19DQVAyKTsKKwlkZXYtPmRldl9hZGRyWzVdID0gdmFsID4+IDg7CisJZGV2LT5kZXZfYWRkcls0XSA9IHZhbCAmIDB4ZmY7CisJdmFsID0gU09OSUNfUkVBRChTT05JQ19DQVAxKTsKKwlkZXYtPmRldl9hZGRyWzNdID0gdmFsID4+IDg7CisJZGV2LT5kZXZfYWRkclsyXSA9IHZhbCAmIDB4ZmY7CisJdmFsID0gU09OSUNfUkVBRChTT05JQ19DQVAwKTsKKwlkZXYtPmRldl9hZGRyWzFdID0gdmFsID4+IDg7CisJZGV2LT5kZXZfYWRkclswXSA9IHZhbCAmIDB4ZmY7CisKKwlpZiAoIUlOVkFMSURfTUFDKGRldi0+ZGV2X2FkZHIpKQorCQlyZXR1cm47CisKKwkvKiBTdGlsbCBub25zZW5zZSAuLi4gbWVzc2VkIHVwIHNvbWVwbGFjZSEgKi8KKworCXByaW50ayhLRVJOX1dBUk5JTkcgIm1hY3NvbmljOiBNQUMgYWRkcmVzcyBpbiBDQU0gZW50cnkgMTUgIgorCSAgICAgICAgICAgICAgICAgICAgInNlZW1zIGludmFsaWQsIHdpbGwgdXNlIGEgcmFuZG9tIE1BQ1xuIik7CisJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1hY19vbmJvYXJkX3NvbmljX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MDIsOCArNDA2LDcgQEAKIAlTT05JQ19XUklURShTT05JQ19JU1IsIDB4N2ZmZik7CiAKIAkvKiBOb3cgbG9vayBmb3IgdGhlIE1BQyBhZGRyZXNzLiAqLwotCWlmIChtYWNfb25ib2FyZF9zb25pY19ldGhlcm5ldF9hZGRyKGRldikgIT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJbWFjX29uYm9hcmRfc29uaWNfZXRoZXJuZXRfYWRkcihkZXYpOwogCiAJLyogU2hhcmVkIGluaXQgY29kZSAqLwogCXJldHVybiBtYWNzb25pY19pbml0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDVkZDcyMjUuLjI5MWE1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMjgyLDYgKzEyODIsNyBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM3MikgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzVhKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCtHZW4yIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDY5MzBjODcuLmYzNjI0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtNzUsNyArNzUsNyBAQAogI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgogI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCiAKLSNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuNS4wLTEuNDMyIgorI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjEtMS40NTEiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKIE1PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKQEAgLTE2MjQsMTAgKzE2MjQsMjEgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICgqcHRyID09ICdSJyB8fCAqcHRyID09ICdRJykgewotCQkvKiBXZSd2ZSBmb3VuZCBlaXRoZXIgYW4gWEZQIG9yIHF1YWQgcmliYm9uIGZpYmVyICovCisJaWYgKCpwdHIgPT0gJzInKQorCQlwdHIrKzsKKwlpZiAoKnB0ciA9PSAnUicgfHwgKnB0ciA9PSAnUScgfHwgKnB0ciA9PSAnUycpIHsKKwkJLyogV2UndmUgZm91bmQgZWl0aGVyIGFuIFhGUCwgcXVhZCByaWJib24gZmliZXIsIG9yIFNGUCsgKi8KIAkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfRklCUkU7CisJfSBlbHNlIHsKKwkJY21kLT5wb3J0ID0gUE9SVF9PVEhFUjsKIAl9CisJaWYgKCpwdHIgPT0gJ1InIHx8ICpwdHIgPT0gJ1MnKQorCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwllbHNlCisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggN2E3MTc3NC4uMWM0NmRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTQxOSw2ICs0MTksNyBAQAogI2RlZmluZSBORVRYRU5fQ1JCX1JPTVVTQglcCiAJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1JPTVVTQikKICNkZWZpbmUgTkVUWEVOX0NSQl9JMlEJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9JMlEpCisjZGVmaW5lIE5FVFhFTl9DUkJfSTJDMAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX0kyQzApCiAjZGVmaW5lIE5FVFhFTl9DUkJfU01CCQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfU01CKQogI2RlZmluZSBORVRYRU5fQ1JCX01BWAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKDY0KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCAzMjMxNDAwLi4zMTg1YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTE5MDEsMjIgKzE5MDEsMTYgQEAKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBvZmZzZXQsIGJvYXJkX3R5cGUsIG1hZ2ljLCBoZWFkZXJfdmVyc2lvbjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKIAlvZmZzZXQgPSBOWF9GV19NQUdJQ19PRkZTRVQ7CiAJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJm1hZ2ljKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlvZmZzZXQgPSBOWF9IRFJfVkVSU0lPTl9PRkZTRVQ7Ci0JaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmhlYWRlcl92ZXJzaW9uKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAobWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQyB8fAotCQkJaGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eCwgdmVyc2lvbj0lMDh4XG4iLAotCQkJbWFnaWMsIGhlYWRlcl92ZXJzaW9uKTsKKwlpZiAobWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eFxuIiwKKwkJCW1hZ2ljKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggOTFjMmJjNi4uZTQwYjkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtNTMxLDYgKzUzMSw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQkJaWYgKG9mZiA9PSAoTkVUWEVOX0NSQl9JMkMwICsgMHgxYykpCisJCQkJY29udGludWU7CiAJCQkvKiBkbyBub3QgcmVzZXQgUENJICovCiAJCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhiYykpCiAJCQkJY29udGludWU7CkBAIC01NTMsMTIgKzU1NSw2IEBACiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAob2ZmID09IE5FVFhFTl9BRERSX0VSUk9SKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnI6IFVua25vd24gYWRkcjogMHglMDh4XG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBidWZbaV0uYWRkcik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWluaXRfZGVsYXkgPSAxOwogCQkvKiBBZnRlciB3cml0aW5nIHRoaXMgcmVnaXN0ZXIsIEhXIG5lZWRzIHRpbWUgZm9yIENSQiAqLwogCQkvKiB0byBxdWlldCBkb3duIChlbHNlIGNyYl93aW5kb3cgcmV0dXJucyAweGZmZmZmZmZmKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDliOWVhYjEuLjBiNGE1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTU5NSw3ICs1OTUsOCBAQAogCXZvaWQgX19pb21lbSAqbWVtX3B0cjIgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqZGJfcHRyID0gTlVMTDsKIAotCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2UsIG1lbV9sZW4sIGRiX2Jhc2UsIGRiX2xlbiA9IDAsIHBjaV9sZW4wID0gMDsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX2Jhc2UsIGRiX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBtZW1fbGVuLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAKIAogcmVxdWVzdF9yZXNldDoKIAlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMTsKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiB9CiAKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCBmOTM2NGQwLi5kNmM3YWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMzU0NSw3ICszNTQ1LDcgQEAKIAlycC0+cmNyX2luZGV4ID0gaW5kZXg7CiAKIAlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIE5JVV9SWFBVTExfTUFYKSk7CisJX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIFZMQU5fRVRIX0hMRU4pKTsKIAogCXJwLT5yeF9wYWNrZXRzKys7CiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBlZThhZDNlLi5iNTg5NjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMjUxLDYgKzI1MSw3IEBACiBzdGF0aWMgaW50IGVsM19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyB2b2lkIHRjNTc0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC0yNjYsNyArMjY3LDcgQEAKIAkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKIAkubmRvX2RvX2lvY3RsCQk9IGVsM19pb2N0bCwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC0xMTYxLDYgKzExNjIsMTYgQEAKIAkJb3V0dyhTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlzZXRfcnhfbW9kZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgaW50IGVsM19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggYmQzNDQ3Zi4uOTRjOWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTE3NjAsNyArMTc2MCw3IEBACiAJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4YzAwZiwgMHgwMDAyLCAiY2lzL0xBLVBDTS5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIktUSSIsICJQRTUyMCBQTFVTIiwgMHhhZDE4MDM0NSwgMHg5ZDU4ZDM5MiwgIlBFNTIwLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiTkRDIiwgIkV0aGVybmV0IiwgMHgwMWM0M2FlMSwgMHgwMGIyZTk0MSwgImNpcy9ORTJLLmNpcyIpLAotCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiUE1YICAgIiwgIlBFLTIwMCIsIDB4MzRmM2YxYzgsIDB4MTBiNTlmOGMsICJQRS0yMDAuY2lzIiksCisJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJQTVggICAiLCAiUEUtMjAwIiwgMHgzNGYzZjFjOCwgMHgxMGI1OWY4YywgImNpcy9QRS0yMDAuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJUQU1BUkFDSyIsICJFdGhlcm5ldCIsIDB4Y2Y0MzRmYmEsIDB4MDBiMmU5NDEsICJjaXMvdGFtYXJhY2suY2lzIiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkV0aGVybmV0IiwgIkNGIFNpemUgUEMgQ2FyZCIsIDB4MDBiMmU5NDEsIDB4NDNhYzIzOWIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiRmFzdCBFdGhlcm5ldCIsICJDRiBTaXplIFBDIENhcmQiLCAiMS4wIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwppbmRleCAyNTBlMTBmLi44NjU5ZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCkBAIC0yMzgsNiArMjM4LDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1kaW9fb2ZncGlvX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbWRpb19vZmdwaW9fZHJpdmVyID0gewogCS5uYW1lID0gIm1kaW8tZ3BpbyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCA3Y2JmNmY5Li4yNTU5OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTExMSw5ICsxMTEsNiBAQAogCXJ3bG9ja190IGhhc2hfbG9jazsKIH07CiAKLS8qIHRvIGVsaW1pbmF0ZSBhIHJhY2UgYnR3IHBwcG9lX2ZsdXNoX2RldiBhbmQgcHBwb2VfcmVsZWFzZSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhmbHVzaF9sb2NrKTsKLQogLyoKICAqIFBQUG9FIGNvdWxkIGJlIGluIHRoZSBmb2xsb3dpbmcgc3RhZ2VzOgogICogMSkgRGlzY292ZXJ5IHN0YWdlICh0byBvYnRhaW4gcmVtb3RlIE1BQyBhbmQgU2Vzc2lvbiBJRCkKQEAgLTMwMyw0NSArMzAwLDQ4IEBACiAJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7CiAJCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOworCQlzdHJ1Y3Qgc29jayAqc2s7CiAKLQkJd2hpbGUgKHBvICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzb2NrICpzazsKLQkJCWlmIChwby0+cHBwb2VfZGV2ICE9IGRldikgeworCQl3aGlsZSAocG8pIHsKKwkJCXdoaWxlIChwbyAmJiBwby0+cHBwb2VfZGV2ICE9IGRldikgewogCQkJCXBvID0gcG8tPm5leHQ7Ci0JCQkJY29udGludWU7CiAJCQl9CisKKwkJCWlmICghcG8pCisJCQkJYnJlYWs7CisKIAkJCXNrID0gc2tfcHBwb3gocG8pOwotCQkJc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKLQkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwotCQkJZGV2X3B1dChkZXYpOwogCiAJCQkvKiBXZSBhbHdheXMgZ3JhYiB0aGUgc29ja2V0IGxvY2ssIGZvbGxvd2VkIGJ5IHRoZQotCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCi0JCQkgKiBob2xkIHRoZSBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywKLQkJCSAqIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLgotCQkJICogSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhcgotCQkJICogYXMgd2UncmUganVtcGluZyBiZXR3ZWVuIGxvY2tzLgorCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkIGhvbGQgdGhlCisJCQkgKiBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywgd2UgbmVlZCB0bworCQkJICogcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLiAgSG9sZCBhIHJlZmVyZW5jZSB0bworCQkJICogdGhlIHNvY2sgc28gaXQgZG9lc24ndCBkaXNhcHBlYXIgYXMgd2UncmUganVtcGluZworCQkJICogYmV0d2VlbiBsb2Nrcy4KIAkJCSAqLwogCiAJCQlzb2NrX2hvbGQoc2spOwotCiAJCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJbG9ja19zb2NrKHNrKTsKIAotCQkJaWYgKHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpIHsKKwkJCWlmIChwby0+cHBwb2VfZGV2ID09IGRldgorCQkJICAgICYmIHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpIHsKIAkJCQlwcHBveF91bmJpbmRfc29jayhzayk7CiAJCQkJc2stPnNrX3N0YXRlID0gUFBQT1hfWk9NQklFOwogCQkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOworCQkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOworCQkJCWRldl9wdXQoZGV2KTsKIAkJCX0KIAogCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCXNvY2tfcHV0KHNrKTsKIAotCQkJLyogUmVzdGFydCBzY2FuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBoYXNoIGNoYWluLgotCQkJICogV2hpbGUgdGhlIGxvY2sgd2FzIGRyb3BwZWQgdGhlIGNoYWluIGNvbnRlbnRzIG1heQotCQkJICogaGF2ZSBjaGFuZ2VkLgorCQkJLyogUmVzdGFydCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudAorCQkJICogaGFzaCBjaGFpbi4gV2UgZHJvcHBlZCBsb2NrcyBzbyB0aGUgd29ybGQgbWF5IGhhdmUKKwkJCSAqIGNoYW5nZSBmcm9tIHVuZGVybmVhdGggdXMuCiAJCQkgKi8KKworCQkJQlVHX09OKHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpID09IE5VTEwpOwogCQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl9CkBAIC0zODgsMTEgKzM4OCwxNiBAQAogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmVsYXlfcG87CiAKKwkvKiBCYWNrbG9nIHJlY2VpdmUuIFNlbWFudGljcyBvZiBiYWNrbG9nIHJjdiBwcmVjbHVkZSBhbnkgY29kZSBmcm9tCisJICogZXhlY3V0aW5nIGluIGxvY2tfc29jaygpL3JlbGVhc2Vfc29jaygpIGJvdW5kczsgbWVhbmluZyBzay0+c2tfc3RhdGUKKwkgKiBjYW4ndCBjaGFuZ2UuCisJICovCisKIAlpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfQk9VTkQpIHsKIAkJcHBwX2lucHV0KCZwby0+Y2hhbiwgc2tiKTsKIAl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX1JFTEFZKSB7Ci0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcihkZXZfbmV0KHBvLT5wcHBvZV9kZXYpLAotCQkJCQkJJnBvLT5wcHBvZV9yZWxheSk7CisJCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcihzb2NrX25ldChzayksCisJCQkJCSAgICAmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKHJlbGF5X3BvID09IE5VTEwpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCkBAIC00NDcsNiArNDUyLDEwIEBACiAJCWdvdG8gZHJvcDsKIAogCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7CisKKwkvKiBOb3RlIHRoYXQgZ2V0X2l0ZW0gZG9lcyBhIHNvY2tfaG9sZCgpLCBzbyBza19wcHBveChwbykKKwkgKiBpcyBrbm93biB0byBiZSBzYWZlLgorCSAqLwogCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKCFwbykKIAkJZ290byBkcm9wOwpAQCAtNTYxLDYgKzU3MCw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCXN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7CiAKIAlpZiAoIXNrKQogCQlyZXR1cm4gMDsKQEAgLTU3MSw0NCArNTgxLDI4IEBACiAJCXJldHVybiAtRUJBREY7CiAJfQogCisJcG8gPSBwcHBveF9zayhzayk7CisKKwlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgeworCQlkZXZfcHV0KHBvLT5wcHBvZV9kZXYpOworCQlwby0+cHBwb2VfZGV2ID0gTlVMTDsKKwl9CisKIAlwcHBveF91bmJpbmRfc29jayhzayk7CiAKIAkvKiBTaWduYWwgdGhlIGRlYXRoIG9mIHRoZSBzb2NrZXQuICovCiAJc2stPnNrX3N0YXRlID0gUFBQT1hfREVBRDsKIAotCS8qCi0JICogcHBwb2VfZmx1c2hfZGV2IGNvdWxkIGxlYWQgdG8gYSByYWNlIHdpdGgKLQkgKiB0aGlzIHJvdXRpbmUgc28gd2UgdXNlIGZsdXNoX2xvY2sgdG8gZWxpbWluYXRlCi0JICogc3VjaCBhIGNhc2UgKHdlIG9ubHkgbmVlZCBwZXItbmV0IHNwZWNpZmljIGRhdGEpCi0JICovCi0Jc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKLQlwbyA9IHBwcG94X3NrKHNrKTsKLQlpZiAoIXBvLT5wcHBvZV9kZXYpIHsKLQkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwotCQlnb3RvIG91dDsKLQl9Ci0JcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7Ci0Jc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOworCW5ldCA9IHNvY2tfbmV0KHNrKTsKKwlwbiA9IHBwcG9lX3Blcm5ldChuZXQpOwogCiAJLyoKIAkgKiBwcm90ZWN0ICJwbyIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXMKIAkgKiBvbiBwcHBvZV9mbHVzaF9kZXYKIAkgKi8KLQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlkZWxldGVfaXRlbShwbiwgcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwKKwkJICAgIHBvLT5wcHBvZV9pZmluZGV4KTsKIAotCXBvID0gcHBwb3hfc2soc2spOwotCWlmIChzdGFnZV9zZXNzaW9uKHBvLT5wcHBvZV9wYS5zaWQpKQotCQlfX2RlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlLAotCQkJCXBvLT5wcHBvZV9pZmluZGV4KTsKLQotCWlmIChwby0+cHBwb2VfZGV2KSB7Ci0JCWRldl9wdXQocG8tPnBwcG9lX2Rldik7Ci0JCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwotCX0KLQotCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7Ci0KLW91dDoKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC02MjUsOCArNjE5LDkgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKXVzZXJ2YWRkcjsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBOVUxMOwogCWludCBlcnJvcjsKIAogCWxvY2tfc29jayhzayk7CkBAIC02NTIsMTIgKzY0NywxNCBAQAogCS8qIERlbGV0ZSB0aGUgb2xkIGJpbmRpbmcgKi8KIAlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkgewogCQlwcHBveF91bmJpbmRfc29jayhzayk7CisJCXBuID0gcHBwb2VfcGVybmV0KHNvY2tfbmV0KHNrKSk7CisJCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLAorCQkJICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJaWYgKHBvLT5wcHBvZV9kZXYpIHsKLQkJCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQocG8tPnBwcG9lX2RldikpOwotCQkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCi0JCQkJcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwogCQkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKKwkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwogCQl9CisKIAkJbWVtc2V0KHNrX3BwcG94KHBvKSArIDEsIDAsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwcG94X3NvY2spIC0gc2l6ZW9mKHN0cnVjdCBzb2NrKSk7CiAJCXNrLT5za19zdGF0ZSA9IFBQUE9YX05PTkU7CkBAIC02NjYsMTYgKzY2MywxNSBAQAogCS8qIFJlLWJpbmQgaW4gc2Vzc2lvbiBzdGFnZSBvbmx5ICovCiAJaWYgKHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkgewogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CisJCW5ldCA9IHNvY2tfbmV0KHNrKTsKKwkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKIAkJaWYgKCFkZXYpCi0JCQlnb3RvIGVuZDsKKwkJCWdvdG8gZXJyX3B1dDsKIAogCQlwby0+cHBwb2VfZGV2ID0gZGV2OwogCQlwby0+cHBwb2VfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKLQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCXBuID0gcHBwb2VfcGVybmV0KG5ldCk7CiAJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJZ290byBlcnJfcHV0OwogCQl9CiAKQEAgLTY4Myw2ICs2NzksNyBAQAogCQkgICAgICAgJnNwLT5zYV9hZGRyLnBwcG9lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKKwkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCWVycm9yID0gX19zZXRfaXRlbShwbiwgcG8pOwogCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQlpZiAoZXJyb3IgPCAwKQpAQCAtNjk2LDggKzY5MywxMSBAQAogCQlwby0+Y2hhbi5vcHMgPSAmcHBwb2VfY2hhbl9vcHM7CiAKIAkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCAmcG8tPmNoYW4pOwotCQlpZiAoZXJyb3IpCisJCWlmIChlcnJvcikgeworCQkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCisJCQkJICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJCWdvdG8gZXJyX3B1dDsKKwkJfQogCiAJCXNrLT5za19zdGF0ZSA9IFBQUE9YX0NPTk5FQ1RFRDsKIAl9CkBAIC05MTUsNiArOTE1LDE0IEBACiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJaW50IGRhdGFfbGVuID0gc2tiLT5sZW47CiAKKwkvKiBUaGUgaGlnaGVyLWxldmVsIFBQUCBjb2RlIChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkpIGVuc3VyZXMgdGhlIFBQUAorCSAqIHhtaXQgb3BlcmF0aW9ucyBjb25jbHVkZSBwcmlvciB0byBhbiB1bnJlZ2lzdHJhdGlvbiBjYWxsLiAgVGh1cworCSAqIHNrLT5za19zdGF0ZSBjYW5ub3QgY2hhbmdlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGxvY2tfc29jaygpLgorCSAqIEJ1dCwgd2UgYWxzbyBjYW4ndCBkbyBhIGxvY2tfc29jayBzaW5jZSB0aGF0IGludHJvZHVjZXMgYSBwb3RlbnRpYWwKKwkgKiBkZWFkbG9jayBhcyB3ZSdkIHJldmVyc2UgdGhlIGxvY2sgb3JkZXJpbmcgdXNlZCB3aGVuIGNhbGxpbmcKKwkgKiBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkuCisJICovCisKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKIAkJZ290byBhYm9ydDsKIApAQCAtOTQ0LDcgKzk1Miw2IEBACiAJCQlwby0+cHBwb2VfcGEucmVtb3RlLCBOVUxMLCBkYXRhX2xlbik7CiAKIAlkZXZfcXVldWVfeG1pdChza2IpOwotCiAJcmV0dXJuIDE7CiAKIGFib3J0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCAzZWM2ZTg1Li5jMjM4M2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtOTUsNiArOTUsNyBAQAogCiAJLyogTWlzYy4gc3R1ZmYgKi8KIAlNQUlMQk9YX0NPVU5UID0gMTYsCisJTUFJTEJPWF9USU1FT1VUID0gNSwKIAogCVBST0NfQUREUl9SRFkgPSAoMSA8PCAzMSksCiAJUFJPQ19BRERSX1IgPSAoMSA8PCAzMCksCkBAIC04MDMsNiArODA0LDEyIEBACiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCiAJTUJfQ01EX0dFVF9MSU5LX1NUUyA9IDB4MDAwMDAxMjQsCisJTUJfQ01EX1NFVF9NR01OVF9URktfQ1RMID0gMHgwMDAwMDE2MCwgLyogU2V0IE1nbW50IFRyYWZmaWMgQ29udHJvbCAqLworCU1CX1NFVF9NUElfVEZLX1NUT1AgPSAoMSA8PCAwKSwKKwlNQl9TRVRfTVBJX1RGS19SRVNVTUUgPSAoMSA8PCAxKSwKKwlNQl9DTURfR0VUX01HTU5UX1RGS19DVEwgPSAweDAwMDAwMTYxLCAvKiBHZXQgTWdtbnQgVHJhZmZpYyBDb250cm9sICovCisJTUJfR0VUX01QSV9URktfU1RPUFBFRCA9ICgxIDw8IDApLAorCU1CX0dFVF9NUElfVEZLX0ZJRk9fRU1QVFkgPSAoMSA8PCAxKSwKIAogCS8qIE1haWxib3ggQ29tbWFuZCBTdGF0dXMuICovCiAJTUJfQ01EX1NUU19HT09EID0gMHgwMDAwNDAwMCwJLyogU3VjY2Vzcy4gKi8KQEAgLTExNjgsNyArMTE3NSw3IEBACiAjZGVmaW5lIFJTU19SSTYgMHg0MAogI2RlZmluZSBSU1NfUlQ2IDB4ODAKIAlfX2xlMTYgbWFzazsKLQlfX2xlMzIgaGFzaF9jcV9pZFsyNTZdOworCXU4IGhhc2hfY3FfaWRbMTAyNF07CiAJX19sZTMyIGlwdjZfaGFzaF9rZXlbMTBdOwogCV9fbGUzMiBpcHY0X2hhc2hfa2V5WzRdOwogfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CkBAIC0xNjA2LDYgKzE2MTMsOCBAQAogaW50IHFsX21iX2Fib3V0X2Z3KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIHZvaWQgcWxfbGlua19vbihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiB2b2lkIHFsX2xpbmtfb2ZmKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9tYl9zZXRfbWdtbnRfdHJhZmZpY19jdGwoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBjb250cm9sKTsKK2ludCBxbF93YWl0X2ZpZm9fZW1wdHkoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogCiAjaWYgMQogI2RlZmluZSBRTF9BTExfRFVNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNjE2ODA3MS4uYTJmYzcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zMjAsNiArMzIwLDM3IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BQ19BRERSX1RZUEVfTVVMVElfTUFDOgorCQl7CisJCQl1MzIgdXBwZXIgPSAoYWRkclswXSA8PCA4KSB8IGFkZHJbMV07CisJCQl1MzIgbG93ZXIgPSAoYWRkclsyXSA8PCAyNCkgfCAoYWRkclszXSA8PCAxNikgfAorCQkJCQkoYWRkcls0XSA8PCA4KSB8IChhZGRyWzVdKTsKKworCQkJc3RhdHVzID0KKwkJCQlxbF93YWl0X3JlZ19yZHkocWRldiwKKwkJCQlNQUNfQUREUl9JRFgsIE1BQ19BRERSX01XLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBleGl0OworCQkJcWxfd3JpdGUzMihxZGV2LCBNQUNfQUREUl9JRFgsIChvZmZzZXQrKykgfAorCQkJCShpbmRleCA8PCBNQUNfQUREUl9JRFhfU0hJRlQpIHwKKwkJCQl0eXBlIHwgTUFDX0FERFJfRSk7CisJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIGxvd2VyKTsKKwkJCXN0YXR1cyA9CisJCQkJcWxfd2FpdF9yZWdfcmR5KHFkZXYsCisJCQkJTUFDX0FERFJfSURYLCBNQUNfQUREUl9NVywgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gZXhpdDsKKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfSURYLCAob2Zmc2V0KyspIHwKKwkJCQkoaW5kZXggPDwgTUFDX0FERFJfSURYX1NISUZUKSB8CisJCQkJdHlwZSB8IE1BQ19BRERSX0UpOworCisJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIHVwcGVyKTsKKwkJCXN0YXR1cyA9CisJCQkJcWxfd2FpdF9yZWdfcmR5KHFkZXYsCisJCQkJTUFDX0FERFJfSURYLCBNQUNfQUREUl9NVywgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gZXhpdDsKKwkJCWJyZWFrOworCQl9CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CiAJCXsKIAkJCXUzMiBjYW1fb3V0cHV0OwpAQCAtMzY1LDE2ICszOTYsMTQgQEAKIAkJCSAgIGFuZCBwb3NzaWJseSB0aGUgZnVuY3Rpb24gaWQuICBSaWdodCBub3cgd2UgaGFyZGNvZGUKIAkJCSAgIHRoZSByb3V0ZSBmaWVsZCB0byBOSUMgY29yZS4KIAkJCSAqLwotCQkJaWYgKHR5cGUgPT0gTUFDX0FERFJfVFlQRV9DQU1fTUFDKSB7Ci0JCQkJY2FtX291dHB1dCA9IChDQU1fT1VUX1JPVVRFX05JQyB8Ci0JCQkJCSAgICAgIChxZGV2LT4KLQkJCQkJICAgICAgIGZ1bmMgPDwgQ0FNX09VVF9GVU5DX1NISUZUKSB8Ci0JCQkJCQkoMCA8PCBDQU1fT1VUX0NRX0lEX1NISUZUKSk7Ci0JCQkJaWYgKHFkZXYtPnZsZ3JwKQotCQkJCQljYW1fb3V0cHV0IHw9IENBTV9PVVRfUlY7Ci0JCQkJLyogcm91dGUgdG8gTklDIGNvcmUgKi8KLQkJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIGNhbV9vdXRwdXQpOwotCQkJfQorCQkJY2FtX291dHB1dCA9IChDQU1fT1VUX1JPVVRFX05JQyB8CisJCQkJICAgICAgKHFkZXYtPgorCQkJCSAgICAgICBmdW5jIDw8IENBTV9PVVRfRlVOQ19TSElGVCkgfAorCQkJCQkoMCA8PCBDQU1fT1VUX0NRX0lEX1NISUZUKSk7CisJCQlpZiAocWRldi0+dmxncnApCisJCQkJY2FtX291dHB1dCB8PSBDQU1fT1VUX1JWOworCQkJLyogcm91dGUgdG8gTklDIGNvcmUgKi8KKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfREFUQSwgY2FtX291dHB1dCk7CiAJCQlicmVhazsKIAkJfQogCWNhc2UgTUFDX0FERFJfVFlQRV9WTEFOOgpAQCAtNTQ2LDE0ICs1NzUsMTQgQEAKIAkJfQogCWNhc2UgUlRfSURYX01DQVNUOgkvKiBQYXNzIHVwIEFsbCBNdWx0aWNhc3QgZnJhbWVzLiAqLwogCQl7Ci0JCQl2YWx1ZSA9IFJUX0lEWF9EU1RfQ0FNX1EgfAkvKiBkZXN0ICovCisJCQl2YWx1ZSA9IFJUX0lEWF9EU1RfREZMVF9RIHwJLyogZGVzdCAqLwogCQkJICAgIFJUX0lEWF9UWVBFX05JQ1EgfAkvKiB0eXBlICovCiAJCQkgICAgKFJUX0lEWF9BTExNVUxUSV9TTE9UIDw8IFJUX0lEWF9JRFhfU0hJRlQpOy8qIGluZGV4ICovCiAJCQlicmVhazsKIAkJfQogCWNhc2UgUlRfSURYX01DQVNUX01BVENIOgkvKiBQYXNzIHVwIG1hdGNoZWQgTXVsdGljYXN0IGZyYW1lcy4gKi8KIAkJewotCQkJdmFsdWUgPSBSVF9JRFhfRFNUX0NBTV9RIHwJLyogZGVzdCAqLworCQkJdmFsdWUgPSBSVF9JRFhfRFNUX0RGTFRfUSB8CS8qIGRlc3QgKi8KIAkJCSAgICBSVF9JRFhfVFlQRV9OSUNRIHwJLyogdHlwZSAqLwogCQkJICAgIChSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCA8PCBSVF9JRFhfSURYX1NISUZUKTsvKiBpbmRleCAqLwogCQkJYnJlYWs7CkBAIC0zMDc3LDYgKzMxMDYsMTIgQEAKIAogc3RhdGljIGludCBxbF9zdGFydF9yc3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CisJdTggaW5pdF9oYXNoX3NlZWRbXSA9IHsweDZkLCAweDVhLCAweDU2LCAweGRhLCAweDI1LCAweDViLCAweDBlLCAweGMyLAorCQkJCTB4NDEsIDB4NjcsIDB4MjUsIDB4M2QsIDB4NDMsIDB4YTMsIDB4OGYsCisJCQkJMHhiMCwgMHhkMCwgMHhjYSwgMHgyYiwgMHhjYiwgMHhhZSwgMHg3YiwKKwkJCQkweDMwLCAweGI0LCAweDc3LCAweGNiLCAweDJkLCAweGEzLCAweDgwLAorCQkJCTB4MzAsIDB4ZjIsIDB4MGMsIDB4NmEsIDB4NDIsIDB4YjcsIDB4M2IsCisJCQkJMHhiZSwgMHhhYywgMHgwMSwgMHhmYX07CiAJc3RydWN0IHJpY2IgKnJpY2IgPSAmcWRldi0+cmljYjsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTMwODYsMjEgKzMxMjEsMTcgQEAKIAogCXJpY2ItPmJhc2VfY3EgPSBSU1NfTDRLOwogCXJpY2ItPmZsYWdzID0KLQkgICAgKFJTU19MNksgfCBSU1NfTEkgfCBSU1NfTEIgfCBSU1NfTE0gfCBSU1NfUkk0IHwgUlNTX1JJNiB8IFJTU19SVDQgfAotCSAgICAgUlNTX1JUNik7Ci0JcmljYi0+bWFzayA9IGNwdV90b19sZTE2KHFkZXYtPnJzc19yaW5nX2NvdW50IC0gMSk7CisJCShSU1NfTDZLIHwgUlNTX0xJIHwgUlNTX0xCIHwgUlNTX0xNIHwgUlNTX1JUNCB8IFJTU19SVDYpOworCXJpY2ItPm1hc2sgPSBjcHVfdG9fbGUxNigodTE2KSgweDNmZikpOwogCiAJLyoKIAkgKiBGaWxsIG91dCB0aGUgSW5kaXJlY3Rpb24gVGFibGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQloYXNoX2lkW2ldID0gaSAmIChxZGV2LT5yc3NfcmluZ19jb3VudCAtIDEpOworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCisJCWhhc2hfaWRbaV0gPSAoaSAmIChxZGV2LT5yc3NfcmluZ19jb3VudCAtIDEpKTsKIAotCS8qCi0JICogUmFuZG9tIHZhbHVlcyBmb3IgdGhlIElQdjYgYW5kIElQdjQgSGFzaCBLZXlzLgotCSAqLwotCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwotCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOworCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY2X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgNDApOworCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY0X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgMTYpOwogCiAJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyBSU1MuXG4iKTsKIApAQCAtMzIzOSw2ICszMjcwLDEzIEBACiAJcWxfd3JpdGUzMihxZGV2LCBTUExUX0hEUiwgU1BMVF9IRFJfRVAgfAogCQltaW4oU01BTExfQlVGRkVSX1NJWkUsIE1BWF9TUExJVF9TSVpFKSk7CiAKKwkvKiBTZXQgUlggcGFja2V0IHJvdXRpbmcgdG8gdXNlIHBvcnQvcGNpIGZ1bmN0aW9uIG9uIHdoaWNoIHRoZQorCSAqIHBhY2tldCBhcnJpdmVkIG9uIGluIGFkZGl0aW9uIHRvIHVzdWFsIGZyYW1lIHJvdXRpbmcuCisJICogVGhpcyBpcyBoZWxwZnVsIG9uIGJvbmRpbmcgd2hlcmUgYm90aCBpbnRlcmZhY2VzIGNhbiBoYXZlCisJICogdGhlIHNhbWUgTUFDIGFkZHJlc3MuCisJICovCisJcWxfd3JpdGUzMihxZGV2LCBSU1RfRk8sIFJTVF9GT19SUl9NQVNLIHwgUlNUX0ZPX1JSX1JDVl9GVU5DX0NRKTsKKwogCS8qIFN0YXJ0IHVwIHRoZSByeCBxdWV1ZXMuICovCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPSBxbF9zdGFydF9yeF9yaW5nKHFkZXYsICZxZGV2LT5yeF9yaW5nW2ldKTsKQEAgLTMzMTEsNiArMzM0OSwxMyBAQAogCiAJZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKIAkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKKworCS8qIFN0b3AgbWFuYWdlbWVudCB0cmFmZmljLiAqLworCXFsX21iX3NldF9tZ21udF90cmFmZmljX2N0bChxZGV2LCBNQl9TRVRfTVBJX1RGS19TVE9QKTsKKworCS8qIFdhaXQgZm9yIHRoZSBOSUMgYW5kIE1HTU5UIEZJRk9zIHRvIGVtcHR5LiAqLworCXFsX3dhaXRfZmlmb19lbXB0eShxZGV2KTsKKwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7CiAKIAlkbyB7CkBAIC0zMzI2LDYgKzMzNzEsOCBAQAogCQlzdGF0dXMgPSAtRVRJTUVET1VUOwogCX0KIAorCS8qIFJlc3VtZSBtYW5hZ2VtZW50IHRyYWZmaWMuICovCisJcWxfbWJfc2V0X21nbW50X3RyYWZmaWNfY3RsKHFkZXYsIE1CX1NFVF9NUElfVEZLX1JFU1VNRSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzcwNCw2ICszNzUxLDEyIEBACiAJc3RhdHVzID0gcWxfYWRhcHRlcl91cChxZGV2KTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGVycm9yOworCisJLyogUmVzdG9yZSByeCBtb2RlLiAqLworCWNsZWFyX2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoUUxfUFJPTUlTQ1VPVVMsICZxZGV2LT5mbGFncyk7CisJcWxnZV9zZXRfbXVsdGljYXN0X2xpc3QocWRldi0+bmRldik7CisKIAlydG5sX3VubG9jaygpOwogCXJldHVybjsKIGVycm9yOgpAQCAtMzg2Myw2ICszOTE2LDkgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAorCS8qIFNldCBQQ0llIHJlc2V0IHR5cGUgZm9yIEVFSCB0byBmdW5kYW1lbnRhbC4gKi8KKwlwZGV2LT5uZWVkc19mcmVzZXQgPSAxOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXFkZXYtPnJlZ19iYXNlID0KIAkgICAgaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwKIAkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKQEAgLTQwMTcsNiArNDA3MywzMyBAQAogCWZyZWVfbmV0ZGV2KG5kZXYpOwogfQogCisvKiBDbGVhbiB1cCByZXNvdXJjZXMgd2l0aG91dCB0b3VjaGluZyBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIHFsX2VlaF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisJCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJfQorCisJaWYgKHRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykKKwkJbmV0aWZfbmFwaV9kZWwoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CisKKwljbGVhcl9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKKwlxbF90eF9yaW5nX2NsZWFuKHFkZXYpOworCXFsX2ZyZWVfcnhfYnVmZmVycyhxZGV2KTsKKwlxbF9yZWxlYXNlX2FkYXB0ZXJfcmVzb3VyY2VzKHFkZXYpOworfQorCiAvKgogICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gd2hlbmV2ZXIKICAqIGEgUENJIGJ1cyBlcnJvciBpcyBkZXRlY3RlZC4KQEAgLTQwMjUsMTcgKzQxMDgsMjEgQEAKIAkJCQkJICAgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7Ci0KLQlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIHBjaV9jaGFubmVsX2lvX25vcm1hbDoKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgorCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKKwkJCXFsX2VlaF9jbG9zZShuZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIiVzOiBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmRldikpCi0JCXFsX2FkYXB0ZXJfZG93bihxZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwl9CiAKIAkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKQEAgLTQwNTIsMjUgKzQxMzksMTUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCisJcGRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KLQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYobmRldik7Ci0JcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KLQltZW1jcHkobmRldi0+cGVybV9hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+YWRkcl9sZW4pOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5kZXYtPnBlcm1fYWRkcikpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJBZnRlciByZXNldCwgaW52YWxpZCBNQUMgYWRkcmVzcy5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKLQl9Ci0KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogfQogCkBAIC00MDc4LDE3ICs0MTU1LDIxIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgZXJyID0gMDsKIAotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCisJaWYgKHFsX2FkYXB0ZXJfcmVzZXQocWRldikpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJyZXNldCBGQUlMRUQhXG4iKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewotCQlpZiAocWxfYWRhcHRlcl91cChxZGV2KSkgeworCQllcnIgPSBxbGdlX29wZW4obmRldik7CisJCWlmIChlcnIpIHsKIAkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAogCQkJCSJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KKwl9IGVsc2UgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKKwkJCSJEZXZpY2Ugd2FzIG5vdCBydW5uaW5nIHByaW9yIHRvIEVFSC5cbiIpOwogCX0KLQogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBjMmU0MzA3Li5hZWMwNWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC00NzAsNyArNDcwLDggQEAKICAqLwogc3RhdGljIGludCBxbF9tYWlsYm94X2NvbW1hbmQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKLQlpbnQgc3RhdHVzLCBjb3VudDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAKIAogCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGZvciBNUEkgKi8KQEAgLTQ5MSwxNCArNDkyLDE0IEBACiAJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUuIFdlIGxvb3AKIAkgKiBoZXJlIGJlY2F1c2Ugc29tZSBBRU4gbWlnaHQgYXJyaXZlIHdoaWxlCiAJICogd2UncmUgd2FpdGluZyBmb3IgdGhlIG1haWxib3ggY29tbWFuZCB0bwotCSAqIGNvbXBsZXRlLiBJZiBtb3JlIHRoYW4gNSBhcnJpdmUgdGhlbiB3ZSBjYW4KKwkgKiBjb21wbGV0ZS4gSWYgbW9yZSB0aGFuIDUgc2Vjb25kcyBleHBpcmUgd2UgY2FuCiAJICogYXNzdW1lIHNvbWV0aGluZyBpcyB3cm9uZy4gKi8KLQljb3VudCA9IDU7CisJY291bnQgPSBqaWZmaWVzICsgSFogKiBNQUlMQk9YX1RJTUVPVVQ7CiAJZG8gewogCQkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0IHRvIGNvbWUgaW4uICovCiAJCXN0YXR1cyA9IHFsX3dhaXRfbWJ4X2NtZF9jbXBsdChxZGV2KTsKIAkJaWYgKHN0YXR1cykKLQkJCWdvdG8gZW5kOworCQkJY29udGludWU7CiAKIAkJLyogUHJvY2VzcyB0aGUgZXZlbnQuICBJZiBpdCdzIGFuIEFFTiwgaXQKIAkJICogd2lsbCBiZSBoYW5kbGVkIGluLWxpbmUgb3IgYSB3b3JrZXIKQEAgLTUxNywxNSArNTE4LDE1IEBACiAJCQkJCU1CX0NNRF9TVFNfR09PRCkgfHwKIAkJCSgobWJjcC0+bWJveF9vdXRbMF0gJiAweDAwMDBmMDAwKSA9PQogCQkJCQlNQl9DTURfU1RTX0lOVFJNRFQpKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1jb3VudCk7CisJCQlnb3RvIGRvbmU7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgY291bnQpKTsKIAotCWlmICghY291bnQpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOwotCQlzdGF0dXMgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVuZDsKLQl9CisJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtYWlsYm94IGNvbXBsZXRlLlxuIik7CisJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwlnb3RvIGVuZDsKKworZG9uZToKIAogCS8qIE5vdyB3ZSBjYW4gY2xlYXIgdGhlIGludGVycnVwdCBjb25kaXRpb24KIAkgKiBhbmQgbG9vayBhdCBvdXIgc3RhdHVzLgpAQCAtNzY4LDYgKzc2OSw5NSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBxbF9tYl9zZXRfbWdtbnRfdHJhZmZpY19jdGwoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBjb250cm9sKQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAyOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9TRVRfTUdNTlRfVEZLX0NUTDsKKwltYmNwLT5tYm94X2luWzFdID0gY29udHJvbDsKKworCXN0YXR1cyA9IHFsX21haWxib3hfY29tbWFuZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfR09PRCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0lOVkxEX0NNRCkgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvbW1hbmQgbm90IHN1cHBvcnRlZCBieSBmaXJtd2FyZS5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19FUlIpIHsKKwkJLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgZmlybXdhcmUgaXMKKwkJICogYWxyZWFkeSBpbiB0aGUgc3RhdGUgd2UgYXJlIHRyeWluZyB0bworCQkgKiBjaGFuZ2UgaXQgdG8uCisJCSAqLworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvbW1hbmQgcGFyYW1ldGVycyBtYWtlIG5vIGNoYW5nZS5cbiIpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB0aGUgbWFpbGJveCBjb21tYW5kIHN0YXR1cy4gKi8KK3N0YXRpYyBpbnQgcWxfbWJfZ2V0X21nbW50X3RyYWZmaWNfY3RsKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKmNvbnRyb2wpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXM7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCSpjb250cm9sID0gMDsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9HRVRfTUdNTlRfVEZLX0NUTDsKKworCXN0YXR1cyA9IHFsX21haWxib3hfY29tbWFuZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfR09PRCkgeworCQkqY29udHJvbCA9IG1iY3AtPm1ib3hfaW5bMV07CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0VSUikgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkZhaWxlZCB0byBnZXQgTVBJIHRyYWZmaWMgY29udHJvbC5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgcWxfd2FpdF9maWZvX2VtcHR5KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBjb3VudCA9IDU7CisJdTMyIG1nbW50X2ZpZm9fZW1wdHk7CisJdTMyIG5pY19maWZvX2VtcHR5OworCisJZG8geworCQluaWNfZmlmb19lbXB0eSA9IHFsX3JlYWQzMihxZGV2LCBTVFMpICYgU1RTX05GRTsKKwkJcWxfbWJfZ2V0X21nbW50X3RyYWZmaWNfY3RsKHFkZXYsICZtZ21udF9maWZvX2VtcHR5KTsKKwkJbWdtbnRfZmlmb19lbXB0eSAmPSBNQl9HRVRfTVBJX1RGS19GSUZPX0VNUFRZOworCQlpZiAobmljX2ZpZm9fZW1wdHkgJiYgbWdtbnRfZmlmb19lbXB0eSkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMTAwKTsKKwl9IHdoaWxlIChjb3VudC0tID4gMCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKIC8qIEFQSSBjYWxsZWQgaW4gd29yayB0aHJlYWQgY29udGV4dCB0byBzZXQgbmV3IFRYL1JYCiAgKiBtYXhpbXVtIGZyYW1lIHNpemUgdmFsdWVzIHRvIG1hdGNoIE1UVS4KICAqLwpAQCAtODc2LDYgKzk2Niw4IEBACiAJaW50IGVyciA9IDA7CiAKIAlydG5sX2xvY2soKTsKKwkvKiBCZWdpbiBwb2xsZWQgbW9kZSBmb3IgTVBJICovCisJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpKTsKIAogCXdoaWxlIChxbF9yZWFkMzIocWRldiwgU1RTKSAmIFNUU19QSSkgewogCQltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOwpAQCAtODg4LDYgKzk4MCw4IEBACiAJCQlicmVhazsKIAl9CiAKKwkvKiBFbmQgcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSB8IElOVFJfTUFTS19QSSk7CiAJcnRubF91bmxvY2soKTsKIAlxbF9lbmFibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA1MGM2YTNjLi5mYTQ5MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTExNSw3ICsxMTUsOSBAQAogCVJUTF9HSUdBX01BQ19WRVJfMjIgPSAweDE2LCAvLyA4MTY4QwogCVJUTF9HSUdBX01BQ19WRVJfMjMgPSAweDE3LCAvLyA4MTY4Q1AKIAlSVExfR0lHQV9NQUNfVkVSXzI0ID0gMHgxOCwgLy8gODE2OENQCi0JUlRMX0dJR0FfTUFDX1ZFUl8yNSA9IDB4MTkgIC8vIDgxNjhECisJUlRMX0dJR0FfTUFDX1ZFUl8yNSA9IDB4MTksIC8vIDgxNjhECisJUlRMX0dJR0FfTUFDX1ZFUl8yNiA9IDB4MWEsIC8vIDgxNjhECisJUlRMX0dJR0FfTUFDX1ZFUl8yNyA9IDB4MWIgIC8vIDgxNjhEUAogfTsKIAogI2RlZmluZSBfUihOQU1FLE1BQyxNQVNLKSBcCkBAIC0xNTAsNyArMTUyLDkgQEAKIAlfUigiUlRMODE2OGMvODExMWMiLAlSVExfR0lHQV9NQUNfVkVSXzIyLCAweGZmN2UxODgwKSwgLy8gUENJLUUKIAlfUigiUlRMODE2OGNwLzgxMTFjcCIsCVJUTF9HSUdBX01BQ19WRVJfMjMsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQogCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhkLzgxMTFkIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNSwgMHhmZjdlMTg4MCkgIC8vIFBDSS1FCisJX1IoIlJUTDgxNjhkLzgxMTFkIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCisJX1IoIlJUTDgxNjhkLzgxMTFkIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCisJX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfR0lHQV9NQUNfVkVSXzI3LCAweGZmN2UxODgwKSAgLy8gUENJLUUKIH07CiAjdW5kZWYgX1IKIApAQCAtMjUzLDYgKzI1NywxMyBAQAogCURCR19SRUcJCQk9IDB4ZDEsCiAjZGVmaW5lCUZJWF9OQUtfMQkJCSgxIDw8IDQpCiAjZGVmaW5lCUZJWF9OQUtfMgkJCSgxIDw8IDMpCisJRUZVU0VBUgkJCT0gMHhkYywKKyNkZWZpbmUJRUZVU0VBUl9GTEFHCQkJMHg4MDAwMDAwMAorI2RlZmluZQlFRlVTRUFSX1dSSVRFX0NNRAkJMHg4MDAwMDAwMAorI2RlZmluZQlFRlVTRUFSX1JFQURfQ01ECQkweDAwMDAwMDAwCisjZGVmaW5lCUVGVVNFQVJfUkVHX01BU0sJCTB4MDNmZgorI2RlZmluZQlFRlVTRUFSX1JFR19TSElGVAkJOAorI2RlZmluZQlFRlVTRUFSX0RBVEFfTUFTSwkJMHhmZgogfTsKIAogZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7CkBAIC01NjgsNiArNTc5LDE0IEBACiAJbWRpb193cml0ZShpb2FkZHIsIHJlZ19hZGRyLCBtZGlvX3JlYWQoaW9hZGRyLCByZWdfYWRkcikgfCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIG1kaW9fcGx1c19taW51cyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyLCBpbnQgcCwgaW50IG0pCit7CisJaW50IHZhbDsKKworCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIHJlZ19hZGRyKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgcmVnX2FkZHIsICh2YWwgfCBwKSAmIH5tKTsKK30KKwogc3RhdGljIHZvaWQgcnRsX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAogCQkJICAgaW50IHZhbCkKIHsKQEAgLTY1MSw2ICs2NzAsMjQgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyB1OCBydGw4MTY4ZF9lZnVzZV9yZWFkKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIpCit7CisJdTggdmFsdWUgPSAweGZmOworCXVuc2lnbmVkIGludCBpOworCisJUlRMX1czMihFRlVTRUFSLCAocmVnX2FkZHIgJiBFRlVTRUFSX1JFR19NQVNLKSA8PCBFRlVTRUFSX1JFR19TSElGVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzAwOyBpKyspIHsKKwkJaWYgKFJUTF9SMzIoRUZVU0VBUikgJiBFRlVTRUFSX0ZMQUcpIHsKKwkJCXZhbHVlID0gUlRMX1IzMihFRlVTRUFSKSAmIEVGVVNFQVJfREFUQV9NQVNLOworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2sodm9pZCBfX2lvbWVtICppb2FkZHIpCiB7CiAJUlRMX1cxNihJbnRyTWFzaywgMHgwMDAwKTsKQEAgLTk5Miw3ICsxMDI5LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAl0cC0+dmxncnAgPSBncnA7Ci0JaWYgKHRwLT52bGdycCkKKwkvKgorCSAqIERvIG5vdCBkaXNhYmxlIFJ4VmxhbiBvbiA4MTEwU0NkLgorCSAqLworCWlmICh0cC0+dmxncnAgfHwgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzA1KSkKIAkJdHAtPmNwX2NtZCB8PSBSeFZsYW47CiAJZWxzZQogCQl0cC0+Y3BfY21kICY9IH5SeFZsYW47CkBAIC0xMjQzLDcgKzEyODMsMTAgQEAKIAkJaW50IG1hY192ZXJzaW9uOwogCX0gbWFjX2luZm9bXSA9IHsKIAkJLyogODE2OEQgZmFtaWx5LiAqLwotCQl7IDB4N2M4MDAwMDAsIDB4MjgwMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjUgfSwKKwkJeyAweDdjZjAwMDAwLCAweDI4MzAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI2IH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgyODEwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNSB9LAorCQl7IDB4N2M4MDAwMDAsIDB4Mjg4MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjcgfSwKKwkJeyAweDdjODAwMDAwLCAweDI4MDAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI2IH0sCiAKIAkJLyogODE2OEMgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4M2NhMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjQgfSwKQEAgLTE2NDgsNzQgKzE2OTEsOTAzIEBACiAJcnRsODE2OGNfM19od19waHlfY29uZmlnKGlvYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhkX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCiB7Ci0Jc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzBbXSA9IHsKKwlzdGF0aWMgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzBbXSA9IHsKIAkJeyAweDFmLCAweDAwMDEgfSwKLQkJeyAweDA5LCAweDI3NzAgfSwKLQkJeyAweDA4LCAweDA0ZDAgfSwKLQkJeyAweDBiLCAweGFkMTUgfSwKLQkJeyAweDBjLCAweDViZjAgfSwKLQkJeyAweDFjLCAweGYxMDEgfSwKKwkJeyAweDA2LCAweDQwNjQgfSwKKwkJeyAweDA3LCAweDI4NjMgfSwKKwkJeyAweDA4LCAweDA1OWMgfSwKKwkJeyAweDA5LCAweDI2YjQgfSwKKwkJeyAweDBhLCAweDZhMTkgfSwKKwkJeyAweDBiLCAweGRjYzggfSwKKwkJeyAweDEwLCAweGYwNmQgfSwKKwkJeyAweDE0LCAweDdmNjggfSwKKwkJeyAweDE4LCAweDdmZDkgfSwKKwkJeyAweDFjLCAweGYwZmYgfSwKKwkJeyAweDFkLCAweDNkOWMgfSwKIAkJeyAweDFmLCAweDAwMDMgfSwKLQkJeyAweDE0LCAweDk0ZDcgfSwKLQkJeyAweDEyLCAweGY0ZDYgfSwKLQkJeyAweDA5LCAweGNhMGYgfSwKKwkJeyAweDEyLCAweGY0OWYgfSwKKwkJeyAweDEzLCAweDA3MGIgfSwKKwkJeyAweDFhLCAweDA1YWQgfSwKKwkJeyAweDE0LCAweDk0YzAgfQorCX07CisJc3RhdGljIHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8xW10gPSB7CiAJCXsgMHgxZiwgMHgwMDAyIH0sCi0JCXsgMHgwYiwgMHgwYjEwIH0sCi0JCXsgMHgwYywgMHhkMWY3IH0sCi0JCXsgMHgxZiwgMHgwMDAyIH0sCi0JCXsgMHgwNiwgMHg1NDYxIH0sCi0JCXsgMHgxZiwgMHgwMDAyIH0sCi0JCXsgMHgwNSwgMHg2NjYyIH0sCi0JCXsgMHgxZiwgMHgwMDAwIH0sCi0JCXsgMHgxNCwgMHgwMDYwIH0sCi0JCXsgMHgxZiwgMHgwMDAwIH0sCi0JCXsgMHgwZCwgMHhmOGEwIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0sCiAJCXsgMHgxZiwgMHgwMDA1IH0sCi0JCXsgMHgwNSwgMHhmZmMyIH0KKwkJeyAweDA1LCAweDgzMzIgfSwKKwkJeyAweDA2LCAweDU1NjEgfQorCX07CisJc3RhdGljIHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8yW10gPSB7CisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHhmZmMyIH0sCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHg4MDAwIH0sCisJCXsgMHgwNiwgMHhmOGY5IH0sCisJCXsgMHgwNiwgMHhmYWVmIH0sCisJCXsgMHgwNiwgMHg1OWVlIH0sCisJCXsgMHgwNiwgMHhmOGVhIH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHhmOGViIH0sCisJCXsgMHgwNiwgMHgwMGUwIH0sCisJCXsgMHgwNiwgMHhmODdjIH0sCisJCXsgMHgwNiwgMHhlMWY4IH0sCisJCXsgMHgwNiwgMHg3ZDU5IH0sCisJCXsgMHgwNiwgMHgwZmVmIH0sCisJCXsgMHgwNiwgMHgwMTM5IH0sCisJCXsgMHgwNiwgMHgwMjllIH0sCisJCXsgMHgwNiwgMHgwNmVmIH0sCisJCXsgMHgwNiwgMHgxMDM5IH0sCisJCXsgMHgwNiwgMHgwODlmIH0sCisJCXsgMHgwNiwgMHgyYWVlIH0sCisJCXsgMHgwNiwgMHhmOGVhIH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHhmOGViIH0sCisJCXsgMHgwNiwgMHgwMWUwIH0sCisJCXsgMHgwNiwgMHhmODdjIH0sCisJCXsgMHgwNiwgMHhlMWY4IH0sCisJCXsgMHgwNiwgMHg3ZDU4IH0sCisJCXsgMHgwNiwgMHg0MDllIH0sCisJCXsgMHgwNiwgMHgwZjM5IH0sCisJCXsgMHgwNiwgMHg0NmFhIH0sCisJCXsgMHgwNiwgMHgwYmJmIH0sCisJCXsgMHgwNiwgMHg4MjkwIH0sCisJCXsgMHgwNiwgMHhkNjgyIH0sCisJCXsgMHgwNiwgMHg5ODAyIH0sCisJCXsgMHgwNiwgMHgwMTRmIH0sCisJCXsgMHgwNiwgMHhhZTA5IH0sCisJCXsgMHgwNiwgMHhiZjgyIH0sCisJCXsgMHgwNiwgMHg5OGQ2IH0sCisJCXsgMHgwNiwgMHg4MmEwIH0sCisJCXsgMHgwNiwgMHgwMjAxIH0sCisJCXsgMHgwNiwgMHg0ZmVmIH0sCisJCXsgMHgwNiwgMHg5NWZlIH0sCisJCXsgMHgwNiwgMHhmZGZjIH0sCisJCXsgMHgwNiwgMHgwNWY4IH0sCisJCXsgMHgwNiwgMHhmOWZhIH0sCisJCXsgMHgwNiwgMHhlZWY4IH0sCisJCXsgMHgwNiwgMHhlYTAwIH0sCisJCXsgMHgwNiwgMHhlZWY4IH0sCisJCXsgMHgwNiwgMHhlYjAwIH0sCisJCXsgMHgwNiwgMHhlMmY4IH0sCisJCXsgMHgwNiwgMHg3Y2UzIH0sCisJCXsgMHgwNiwgMHhmODdkIH0sCisJCXsgMHgwNiwgMHhhNTExIH0sCisJCXsgMHgwNiwgMHgxMTEyIH0sCisJCXsgMHgwNiwgMHhkMjQwIH0sCisJCXsgMHgwNiwgMHhkNjQ0IH0sCisJCXsgMHgwNiwgMHg0NDAyIH0sCisJCXsgMHgwNiwgMHg4MjE3IH0sCisJCXsgMHgwNiwgMHhkMmEwIH0sCisJCXsgMHgwNiwgMHhkNmFhIH0sCisJCXsgMHgwNiwgMHhhYTAyIH0sCisJCXsgMHgwNiwgMHg4MjE3IH0sCisJCXsgMHgwNiwgMHhhZTBmIH0sCisJCXsgMHgwNiwgMHhhNTQ0IH0sCisJCXsgMHgwNiwgMHg0NDAyIH0sCisJCXsgMHgwNiwgMHhhZTRkIH0sCisJCXsgMHgwNiwgMHhhNWFhIH0sCisJCXsgMHgwNiwgMHhhYTAyIH0sCisJCXsgMHgwNiwgMHhhZTQ3IH0sCisJCXsgMHgwNiwgMHhhZjgyIH0sCisJCXsgMHgwNiwgMHgxM2VlIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHgwZmVlIH0sCisJCXsgMHgwNiwgMHg4MzRjIH0sCisJCXsgMHgwNiwgMHgwZmVlIH0sCisJCXsgMHgwNiwgMHg4MzRmIH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHg4MzUxIH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHg4MzRhIH0sCisJCXsgMHgwNiwgMHhmZmVlIH0sCisJCXsgMHgwNiwgMHg4MzRiIH0sCisJCXsgMHgwNiwgMHhmZmUwIH0sCisJCXsgMHgwNiwgMHg4MzMwIH0sCisJCXsgMHgwNiwgMHhlMTgzIH0sCisJCXsgMHgwNiwgMHgzMTU4IH0sCisJCXsgMHgwNiwgMHhmZWU0IH0sCisJCXsgMHgwNiwgMHhmODhhIH0sCisJCXsgMHgwNiwgMHhlNWY4IH0sCisJCXsgMHgwNiwgMHg4YmUwIH0sCisJCXsgMHgwNiwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHhlMTgzIH0sCisJCXsgMHgwNiwgMHgzMzU5IH0sCisJCXsgMHgwNiwgMHgwZmUyIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHgwYzI0IH0sCisJCXsgMHgwNiwgMHg1YWYwIH0sCisJCXsgMHgwNiwgMHgxZTEyIH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg4Y2U1IH0sCisJCXsgMHgwNiwgMHhmODhkIH0sCisJCXsgMHgwNiwgMHhhZjgyIH0sCisJCXsgMHgwNiwgMHgxM2UwIH0sCisJCXsgMHgwNiwgMHg4MzRmIH0sCisJCXsgMHgwNiwgMHgxMGU0IH0sCisJCXsgMHgwNiwgMHg4MzRmIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0ZTc4IH0sCisJCXsgMHgwNiwgMHgwMDlmIH0sCisJCXsgMHgwNiwgMHgwYWUwIH0sCisJCXsgMHgwNiwgMHg4MzRmIH0sCisJCXsgMHgwNiwgMHhhMDEwIH0sCisJCXsgMHgwNiwgMHhhNWVlIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHgwMWUwIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHg3ODA1IH0sCisJCXsgMHgwNiwgMHg5ZTlhIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0ZTc4IH0sCisJCXsgMHgwNiwgMHgwNDllIH0sCisJCXsgMHgwNiwgMHgxMGUwIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHg3ODAzIH0sCisJCXsgMHgwNiwgMHg5ZTBmIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0ZTc4IH0sCisJCXsgMHgwNiwgMHgwMTllIH0sCisJCXsgMHgwNiwgMHgwNWFlIH0sCisJCXsgMHgwNiwgMHgwY2FmIH0sCisJCXsgMHgwNiwgMHg4MWY4IH0sCisJCXsgMHgwNiwgMHhhZjgxIH0sCisJCXsgMHgwNiwgMHhhM2FmIH0sCisJCXsgMHgwNiwgMHg4MWRjIH0sCisJCXsgMHgwNiwgMHhhZjgyIH0sCisJCXsgMHgwNiwgMHgxM2VlIH0sCisJCXsgMHgwNiwgMHg4MzQ4IH0sCisJCXsgMHgwNiwgMHgwMGVlIH0sCisJCXsgMHgwNiwgMHg4MzQ5IH0sCisJCXsgMHgwNiwgMHgwMGUwIH0sCisJCXsgMHgwNiwgMHg4MzUxIH0sCisJCXsgMHgwNiwgMHgxMGU0IH0sCisJCXsgMHgwNiwgMHg4MzUxIH0sCisJCXsgMHgwNiwgMHg1ODAxIH0sCisJCXsgMHgwNiwgMHg5ZmVhIH0sCisJCXsgMHgwNiwgMHhkMDAwIH0sCisJCXsgMHgwNiwgMHhkMTgwIH0sCisJCXsgMHgwNiwgMHgxZjY2IH0sCisJCXsgMHgwNiwgMHhlMmY4IH0sCisJCXsgMHgwNiwgMHhlYWUzIH0sCisJCXsgMHgwNiwgMHhmOGViIH0sCisJCXsgMHgwNiwgMHg1YWY4IH0sCisJCXsgMHgwNiwgMHgxZTIwIH0sCisJCXsgMHgwNiwgMHhlNmY4IH0sCisJCXsgMHgwNiwgMHhlYWU1IH0sCisJCXsgMHgwNiwgMHhmOGViIH0sCisJCXsgMHgwNiwgMHhkMzAyIH0sCisJCXsgMHgwNiwgMHhiM2ZlIH0sCisJCXsgMHgwNiwgMHhlMmY4IH0sCisJCXsgMHgwNiwgMHg3Y2VmIH0sCisJCXsgMHgwNiwgMHgzMjViIH0sCisJCXsgMHgwNiwgMHg4MGUzIH0sCisJCXsgMHgwNiwgMHhmODdkIH0sCisJCXsgMHgwNiwgMHg5ZTAzIH0sCisJCXsgMHgwNiwgMHg3ZGZmIH0sCisJCXsgMHgwNiwgMHhmZjBkIH0sCisJCXsgMHgwNiwgMHg1ODFjIH0sCisJCXsgMHgwNiwgMHg1NTFhIH0sCisJCXsgMHgwNiwgMHg2NTExIH0sCisJCXsgMHgwNiwgMHhhMTkwIH0sCisJCXsgMHgwNiwgMHhkM2UyIH0sCisJCXsgMHgwNiwgMHg4MzQ4IH0sCisJCXsgMHgwNiwgMHhlMzgzIH0sCisJCXsgMHgwNiwgMHg0OTFiIH0sCisJCXsgMHgwNiwgMHg1NmFiIH0sCisJCXsgMHgwNiwgMHgwOGVmIH0sCisJCXsgMHgwNiwgMHg1NmU2IH0sCisJCXsgMHgwNiwgMHg4MzQ4IH0sCisJCXsgMHgwNiwgMHhlNzgzIH0sCisJCXsgMHgwNiwgMHg0OTEwIH0sCisJCXsgMHgwNiwgMHhkMTgwIH0sCisJCXsgMHgwNiwgMHgxZjY2IH0sCisJCXsgMHgwNiwgMHhhMDA0IH0sCisJCXsgMHgwNiwgMHhiOWUyIH0sCisJCXsgMHgwNiwgMHg4MzQ4IH0sCisJCXsgMHgwNiwgMHhlMzgzIH0sCisJCXsgMHgwNiwgMHg0OWVmIH0sCisJCXsgMHgwNiwgMHg2NWUyIH0sCisJCXsgMHgwNiwgMHg4MzRhIH0sCisJCXsgMHgwNiwgMHhlMzgzIH0sCisJCXsgMHgwNiwgMHg0YjFiIH0sCisJCXsgMHgwNiwgMHg1NmFhIH0sCisJCXsgMHgwNiwgMHgwZWVmIH0sCisJCXsgMHgwNiwgMHg1NmU2IH0sCisJCXsgMHgwNiwgMHg4MzRhIH0sCisJCXsgMHgwNiwgMHhlNzgzIH0sCisJCXsgMHgwNiwgMHg0YmUyIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHhlNjgzIH0sCisJCXsgMHgwNiwgMHg0Y2UwIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHhhMDAwIH0sCisJCXsgMHgwNiwgMHgwY2FmIH0sCisJCXsgMHgwNiwgMHg4MWRjIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0ZDEwIH0sCisJCXsgMHgwNiwgMHhlNDgzIH0sCisJCXsgMHgwNiwgMHg0ZGFlIH0sCisJCXsgMHgwNiwgMHgwNDgwIH0sCisJCXsgMHgwNiwgMHhlNDgzIH0sCisJCXsgMHgwNiwgMHg0ZGUwIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHg3ODAzIH0sCisJCXsgMHgwNiwgMHg5ZTBiIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0ZTc4IH0sCisJCXsgMHgwNiwgMHgwNDllIH0sCisJCXsgMHgwNiwgMHgwNGVlIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHgwMmUwIH0sCisJCXsgMHgwNiwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHhlMTgzIH0sCisJCXsgMHgwNiwgMHgzMzU5IH0sCisJCXsgMHgwNiwgMHgwZmUyIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHgwYzI0IH0sCisJCXsgMHgwNiwgMHg1YWYwIH0sCisJCXsgMHgwNiwgMHgxZTEyIH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg4Y2U1IH0sCisJCXsgMHgwNiwgMHhmODhkIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHgzMGUxIH0sCisJCXsgMHgwNiwgMHg4MzMxIH0sCisJCXsgMHgwNiwgMHg2ODAxIH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg4YWU1IH0sCisJCXsgMHgwNiwgMHhmODhiIH0sCisJCXsgMHgwNiwgMHhhZTM3IH0sCisJCXsgMHgwNiwgMHhlZTgzIH0sCisJCXsgMHgwNiwgMHg0ZTAzIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0Y2UxIH0sCisJCXsgMHgwNiwgMHg4MzRkIH0sCisJCXsgMHgwNiwgMHgxYjAxIH0sCisJCXsgMHgwNiwgMHg5ZTA0IH0sCisJCXsgMHgwNiwgMHhhYWExIH0sCisJCXsgMHgwNiwgMHhhZWE4IH0sCisJCXsgMHgwNiwgMHhlZTgzIH0sCisJCXsgMHgwNiwgMHg0ZTA0IH0sCisJCXsgMHgwNiwgMHhlZTgzIH0sCisJCXsgMHgwNiwgMHg0ZjAwIH0sCisJCXsgMHgwNiwgMHhhZWFiIH0sCisJCXsgMHgwNiwgMHhlMDgzIH0sCisJCXsgMHgwNiwgMHg0Zjc4IH0sCisJCXsgMHgwNiwgMHgwMzlmIH0sCisJCXsgMHgwNiwgMHgxNGVlIH0sCisJCXsgMHgwNiwgMHg4MzRlIH0sCisJCXsgMHgwNiwgMHgwNWQyIH0sCisJCXsgMHgwNiwgMHg0MGQ2IH0sCisJCXsgMHgwNiwgMHg1NTU0IH0sCisJCXsgMHgwNiwgMHgwMjgyIH0sCisJCXsgMHgwNiwgMHgxN2QyIH0sCisJCXsgMHgwNiwgMHhhMGQ2IH0sCisJCXsgMHgwNiwgMHhiYTAwIH0sCisJCXsgMHgwNiwgMHgwMjgyIH0sCisJCXsgMHgwNiwgMHgxN2ZlIH0sCisJCXsgMHgwNiwgMHhmZGZjIH0sCisJCXsgMHgwNiwgMHgwNWY4IH0sCisJCXsgMHgwNiwgMHhlMGY4IH0sCisJCXsgMHgwNiwgMHg2MGUxIH0sCisJCXsgMHgwNiwgMHhmODYxIH0sCisJCXsgMHgwNiwgMHg2ODAyIH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg2MGU1IH0sCisJCXsgMHgwNiwgMHhmODYxIH0sCisJCXsgMHgwNiwgMHhlMGY4IH0sCisJCXsgMHgwNiwgMHg0OGUxIH0sCisJCXsgMHgwNiwgMHhmODQ5IH0sCisJCXsgMHgwNiwgMHg1ODBmIH0sCisJCXsgMHgwNiwgMHgxZTAyIH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg0OGU1IH0sCisJCXsgMHgwNiwgMHhmODQ5IH0sCisJCXsgMHgwNiwgMHhkMDAwIH0sCisJCXsgMHgwNiwgMHgwMjgyIH0sCisJCXsgMHgwNiwgMHg1YmJmIH0sCisJCXsgMHgwNiwgMHg4MzUwIH0sCisJCXsgMHgwNiwgMHhlZjQ2IH0sCisJCXsgMHgwNiwgMHhkYzE5IH0sCisJCXsgMHgwNiwgMHhkZGQwIH0sCisJCXsgMHgwNiwgMHgwMTAyIH0sCisJCXsgMHgwNiwgMHg4MjViIH0sCisJCXsgMHgwNiwgMHgwMjgyIH0sCisJCXsgMHgwNiwgMHg3N2UwIH0sCisJCXsgMHgwNiwgMHhmODYwIH0sCisJCXsgMHgwNiwgMHhlMWY4IH0sCisJCXsgMHgwNiwgMHg2MTU4IH0sCisJCXsgMHgwNiwgMHhmZGU0IH0sCisJCXsgMHgwNiwgMHhmODYwIH0sCisJCXsgMHgwNiwgMHhlNWY4IH0sCisJCXsgMHgwNiwgMHg2MWZjIH0sCisJCXsgMHgwNiwgMHgwNGY5IH0sCisJCXsgMHgwNiwgMHhmYWZiIH0sCisJCXsgMHgwNiwgMHhjNmJmIH0sCisJCXsgMHgwNiwgMHhmODQwIH0sCisJCXsgMHgwNiwgMHhiZTgzIH0sCisJCXsgMHgwNiwgMHg1MGEwIH0sCisJCXsgMHgwNiwgMHgwMTAxIH0sCisJCXsgMHgwNiwgMHgwNzFiIH0sCisJCXsgMHgwNiwgMHg4OWNmIH0sCisJCXsgMHgwNiwgMHhkMjA4IH0sCisJCXsgMHgwNiwgMHhlYmRiIH0sCisJCXsgMHgwNiwgMHgxOWIyIH0sCisJCXsgMHgwNiwgMHhmYmZmIH0sCisJCXsgMHgwNiwgMHhmZWZkIH0sCisJCXsgMHgwNiwgMHgwNGY4IH0sCisJCXsgMHgwNiwgMHhlMGY4IH0sCisJCXsgMHgwNiwgMHg0OGUxIH0sCisJCXsgMHgwNiwgMHhmODQ5IH0sCisJCXsgMHgwNiwgMHg2ODA4IH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg0OGU1IH0sCisJCXsgMHgwNiwgMHhmODQ5IH0sCisJCXsgMHgwNiwgMHg1OGY3IH0sCisJCXsgMHgwNiwgMHhlNGY4IH0sCisJCXsgMHgwNiwgMHg0OGU1IH0sCisJCXsgMHgwNiwgMHhmODQ5IH0sCisJCXsgMHgwNiwgMHhmYzA0IH0sCisJCXsgMHgwNiwgMHg0ZDIwIH0sCisJCXsgMHgwNiwgMHgwMDAyIH0sCisJCXsgMHgwNiwgMHg0ZTIyIH0sCisJCXsgMHgwNiwgMHgwMDAyIH0sCisJCXsgMHgwNiwgMHg0ZGRmIH0sCisJCXsgMHgwNiwgMHhmZjAxIH0sCisJCXsgMHgwNiwgMHg0ZWRkIH0sCisJCXsgMHgwNiwgMHhmZjAxIH0sCisJCXsgMHgwNSwgMHg4M2Q0IH0sCisJCXsgMHgwNiwgMHg4MDAwIH0sCisJCXsgMHgwNSwgMHg4M2Q4IH0sCisJCXsgMHgwNiwgMHg4MDUxIH0sCisJCXsgMHgwMiwgMHg2MDEwIH0sCisJCXsgMHgwMywgMHhkYzAwIH0sCisJCXsgMHgwNSwgMHhmZmY2IH0sCisJCXsgMHgwNiwgMHgwMGZjIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDAgfSwKKwkJeyAweDBkLCAweGY4ODAgfSwKKwkJeyAweDFmLCAweDAwMDAgfQogCX07CiAKIAlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0XzAsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0XzApKTsKIAotCWlmIChtZGlvX3JlYWQoaW9hZGRyLCAweDA2KSA9PSAweGM0MDApIHsKLQkJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzFbXSA9IHsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDBiLCAweDAwMTAsIDB4MDBlZik7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwYywgMHhhMjAwLCAweDVkMDApOworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8xLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7CisKKwlpZiAocnRsODE2OGRfZWZ1c2VfcmVhZChpb2FkZHIsIDB4MDEpID09IDB4YjEpIHsKKwkJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CisJCQl7IDB4MWYsIDB4MDAwMiB9LAorCQkJeyAweDA1LCAweDY2OWEgfSwKIAkJCXsgMHgxZiwgMHgwMDA1IH0sCi0JCQl7IDB4MDEsIDB4MDMwMCB9LAotCQkJeyAweDFmLCAweDAwMDAgfSwKLQkJCXsgMHgxMSwgMHg0MDFjIH0sCi0JCQl7IDB4MTYsIDB4NDEwMCB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjlhIH0sCisJCQl7IDB4MWYsIDB4MDAwMiB9CisJCX07CisJCWludCB2YWw7CisKKwkJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKworCQl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCAweDBkKTsKKworCQlpZiAoKHZhbCAmIDB4MDBmZikgIT0gMHgwMDZjKSB7CisJCQl1MzIgc2V0W10gPSB7CisJCQkJMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LAorCQkJCTB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YworCQkJfTsKKwkJCWludCBpOworCisJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKworCQkJdmFsICY9IDB4ZmYwMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNldCk7IGkrKykKKwkJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgwZCwgdmFsIHwgc2V0W2ldKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjYyIH0sCiAJCQl7IDB4MWYsIDB4MDAwNSB9LAotCQkJeyAweDA3LCAweDAwMTAgfSwKLQkJCXsgMHgwNSwgMHg4M2RjIH0sCi0JCQl7IDB4MDYsIDB4MDg3ZCB9LAotCQkJeyAweDA1LCAweDgzMDAgfSwKLQkJCXsgMHgwNiwgMHgwMTAxIH0sCi0JCQl7IDB4MDYsIDB4MDVmOCB9LAotCQkJeyAweDA2LCAweGY5ZmEgfSwKLQkJCXsgMHgwNiwgMHhmYmVmIH0sCi0JCQl7IDB4MDYsIDB4NzllMiB9LAotCQkJeyAweDA2LCAweDgzNWYgfSwKLQkJCXsgMHgwNiwgMHhlMGY4IH0sCi0JCQl7IDB4MDYsIDB4OWFlMSB9LAotCQkJeyAweDA2LCAweGY4OWIgfSwKLQkJCXsgMHgwNiwgMHhlZjMxIH0sCi0JCQl7IDB4MDYsIDB4M2I2NSB9LAotCQkJeyAweDA2LCAweGFhMDcgfSwKLQkJCXsgMHgwNiwgMHg4MWU0IH0sCi0JCQl7IDB4MDYsIDB4Zjg5YSB9LAotCQkJeyAweDA2LCAweGU1ZjggfSwKLQkJCXsgMHgwNiwgMHg5YmFmIH0sCi0JCQl7IDB4MDYsIDB4MDZhZSB9LAotCQkJeyAweDA1LCAweDgzZGMgfSwKLQkJCXsgMHgwNiwgMHg4MzAwIH0sCisJCQl7IDB4MDUsIDB4ODMzMCB9LAorCQkJeyAweDA2LCAweDY2NjIgfQogCQl9OwogCi0JCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMSwKLQkJCSAgICAgIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0XzEpKTsKKwkJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIAl9CiAKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKwltZGlvX3BhdGNoKGlvYWRkciwgMHgwZCwgMHgwMzAwKTsKKwltZGlvX3BhdGNoKGlvYWRkciwgMHgwZiwgMHgwMDEwKTsKKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDIsIDB4MDEwMCwgMHgwNjAwKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDAzLCAweDAwMDAsIDB4ZTAwMCk7CisKKwlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0XzIsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0XzIpKTsKK30KKworc3RhdGljIHZvaWQgcnRsODE2OGRfMl9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMFtdID0geworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MDYsIDB4NDA2NCB9LAorCQl7IDB4MDcsIDB4Mjg2MyB9LAorCQl7IDB4MDgsIDB4MDU5YyB9LAorCQl7IDB4MDksIDB4MjZiNCB9LAorCQl7IDB4MGEsIDB4NmExOSB9LAorCQl7IDB4MGIsIDB4ZGNjOCB9LAorCQl7IDB4MTAsIDB4ZjA2ZCB9LAorCQl7IDB4MTQsIDB4N2Y2OCB9LAorCQl7IDB4MTgsIDB4N2ZkOSB9LAorCQl7IDB4MWMsIDB4ZjBmZiB9LAorCQl7IDB4MWQsIDB4M2Q5YyB9LAorCQl7IDB4MWYsIDB4MDAwMyB9LAorCQl7IDB4MTIsIDB4ZjQ5ZiB9LAorCQl7IDB4MTMsIDB4MDcwYiB9LAorCQl7IDB4MWEsIDB4MDVhZCB9LAorCQl7IDB4MTQsIDB4OTRjMCB9LAorCisJCXsgMHgxZiwgMHgwMDAyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0sCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0KKwl9OworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMVtdID0geworCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ZmZjMiB9LAorCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ODAwMCB9LAorCQl7IDB4MDYsIDB4ZjhmOSB9LAorCQl7IDB4MDYsIDB4ZmFlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4MDBlMiB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZTNmOCB9LAorCQl7IDB4MDYsIDB4N2RhNSB9LAorCQl7IDB4MDYsIDB4MTExMSB9LAorCQl7IDB4MDYsIDB4MTJkMiB9LAorCQl7IDB4MDYsIDB4NDBkNiB9LAorCQl7IDB4MDYsIDB4NDQ0NCB9LAorCQl7IDB4MDYsIDB4MDI4MSB9LAorCQl7IDB4MDYsIDB4YzZkMiB9LAorCQl7IDB4MDYsIDB4YTBkNiB9LAorCQl7IDB4MDYsIDB4YWFhYSB9LAorCQl7IDB4MDYsIDB4MDI4MSB9LAorCQl7IDB4MDYsIDB4YzZhZSB9LAorCQl7IDB4MDYsIDB4MGZhNSB9LAorCQl7IDB4MDYsIDB4NDQ0NCB9LAorCQl7IDB4MDYsIDB4MDJhZSB9LAorCQl7IDB4MDYsIDB4NGRhNSB9LAorCQl7IDB4MDYsIDB4YWFhYSB9LAorCQl7IDB4MDYsIDB4MDJhZSB9LAorCQl7IDB4MDYsIDB4NDdhZiB9LAorCQl7IDB4MDYsIDB4ODFjMiB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwMCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGQwZiB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGMwZiB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGYwMCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NTEwMCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGFmZiB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGJmZiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4MzBlMSB9LAorCQl7IDB4MDYsIDB4ODMzMSB9LAorCQl7IDB4MDYsIDB4NThmZSB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGFlNSB9LAorCQl7IDB4MDYsIDB4Zjg4YiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4MzJlMSB9LAorCQl7IDB4MDYsIDB4ODMzMyB9LAorCQl7IDB4MDYsIDB4NTkwZiB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NGQwYyB9LAorCQl7IDB4MDYsIDB4MjQ1YSB9LAorCQl7IDB4MDYsIDB4ZjAxZSB9LAorCQl7IDB4MDYsIDB4MTJlNCB9LAorCQl7IDB4MDYsIDB4Zjg4YyB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4OGRhZiB9LAorCQl7IDB4MDYsIDB4ODFjMiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGYxMCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NGZlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMCB9LAorCQl7IDB4MDYsIDB4OWYwYSB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGZhMCB9LAorCQl7IDB4MDYsIDB4MTBhNSB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwMSB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDU5ZSB9LAorCQl7IDB4MDYsIDB4OWFlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwNCB9LAorCQl7IDB4MDYsIDB4OWUxMCB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDM5ZSB9LAorCQl7IDB4MDYsIDB4MGZlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMSB9LAorCQl7IDB4MDYsIDB4OWUwNSB9LAorCQl7IDB4MDYsIDB4YWUwYyB9LAorCQl7IDB4MDYsIDB4YWY4MSB9LAorCQl7IDB4MDYsIDB4YTdhZiB9LAorCQl7IDB4MDYsIDB4ODE1MiB9LAorCQl7IDB4MDYsIDB4YWY4MSB9LAorCQl7IDB4MDYsIDB4OGJhZiB9LAorCQl7IDB4MDYsIDB4ODFjMiB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NDgwMCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NDkwMCB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NTExMCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NTE1OCB9LAorCQl7IDB4MDYsIDB4MDE5ZiB9LAorCQl7IDB4MDYsIDB4ZWFkMCB9LAorCQl7IDB4MDYsIDB4MDBkMSB9LAorCQl7IDB4MDYsIDB4ODAxZiB9LAorCQl7IDB4MDYsIDB4NjZlMiB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4ZTNmOCB9LAorCQl7IDB4MDYsIDB4ZWI1YSB9LAorCQl7IDB4MDYsIDB4ZjgxZSB9LAorCQl7IDB4MDYsIDB4MjBlNiB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4ZWJkMyB9LAorCQl7IDB4MDYsIDB4MDJiMyB9LAorCQl7IDB4MDYsIDB4ZmVlMiB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZWYzMiB9LAorCQl7IDB4MDYsIDB4NWI4MCB9LAorCQl7IDB4MDYsIDB4ZTNmOCB9LAorCQl7IDB4MDYsIDB4N2Q5ZSB9LAorCQl7IDB4MDYsIDB4MDM3ZCB9LAorCQl7IDB4MDYsIDB4ZmZmZiB9LAorCQl7IDB4MDYsIDB4MGQ1OCB9LAorCQl7IDB4MDYsIDB4MWM1NSB9LAorCQl7IDB4MDYsIDB4MWE2NSB9LAorCQl7IDB4MDYsIDB4MTFhMSB9LAorCQl7IDB4MDYsIDB4OTBkMyB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NDhlMyB9LAorCQl7IDB4MDYsIDB4ODM0OSB9LAorCQl7IDB4MDYsIDB4MWI1NiB9LAorCQl7IDB4MDYsIDB4YWIwOCB9LAorCQl7IDB4MDYsIDB4ZWY1NiB9LAorCQl7IDB4MDYsIDB4ZTY4MyB9LAorCQl7IDB4MDYsIDB4NDhlNyB9LAorCQl7IDB4MDYsIDB4ODM0OSB9LAorCQl7IDB4MDYsIDB4MTBkMSB9LAorCQl7IDB4MDYsIDB4ODAxZiB9LAorCQl7IDB4MDYsIDB4NjZhMCB9LAorCQl7IDB4MDYsIDB4MDRiOSB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NDhlMyB9LAorCQl7IDB4MDYsIDB4ODM0OSB9LAorCQl7IDB4MDYsIDB4ZWY2NSB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NGFlMyB9LAorCQl7IDB4MDYsIDB4ODM0YiB9LAorCQl7IDB4MDYsIDB4MWI1NiB9LAorCQl7IDB4MDYsIDB4YWEwZSB9LAorCQl7IDB4MDYsIDB4ZWY1NiB9LAorCQl7IDB4MDYsIDB4ZTY4MyB9LAorCQl7IDB4MDYsIDB4NGFlNyB9LAorCQl7IDB4MDYsIDB4ODM0YiB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NGRlNiB9LAorCQl7IDB4MDYsIDB4ODM0YyB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGRhMCB9LAorCQl7IDB4MDYsIDB4MDAwYyB9LAorCQl7IDB4MDYsIDB4YWY4MSB9LAorCQl7IDB4MDYsIDB4OGJlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MTBlNCB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4YWUwNCB9LAorCQl7IDB4MDYsIDB4ODBlNCB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDM5ZSB9LAorCQl7IDB4MDYsIDB4MGJlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwNCB9LAorCQl7IDB4MDYsIDB4OWUwNCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwMiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4MzJlMSB9LAorCQl7IDB4MDYsIDB4ODMzMyB9LAorCQl7IDB4MDYsIDB4NTkwZiB9LAorCQl7IDB4MDYsIDB4ZTI4MyB9LAorCQl7IDB4MDYsIDB4NGQwYyB9LAorCQl7IDB4MDYsIDB4MjQ1YSB9LAorCQl7IDB4MDYsIDB4ZjAxZSB9LAorCQl7IDB4MDYsIDB4MTJlNCB9LAorCQl7IDB4MDYsIDB4Zjg4YyB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4OGRlMCB9LAorCQl7IDB4MDYsIDB4ODMzMCB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzE2OCB9LAorCQl7IDB4MDYsIDB4MDFlNCB9LAorCQl7IDB4MDYsIDB4Zjg4YSB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4OGJhZSB9LAorCQl7IDB4MDYsIDB4MzdlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDNlMCB9LAorCQl7IDB4MDYsIDB4ODM0YyB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4NGQxYiB9LAorCQl7IDB4MDYsIDB4MDE5ZSB9LAorCQl7IDB4MDYsIDB4MDRhYSB9LAorCQl7IDB4MDYsIDB4YTFhZSB9LAorCQl7IDB4MDYsIDB4YThlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDRlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4MDBhZSB9LAorCQl7IDB4MDYsIDB4YWJlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4NzgwMyB9LAorCQl7IDB4MDYsIDB4OWYxNCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwNSB9LAorCQl7IDB4MDYsIDB4ZDI0MCB9LAorCQl7IDB4MDYsIDB4ZDY1NSB9LAorCQl7IDB4MDYsIDB4NTQwMiB9LAorCQl7IDB4MDYsIDB4ODFjNiB9LAorCQl7IDB4MDYsIDB4ZDJhMCB9LAorCQl7IDB4MDYsIDB4ZDZiYSB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4ODFjNiB9LAorCQl7IDB4MDYsIDB4ZmVmZCB9LAorCQl7IDB4MDYsIDB4ZmMwNSB9LAorCQl7IDB4MDYsIDB4ZjhlMCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4NjE2OCB9LAorCQl7IDB4MDYsIDB4MDJlNCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NjFlMCB9LAorCQl7IDB4MDYsIDB4Zjg0OCB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4NDk1OCB9LAorCQl7IDB4MDYsIDB4MGYxZSB9LAorCQl7IDB4MDYsIDB4MDJlNCB9LAorCQl7IDB4MDYsIDB4Zjg0OCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NDlkMCB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4ODIwYSB9LAorCQl7IDB4MDYsIDB4YmY4MyB9LAorCQl7IDB4MDYsIDB4NTBlZiB9LAorCQl7IDB4MDYsIDB4NDZkYyB9LAorCQl7IDB4MDYsIDB4MTlkZCB9LAorCQl7IDB4MDYsIDB4ZDAwMSB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4MGEwMiB9LAorCQl7IDB4MDYsIDB4ODIyNiB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NjBlMSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4NThmZCB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NjBlNSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4ZmMwNCB9LAorCQl7IDB4MDYsIDB4ZjlmYSB9LAorCQl7IDB4MDYsIDB4ZmJjNiB9LAorCQl7IDB4MDYsIDB4YmZmOCB9LAorCQl7IDB4MDYsIDB4NDBiZSB9LAorCQl7IDB4MDYsIDB4ODM1MCB9LAorCQl7IDB4MDYsIDB4YTAwMSB9LAorCQl7IDB4MDYsIDB4MDEwNyB9LAorCQl7IDB4MDYsIDB4MWI4OSB9LAorCQl7IDB4MDYsIDB4Y2ZkMiB9LAorCQl7IDB4MDYsIDB4MDhlYiB9LAorCQl7IDB4MDYsIDB4ZGIxOSB9LAorCQl7IDB4MDYsIDB4YjJmYiB9LAorCQl7IDB4MDYsIDB4ZmZmZSB9LAorCQl7IDB4MDYsIDB4ZmQwNCB9LAorCQl7IDB4MDYsIDB4ZjhlMCB9LAorCQl7IDB4MDYsIDB4Zjg0OCB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4NDk2OCB9LAorCQl7IDB4MDYsIDB4MDhlNCB9LAorCQl7IDB4MDYsIDB4Zjg0OCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NDk1OCB9LAorCQl7IDB4MDYsIDB4ZjdlNCB9LAorCQl7IDB4MDYsIDB4Zjg0OCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NDlmYyB9LAorCQl7IDB4MDYsIDB4MDQ0ZCB9LAorCQl7IDB4MDYsIDB4MjAwMCB9LAorCQl7IDB4MDYsIDB4MDI0ZSB9LAorCQl7IDB4MDYsIDB4MjIwMCB9LAorCQl7IDB4MDYsIDB4MDI0ZCB9LAorCQl7IDB4MDYsIDB4ZGZmZiB9LAorCQl7IDB4MDYsIDB4MDE0ZSB9LAorCQl7IDB4MDYsIDB4ZGRmZiB9LAorCQl7IDB4MDYsIDB4MDEwMCB9LAorCQl7IDB4MDUsIDB4ODNkOCB9LAorCQl7IDB4MDYsIDB4ODAwMCB9LAorCQl7IDB4MDMsIDB4ZGMwMCB9LAorCQl7IDB4MDUsIDB4ZmZmNiB9LAorCQl7IDB4MDYsIDB4MDBmYyB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAwIH0sCisJCXsgMHgwZCwgMHhmODgwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8wLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8wKSk7CisKKwlpZiAocnRsODE2OGRfZWZ1c2VfcmVhZChpb2FkZHIsIDB4MDEpID09IDB4YjEpIHsKKwkJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CisJCQl7IDB4MWYsIDB4MDAwMiB9LAorCQkJeyAweDA1LCAweDY2OWEgfSwKKwkJCXsgMHgxZiwgMHgwMDA1IH0sCisJCQl7IDB4MDUsIDB4ODMzMCB9LAorCQkJeyAweDA2LCAweDY2OWEgfSwKKworCQkJeyAweDFmLCAweDAwMDIgfQorCQl9OworCQlpbnQgdmFsOworCisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisKKwkJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgMHgwZCk7CisJCWlmICgodmFsICYgMHgwMGZmKSAhPSAweDAwNmMpIHsKKwkJCXUzMiBzZXRbXSA9IHsKKwkJCQkweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsCisJCQkJMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjCisJCQl9OworCQkJaW50IGk7CisKKwkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCisJCQl2YWwgJj0gMHhmZjAwOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2V0KTsgaSsrKQorCQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDBkLCB2YWwgfCBzZXRbaV0pOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CisJCQl7IDB4MWYsIDB4MDAwMiB9LAorCQkJeyAweDA1LCAweDI2NDIgfSwKKwkJCXsgMHgxZiwgMHgwMDA1IH0sCisJCQl7IDB4MDUsIDB4ODMzMCB9LAorCQkJeyAweDA2LCAweDI2NDIgfQorCQl9OworCisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJfQorCisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwMiwgMHgwMTAwLCAweDA2MDApOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDMsIDB4MDAwMCwgMHhlMDAwKTsKKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDEpOworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDE3LCAweDBjYzApOworCisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wYXRjaChpb2FkZHIsIDB4MGYsIDB4MDAxNyk7CisKKwlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0XzEsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0XzEpKTsKK30KKworc3RhdGljIHZvaWQgcnRsODE2OGRfM19od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQl7IDB4MWYsIDB4MDAwMiB9LAorCQl7IDB4MTAsIDB4MDAwOCB9LAorCQl7IDB4MGQsIDB4MDA2YyB9LAorCisJCXsgMHgxZiwgMHgwMDAwIH0sCisJCXsgMHgwZCwgMHhmODgwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDE3LCAweDBjYzAgfSwKKworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MGIsIDB4YTRkOCB9LAorCQl7IDB4MDksIDB4MjgxYyB9LAorCQl7IDB4MDcsIDB4Mjg4MyB9LAorCQl7IDB4MGEsIDB4NmIzNSB9LAorCQl7IDB4MWQsIDB4M2RhNCB9LAorCQl7IDB4MWMsIDB4ZWZmZCB9LAorCQl7IDB4MTQsIDB4N2Y1MiB9LAorCQl7IDB4MTgsIDB4N2ZjNiB9LAorCQl7IDB4MDgsIDB4MDYwMSB9LAorCQl7IDB4MDYsIDB4NDA2MyB9LAorCQl7IDB4MTAsIDB4ZjA3NCB9LAorCQl7IDB4MWYsIDB4MDAwMyB9LAorCQl7IDB4MTMsIDB4MDc4OSB9LAorCQl7IDB4MTIsIDB4ZjRiZCB9LAorCQl7IDB4MWEsIDB4MDRmZCB9LAorCQl7IDB4MTQsIDB4ODRiMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MDAsIDB4OTIwMCB9LAorCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwMSwgMHgwMzQwIH0sCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgwNCwgMHg0MDAwIH0sCisJCXsgMHgwMywgMHgxZDIxIH0sCisJCXsgMHgwMiwgMHgwYzMyIH0sCisJCXsgMHgwMSwgMHgwMjAwIH0sCisJCXsgMHgwMCwgMHg1NTU0IH0sCisJCXsgMHgwNCwgMHg0ODAwIH0sCisJCXsgMHgwNCwgMHg0MDAwIH0sCisJCXsgMHgwNCwgMHhmMDAwIH0sCisJCXsgMHgwMywgMHhkZjAxIH0sCisJCXsgMHgwMiwgMHhkZjIwIH0sCisJCXsgMHgwMSwgMHgxMDFhIH0sCisJCXsgMHgwMCwgMHhhMGZmIH0sCisJCXsgMHgwNCwgMHhmODAwIH0sCisJCXsgMHgwNCwgMHhmMDAwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDcgfSwKKwkJeyAweDFlLCAweDAwMjMgfSwKKwkJeyAweDE2LCAweDAwMDAgfSwKKwkJeyAweDFmLCAweDAwMDAgfQorCX07CisKKwlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTAyZV9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQpAQCAtMTc5Miw3ICsyNjY0LDEzIEBACiAJCXJ0bDgxNjhjcF8yX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgotCQlydGw4MTY4ZF9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjhkXzFfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJCXJ0bDgxNjhkXzJfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJCXJ0bDgxNjhkXzNfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMzIyLDYgKzMyMDAsMTQgQEAKIAl9CiAKIAlydGw4MTY5X2luaXRfcGh5KGRldiwgdHApOworCisJLyoKKwkgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZQorCSAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLgorCSAqLworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkKKwkJUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgfCBSeFZsYW4pOworCiAJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIHRwLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX1dPTCk7CiAKIG91dDoKQEAgLTI0OTMsNyArMzM3OSw3IEBACiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21heF9zaXplKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1bnNpZ25lZCBpbnQgcnhfYnVmX3N6KQogewogCS8qIExvdyBodXJ0cy4gTGV0J3MgZGlzYWJsZSB0aGUgZmlsdGVyaW5nLiAqLwotCVJUTF9XMTYoUnhNYXhTaXplLCByeF9idWZfc3opOworCVJUTF9XMTYoUnhNYXhTaXplLCByeF9idWZfc3ogKyAxKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1bnNpZ25lZCBtYWNfdmVyc2lvbikKQEAgLTI4NjMsNiArMzc0OSw4IEBACiAJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhkKGlvYWRkciwgcGRldik7CiAJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKaW5kZXggMDFmOTQzMi4uOThiZmY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKQEAgLTQ0NCw3ICs0NDQsOCBAQAogICogdGhlIGFwcHJvcHJpYXRlIExSTyBtZXRob2QKICAqLwogc3RhdGljIHZvaWQgZWZ4X3J4X3BhY2tldF9scm8oc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLAotCQkJICAgICAgc3RydWN0IGVmeF9yeF9idWZmZXIgKnJ4X2J1ZikKKwkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYsCisJCQkgICAgICBib29sIGNoZWNrc3VtbWVkKQogewogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZjaGFubmVsLT5uYXBpX3N0cjsKIApAQCAtNDY2LDcgKzQ2Nyw4IEBACiAJCXNrYi0+bGVuID0gcnhfYnVmLT5sZW47CiAJCXNrYi0+ZGF0YV9sZW4gPSByeF9idWYtPmxlbjsKIAkJc2tiLT50cnVlc2l6ZSArPSByeF9idWYtPmxlbjsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJc2tiLT5pcF9zdW1tZWQgPQorCQkJY2hlY2tzdW1tZWQgPyBDSEVDS1NVTV9VTk5FQ0VTU0FSWSA6IENIRUNLU1VNX05PTkU7CiAKIAkJbmFwaV9ncm9fZnJhZ3MobmFwaSk7CiAKQEAgLTQ3NSw2ICs0NzcsNyBAQAogCQlyeF9idWYtPnBhZ2UgPSBOVUxMOwogCX0gZWxzZSB7CiAJCUVGWF9CVUdfT05fUEFSQU5PSUQoIXJ4X2J1Zi0+c2tiKTsKKwkJRUZYX0JVR19PTl9QQVJBTk9JRCghY2hlY2tzdW1tZWQpOwogCiAJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgcnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnNrYiA9IE5VTEw7CkBAIC01NzAsNyArNTczLDcgQEAKIAl9CiAKIAlpZiAobGlrZWx5KGNoZWNrc3VtbWVkIHx8IHJ4X2J1Zi0+cGFnZSkpIHsKLQkJZWZ4X3J4X3BhY2tldF9scm8oY2hhbm5lbCwgcnhfYnVmKTsKKwkJZWZ4X3J4X3BhY2tldF9scm8oY2hhbm5lbCwgcnhfYnVmLCBjaGVja3N1bW1lZCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCmluZGV4IGNlZTAwYWQuLjQ5ZWI5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJZWZ4X293b3JkX3QgcmVnOwogCiAJLyogR1BJTyAzIGFuZCB0aGUgR1BJTyByZWdpc3RlciBhcmUgc2hhcmVkIHdpdGggSTJDLCBzbyBibG9jayB0aGF0ICovCi0JbXV0ZXhfbG9jaygmZWZ4LT5pMmNfYWRhcC5idXNfbG9jayk7CisJaTJjX2xvY2tfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAKIAkvKiBQdWxsIFJTVF9OIChHUElPIDIpIGxvdyB0aGVuIGxldCBpdCB1cCBhZ2Fpbiwgc2V0dGluZyB0aGUKIAkgKiBGTEFTSF9DRkdfMSBzdHJhcCAoR1BJTyAzKSBhcHByb3ByaWF0ZWx5LiAgT25seSBjaGFuZ2UgdGhlCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlmYWxjb25fd3JpdGUoZWZ4LCAmcmVnLCBHUElPX0NUTF9SRUdfS0VSKTsKIAltc2xlZXAoMSk7CiAKLQltdXRleF91bmxvY2soJmVmeC0+aTJjX2FkYXAuYnVzX2xvY2spOworCWkyY191bmxvY2tfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAKIAlzc2xlZXAoMSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCmluZGV4IGY0OWQwODAwLi41MjhiOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAic2hfZXRoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAyYWI1YzM5Li42YTEwZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC00NTM4LDYgKzQ1MzgsOCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCW5ldGlmX25hcGlfYWRkKGRldiwgJmh3LT5uYXBpLCBza3kyX3BvbGwsIE5BUElfV0VJR0hUKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2t5Ml9pbnRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVhYTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKQEAgLTAsMCArMSw1MyBAQAorY29uZmlnIFNUTU1BQ19FVEgKKwl0cmlzdGF0ZSAiU1RNaWNyb2VsZWN0cm9uaWNzIDEwLzEwMC8xMDAwIEV0aGVybmV0IGRyaXZlciIKKwlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJQgorCWRlcGVuZHMgb24gTkVUREVWSUNFUyAmJiBDUFVfU1VCVFlQRV9TVDQwCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU1QgTUFDIDEwLzEwMC8xMDAwIG9uLWNoaXAgRXRoZXJuZXQKKwkgIGNvbnRyb2xsZXJzLiBTVCBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhIFN5bm9wc3lzIElQIENvcmUuCisKK2lmIFNUTU1BQ19FVEgKKworY29uZmlnIFNUTU1BQ19EQQorCWJvb2wgIlNUTU1BQyBETUEgYXJiaXRyYXRpb24gc2NoZW1lIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiwgcnggaGFzIHByaW9yaXR5IG92ZXIgVHggKG9ubHkgZm9yIEdpZ2EKKwkgIEV0aGVybmV0IGRldmljZSkuCisJICBCeSBkZWZhdWx0LCB0aGUgRE1BIGFyYml0cmF0aW9uIHNjaGVtZSBpcyBiYXNlZCBvbiBSb3VuZC1yb2JpbgorCSAgKHJ4OnR4IHByaW9yaXR5IGlzIDE6MSkuCisKK2NvbmZpZyBTVE1NQUNfRFVBTF9NQUMKKwlib29sICJTVE1NQUM6IGR1YWwgbWFjIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVmYXVsdCBuCisgICAgICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNUTU1BQ19FVEggJiYgIVNUTU1BQ19USU1FUgorCWhlbHAKKwkgIFNvbWUgU1QgU29DcyAoZm9yIGV4YW1wbGUgdGhlIHN0eDcxNDEgYW5kIHN0eDcyMDBjMikgaGF2ZSB0d28KKwkgIEV0aGVybmV0IENvbnRyb2xsZXJzLiBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgc2Vjb25kIEV0aGVybmV0CisJICBkZXZpY2Ugb24gdGhpcyBraW5kIG9mIHBsYXRmb3Jtcy4KKworY29uZmlnIFNUTU1BQ19USU1FUgorCWJvb2wgIlNUTU1BQyBUaW1lciBvcHRpbWlzYXRpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgVXNlIGFuIGV4dGVybmFsIHRpbWVyIGZvciBtaXRpZ2F0aW5nIHRoZSBudW1iZXIgb2YgbmV0d29yaworCSAgaW50ZXJydXB0cy4KKworY2hvaWNlCisgICAgICAgIHByb21wdCAiU2VsZWN0IFRpbWVyIGRldmljZSIKKyAgICAgICAgZGVwZW5kcyBvbiBTVE1NQUNfVElNRVIKKworY29uZmlnIFNUTU1BQ19UTVVfVElNRVIKKyAgICAgICAgYm9vbCAiVE1VIGNoYW5uZWwgMiIKKyAgICAgICAgZGVwZW5kcyBvbiBDUFVfU0g0CisJaGVscAorCitjb25maWcgU1RNTUFDX1JUQ19USU1FUgorICAgICAgICBib29sICJSZWFsIHRpbWUgY2xvY2siCisgICAgICAgIGRlcGVuZHMgb24gUlRDX0NMQVNTCisJaGVscAorCitlbmRjaG9pY2UKKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQ3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorb2JqLSQoQ09ORklHX1NUTU1BQ19FVEgpICs9IHN0bW1hYy5vCitzdG1tYWMtJChDT05GSUdfU1RNTUFDX1RJTUVSKSArPSBzdG1tYWNfdGltZXIubworc3RtbWFjLW9ianM6PSBzdG1tYWNfbWFpbi5vIHN0bW1hY19ldGh0b29sLm8gc3RtbWFjX21kaW8ubyBcCisJCW1hYzEwMC5vICBnbWFjLm8gJChzdG1tYWMteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDllNTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCkBAIC0wLDAgKzEsMzMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBTVE1NQUMgQ29tbW9uIEhlYWRlciBGaWxlCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkZXNjcy5oIgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgRE1BIENSUyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgTWFwcGluZworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBETUFfQlVTX01PREUJCTB4MDAwMDEwMDAJLyogQnVzIE1vZGUgKi8KKyNkZWZpbmUgRE1BX1hNVF9QT0xMX0RFTUFORAkweDAwMDAxMDA0CS8qIFRyYW5zbWl0IFBvbGwgRGVtYW5kICovCisjZGVmaW5lIERNQV9SQ1ZfUE9MTF9ERU1BTkQJMHgwMDAwMTAwOAkvKiBSZWNlaXZlZCBQb2xsIERlbWFuZCAqLworI2RlZmluZSBETUFfUkNWX0JBU0VfQUREUgkweDAwMDAxMDBjCS8qIFJlY2VpdmUgTGlzdCBCYXNlICovCisjZGVmaW5lIERNQV9UWF9CQVNFX0FERFIJMHgwMDAwMTAxMAkvKiBUcmFuc21pdCBMaXN0IEJhc2UgKi8KKyNkZWZpbmUgRE1BX1NUQVRVUwkJMHgwMDAwMTAxNAkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0wJCTB4MDAwMDEwMTgJLyogQ3RybCAoT3BlcmF0aW9uYWwgTW9kZSkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BCQkweDAwMDAxMDFjCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9DVFIJMHgwMDAwMTAyMAkvKiBNaXNzZWQgRnJhbWUgQ291bnRlciAqLworI2RlZmluZSBETUFfQ1VSX1RYX0JVRl9BRERSCTB4MDAwMDEwNTAJLyogQ3VycmVudCBIb3N0IFR4IEJ1ZmZlciAqLworI2RlZmluZSBETUFfQ1VSX1JYX0JVRl9BRERSCTB4MDAwMDEwNTQJLyogQ3VycmVudCBIb3N0IFJ4IEJ1ZmZlciAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgRE1BIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5lcworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERNQV9DT05UUk9MX1NUCQkweDAwMDAyMDAwCS8qIFN0YXJ0L1N0b3AgVHJhbnNtaXNzaW9uICovCisjZGVmaW5lIERNQV9DT05UUk9MX1NSCQkweDAwMDAwMDAyCS8qIFN0YXJ0L1N0b3AgUmVjZWl2ZSAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgRE1BIEludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgZGVmaW5lcworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiBOT1JNQUwgSU5URVJSVVBUICoqKiovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9OSUUgMHgwMDAxMDAwMAkvKiBOb3JtYWwgU3VtbWFyeSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVElFIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UVUUgMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JJRSAweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9FUkUgMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlICovCisKKyNkZWZpbmUgRE1BX0lOVFJfTk9STUFMCShETUFfSU5UUl9FTkFfTklFIHwgRE1BX0lOVFJfRU5BX1JJRSB8IFwKKwkJCURNQV9JTlRSX0VOQV9USUUpCisKKy8qKioqIEFCTk9STUFMIElOVEVSUlVQVCAqKioqLworI2RlZmluZSBETUFfSU5UUl9FTkFfQUlFIDB4MDAwMDgwMDAJLyogQWJub3JtYWwgU3VtbWFyeSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRkJFIDB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9FVEUgMHgwMDAwMDQwMAkvKiBFYXJseSBUcmFuc21pdCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUldFIDB4MDAwMDAyMDAJLyogUmVjZWl2ZSBXYXRjaGRvZyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUlNFIDB4MDAwMDAxMDAJLyogUmVjZWl2ZSBTdG9wcGVkICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9SVUUgMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVU5FIDB4MDAwMDAwMjAJLyogVHggVW5kZXJmbG93ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9PVkUgMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9USkUgMHgwMDAwMDAwOAkvKiBUcmFuc21pdCBKYWJiZXIgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1RTRSAweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFN0b3BwZWQgKi8KKworI2RlZmluZSBETUFfSU5UUl9BQk5PUk1BTAkoRE1BX0lOVFJfRU5BX0FJRSB8IERNQV9JTlRSX0VOQV9GQkUgfCBcCisJCQkJRE1BX0lOVFJfRU5BX1VORSkKKworLyogRE1BIGRlZmF1bHQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgRE1BX0lOVFJfREVGQVVMVF9NQVNLCShETUFfSU5UUl9OT1JNQUwgfCBETUFfSU5UUl9BQk5PUk1BTCkKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIERNQSBTdGF0dXMgcmVnaXN0ZXIgZGVmaW5lcworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HUEkJCTB4MTAwMDAwMDAJLyogUE1UIGludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0dNSQkJMHgwODAwMDAwMAkvKiBNTUMgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfR0xJCQkweDA0MDAwMDAwCS8qIEdNQUMgTGluZSBpbnRlcmZhY2UgaW50LiAqLworI2RlZmluZSBETUFfU1RBVFVTX0dNSQkJMHgwODAwMDAwMAorI2RlZmluZSBETUFfU1RBVFVTX0dMSQkJMHgwNDAwMDAwMAorI2RlZmluZSBETUFfU1RBVFVTX0VCX01BU0sJMHgwMDM4MDAwMAkvKiBFcnJvciBCaXRzIE1hc2sgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9UWF9BQk9SVAkweDAwMDgwMDAwCS8qIEVycm9yIEJpdHMgLSBUWCBBYm9ydCAqLworI2RlZmluZSBETUFfU1RBVFVTX0VCX1JYX0FCT1JUCTB4MDAxMDAwMDAJLyogRXJyb3IgQml0cyAtIFJYIEFib3J0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFNfTUFTSwkweDAwNzAwMDAwCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UU19TSElGVAkyMAorI2RlZmluZSBETUFfU1RBVFVTX1JTX01BU0sJMHgwMDBlMDAwMAkvKiBSZWNlaXZlIFByb2Nlc3MgU3RhdGUgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19SU19TSElGVAkxNworI2RlZmluZSBETUFfU1RBVFVTX05JUwkweDAwMDEwMDAwCS8qIE5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLworI2RlZmluZSBETUFfU1RBVFVTX0FJUwkweDAwMDA4MDAwCS8qIEFibm9ybWFsIEludGVycnVwdCBTdW1tYXJ5ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRVJJCTB4MDAwMDQwMDAJLyogRWFybHkgUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19GQkkJMHgwMDAwMjAwMAkvKiBGYXRhbCBCdXMgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRVRJCTB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfUldUCTB4MDAwMDAyMDAJLyogUmVjZWl2ZSBXYXRjaGRvZyBUaW1lb3V0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlBTCTB4MDAwMDAxMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0b3BwZWQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19SVQkweDAwMDAwMDgwCS8qIFJlY2VpdmUgQnVmZmVyIFVuYXZhaWxhYmxlICovCisjZGVmaW5lIERNQV9TVEFUVVNfUkkJMHgwMDAwMDA0MAkvKiBSZWNlaXZlIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX1VORgkweDAwMDAwMDIwCS8qIFRyYW5zbWl0IFVuZGVyZmxvdyAqLworI2RlZmluZSBETUFfU1RBVFVTX09WRgkweDAwMDAwMDEwCS8qIFJlY2VpdmUgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19USlQJMHgwMDAwMDAwOAkvKiBUcmFuc21pdCBKYWJiZXIgVGltZW91dCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RVCTB4MDAwMDAwMDQJLyogVHJhbnNtaXQgQnVmZmVyIFVuYXZhaWxhYmxlICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFBTCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgUHJvY2VzcyBTdG9wcGVkICovCisjZGVmaW5lIERNQV9TVEFUVVNfVEkJMHgwMDAwMDAwMQkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KKworLyogT3RoZXIgZGVmaW5lcyAqLworI2RlZmluZSBIQVNIX1RBQkxFX1NJWkUgNjQKKyNkZWZpbmUgUEFVU0VfVElNRSAweDIwMAorCisvKiBGbG93IENvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBGTE9XX09GRgkwCisjZGVmaW5lIEZMT1dfUlgJCTEKKyNkZWZpbmUgRkxPV19UWAkJMgorI2RlZmluZSBGTE9XX0FVVE8JKEZMT1dfVFggfCBGTE9XX1JYKQorCisvKiBETUEgU1RPUkUtQU5ELUZPUldBUkQgT3BlcmF0aW9uIE1vZGUgKi8KKyNkZWZpbmUgU0ZfRE1BX01PREUgMQorCisjZGVmaW5lIEhXX0NTVU0gMQorI2RlZmluZSBOT19IV19DU1VNIDAKKworLyogR01BQyBUWCBGSUZPIGlzIDhLLCBSeCBGSUZPIGlzIDE2SyAqLworI2RlZmluZSBCVUZfU0laRV8xNktpQiAxNjM4NAorI2RlZmluZSBCVUZfU0laRV84S2lCIDgxOTIKKyNkZWZpbmUgQlVGX1NJWkVfNEtpQiA0MDk2CisjZGVmaW5lIEJVRl9TSVpFXzJLaUIgMjA0OAorCisvKiBQb3dlciBEb3duIGFuZCBXT0wgKi8KKyNkZWZpbmUgUE1UX05PVF9TVVBQT1JURUQgMAorI2RlZmluZSBQTVRfU1VQUE9SVEVEIDEKKworLyogQ29tbW9uIE1BQyBkZWZpbmVzICovCisjZGVmaW5lIE1BQ19DVFJMX1JFRwkJMHgwMDAwMDAwMAkvKiBNQUMgQ29udHJvbCAqLworI2RlZmluZSBNQUNfRU5BQkxFX1RYCQkweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBNQUNfUk5BQkxFX1JYCQkweDAwMDAwMDA0CS8qIFJlY2VpdmVyIEVuYWJsZSAqLworCisvKiBNQUMgTWFuYWdlbWVudCBDb3VudGVycyByZWdpc3RlciAqLworI2RlZmluZSBNTUNfQ09OVFJPTAkJMHgwMDAwMDEwMAkvKiBNTUMgQ29udHJvbCAqLworI2RlZmluZSBNTUNfSElHSF9JTlRSCQkweDAwMDAwMTA0CS8qIE1NQyBIaWdoIEludGVycnVwdCAqLworI2RlZmluZSBNTUNfTE9XX0lOVFIJCTB4MDAwMDAxMDgJLyogTU1DIExvdyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTU1DX0hJR0hfSU5UUl9NQVNLCTB4MDAwMDAxMGMJLyogTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTU1DX0xPV19JTlRSX01BU0sJMHgwMDAwMDExMAkvKiBNTUMgTG93IEludGVycnVwdCBNYXNrICovCisKKyNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9NQVNLCTB4MDAwM2ZmOAkvKiBNYXhpbXVtIEZyYW1lIFNpemUgKi8KKyNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9TSElGVAkzCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUkFNRQkJMHg3RkYKKworc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyB7CisJLyogVHJhbnNtaXQgZXJyb3JzICovCisJdW5zaWduZWQgbG9uZyB0eF91bmRlcmZsb3cgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXVuc2lnbmVkIGxvbmcgdHhfY2FycmllcjsKKwl1bnNpZ25lZCBsb25nIHR4X2xvc3NjYXJyaWVyOworCXVuc2lnbmVkIGxvbmcgdHhfaGVhcnRiZWF0OworCXVuc2lnbmVkIGxvbmcgdHhfZGVmZXJyZWQ7CisJdW5zaWduZWQgbG9uZyB0eF92bGFuOworCXVuc2lnbmVkIGxvbmcgdHhfamFiYmVyOworCXVuc2lnbmVkIGxvbmcgdHhfZnJhbWVfZmx1c2hlZDsKKwl1bnNpZ25lZCBsb25nIHR4X3BheWxvYWRfZXJyb3I7CisJdW5zaWduZWQgbG9uZyB0eF9pcF9oZWFkZXJfZXJyb3I7CisJLyogUmVjZWl2ZSBlcnJvcnMgKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2Rlc2M7CisJdW5zaWduZWQgbG9uZyByeF9wYXJ0aWFsOworCXVuc2lnbmVkIGxvbmcgcnhfcnVudDsKKwl1bnNpZ25lZCBsb25nIHJ4X3Rvb2xvbmc7CisJdW5zaWduZWQgbG9uZyByeF9jb2xsaXNpb247CisJdW5zaWduZWQgbG9uZyByeF9jcmM7CisJdW5zaWduZWQgbG9uZyByeF9sZW5naHQ7CisJdW5zaWduZWQgbG9uZyByeF9taWk7CisJdW5zaWduZWQgbG9uZyByeF9tdWx0aWNhc3Q7CisJdW5zaWduZWQgbG9uZyByeF9nbWFjX292ZXJmbG93OworCXVuc2lnbmVkIGxvbmcgcnhfd2F0Y2hkb2c7CisJdW5zaWduZWQgbG9uZyBkYV9yeF9maWx0ZXJfZmFpbDsKKwl1bnNpZ25lZCBsb25nIHNhX3J4X2ZpbHRlcl9mYWlsOworCXVuc2lnbmVkIGxvbmcgcnhfbWlzc2VkX2NudHI7CisJdW5zaWduZWQgbG9uZyByeF9vdmVyZmxvd19jbnRyOworCXVuc2lnbmVkIGxvbmcgcnhfdmxhbjsKKwkvKiBUeC9SeCBJUlEgZXJyb3JzICovCisJdW5zaWduZWQgbG9uZyB0eF91bmRlZmxvd19pcnE7CisJdW5zaWduZWQgbG9uZyB0eF9wcm9jZXNzX3N0b3BwZWRfaXJxOworCXVuc2lnbmVkIGxvbmcgdHhfamFiYmVyX2lycTsKKwl1bnNpZ25lZCBsb25nIHJ4X292ZXJmbG93X2lycTsKKwl1bnNpZ25lZCBsb25nIHJ4X2J1Zl91bmF2X2lycTsKKwl1bnNpZ25lZCBsb25nIHJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnE7CisJdW5zaWduZWQgbG9uZyByeF93YXRjaGRvZ19pcnE7CisJdW5zaWduZWQgbG9uZyB0eF9lYXJseV9pcnE7CisJdW5zaWduZWQgbG9uZyBmYXRhbF9idXNfZXJyb3JfaXJxOworCS8qIEV4dHJhIGluZm8gKi8KKwl1bnNpZ25lZCBsb25nIHRocmVzaG9sZDsKKwl1bnNpZ25lZCBsb25nIHR4X3BrdF9uOworCXVuc2lnbmVkIGxvbmcgcnhfcGt0X247CisJdW5zaWduZWQgbG9uZyBwb2xsX247CisJdW5zaWduZWQgbG9uZyBzY2hlZF90aW1lcl9uOworCXVuc2lnbmVkIGxvbmcgbm9ybWFsX2lycV9uOworfTsKKworLyogR01BQyBjb3JlIGNhbiBjb21wdXRlIHRoZSBjaGVja3N1bXMgaW4gSFcuICovCitlbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7CisJZ29vZF9mcmFtZSA9IDAsCisJZGlzY2FyZF9mcmFtZSA9IDEsCisJY3N1bV9ub25lID0gMiwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfc2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1OCBhZGRyWzZdLAorCQkJIHVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCWRhdGEgPSAoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF07CisJd3JpdGVsKGRhdGEsIGlvYWRkciArIGhpZ2gpOworCWRhdGEgPSAoYWRkclszXSA8PCAyNCkgfCAoYWRkclsyXSA8PCAxNikgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMF07CisJd3JpdGVsKGRhdGEsIGlvYWRkciArIGxvdyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLAorCQkJCXVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBoaWdoLAorCQkJCXVuc2lnbmVkIGludCBsb3cpCit7CisJdW5zaWduZWQgaW50IGhpX2FkZHIsIGxvX2FkZHI7CisKKwkvKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoYXJkd2FyZSAqLworCWhpX2FkZHIgPSByZWFkbChpb2FkZHIgKyBoaWdoKTsKKwlsb19hZGRyID0gcmVhZGwoaW9hZGRyICsgbG93KTsKKworCS8qIEV4dHJhY3QgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIGhpZ2ggYW5kIGxvdyB3b3JkcyAqLworCWFkZHJbMF0gPSBsb19hZGRyICYgMHhmZjsKKwlhZGRyWzFdID0gKGxvX2FkZHIgPj4gOCkgJiAweGZmOworCWFkZHJbMl0gPSAobG9fYWRkciA+PiAxNikgJiAweGZmOworCWFkZHJbM10gPSAobG9fYWRkciA+PiAyNCkgJiAweGZmOworCWFkZHJbNF0gPSBoaV9hZGRyICYgMHhmZjsKKwlhZGRyWzVdID0gKGhpX2FkZHIgPj4gOCkgJiAweGZmOworCisJcmV0dXJuOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyB7CisJLyogTUFDIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KKwl2b2lkICgqY29yZV9pbml0KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwkvKiBETUEgY29yZSBpbml0aWFsaXphdGlvbiAqLworCWludCAoKmRtYV9pbml0KSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsIHUzMiBkbWFfcngpOworCS8qIER1bXAgTUFDIHJlZ2lzdGVycyAqLworCXZvaWQgKCpkdW1wX21hY19yZWdzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIER1bXAgRE1BIHJlZ2lzdGVycyAqLworCXZvaWQgKCpkdW1wX2RtYV9yZWdzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIFNldCB0eC9yeCB0aHJlc2hvbGQgaW4gdGhlIGNzcjYgcmVnaXN0ZXIKKwkgKiBBbiBpbnZhbGlkIHZhbHVlIGVuYWJsZXMgdGhlIHN0b3JlLWFuZC1mb3J3YXJkIG1vZGUgKi8KKwl2b2lkICgqZG1hX21vZGUpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwgaW50IHJ4bW9kZSk7CisJLyogVG8gdHJhY2sgZXh0cmEgc3RhdGlzdGljIChpZiBzdXBwb3J0ZWQpICovCisJdm9pZCAoKmRtYV9kaWFnbm9zdGljX2ZyKSAodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJLyogUlggZGVzY3JpcHRvciByaW5nIGluaXRpYWxpemF0aW9uICovCisJdm9pZCAoKmluaXRfcnhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKKwkJCQlpbnQgZGlzYWJsZV9yeF9pYyk7CisJLyogVFggZGVzY3JpcHRvciByaW5nIGluaXRpYWxpemF0aW9uICovCisJdm9pZCAoKmluaXRfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSk7CisKKwkvKiBJbnZva2VkIGJ5IHRoZSB4bWl0IGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIHR4IGRlc2NyaXB0b3IgKi8KKwl2b2lkICgqcHJlcGFyZV90eF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCisJCQkJIGludCBjc3VtX2ZsYWcpOworCS8qIFNldC9nZXQgdGhlIG93bmVyIG9mIHRoZSBkZXNjcmlwdG9yICovCisJdm9pZCAoKnNldF90eF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJaW50ICgqZ2V0X3R4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBJbnZva2VkIGJ5IHRoZSB4bWl0IGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSB0eCBkZXNjcmlwdG9yICovCisJdm9pZCAoKmNsb3NlX3R4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIENsZWFuIHRoZSB0eCBkZXNjcmlwdG9yIGFzIHNvb24gYXMgdGhlIHR4IGlycSBpcyByZWNlaXZlZCAqLworCXZvaWQgKCpyZWxlYXNlX3R4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIENsZWFyIGludGVycnVwdCBvbiB0eCBmcmFtZSBjb21wbGV0aW9uLiBXaGVuIHRoaXMgYml0IGlzCisJICogc2V0IGFuIGludGVycnVwdCBoYXBwZW5zIGFzIHNvb24gYXMgdGhlIGZyYW1lIGlzIHRyYW5zbWl0dGVkICovCisJdm9pZCAoKmNsZWFyX3R4X2ljKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBMYXN0IHR4IHNlZ21lbnQgcmVwb3J0cyB0aGUgdHJhbnNtaXQgc3RhdHVzICovCisJaW50ICgqZ2V0X3R4X2xzKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBSZXR1cm4gdGhlIHRyYW5zbWl0IHN0YXR1cyBsb29raW5nIGF0IHRoZSBUREVTMSAqLworCWludCAoKnR4X3N0YXR1cykgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkgIHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIEdldCB0aGUgYnVmZmVyIHNpemUgZnJvbSB0aGUgZGVzY3JpcHRvciAqLworCWludCAoKmdldF90eF9sZW4pIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIEhhbmRsZSBleHRyYSBldmVudHMgb24gc3BlY2lmaWMgaW50ZXJydXB0cyBodyBkZXBlbmRlbnQgKi8KKwl2b2lkICgqaG9zdF9pcnFfc3RhdHVzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCWludCAoKmdldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJdm9pZCAoKnNldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogR2V0IHRoZSByZWNlaXZlIGZyYW1lIHNpemUgKi8KKwlpbnQgKCpnZXRfcnhfZnJhbWVfbGVuKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBSZXR1cm4gdGhlIHJlY2VwdGlvbiBzdGF0dXMgbG9va2luZyBhdCB0aGUgUkRFUzEgKi8KKwlpbnQgKCpyeF9zdGF0dXMpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJICBzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIE11bHRpY2FzdCBmaWx0ZXIgc2V0dGluZyAqLworCXZvaWQgKCpzZXRfZmlsdGVyKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJLyogRmxvdyBjb250cm9sIHNldHRpbmcgKi8KKwl2b2lkICgqZmxvd19jdHJsKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKTsKKwkvKiBTZXQgcG93ZXIgbWFuYWdlbWVudCBtb2RlIChlLmcuIG1hZ2ljIGZyYW1lKSAqLworCXZvaWQgKCpwbXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKTsKKwkvKiBTZXQvR2V0IFVuaWNhc3QgTUFDIGFkZHJlc3NlcyAqLworCXZvaWQgKCpzZXRfdW1hY19hZGRyKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGludCByZWdfbik7CisJdm9pZCAoKmdldF91bWFjX2FkZHIpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgICAgdW5zaWduZWQgaW50IHJlZ19uKTsKK307CisKK3N0cnVjdCBtYWNfbGluayB7CisJaW50IHBvcnQ7CisJaW50IGR1cGxleDsKKwlpbnQgc3BlZWQ7Cit9OworCitzdHJ1Y3QgbWlpX3JlZ3MgeworCXVuc2lnbmVkIGludCBhZGRyOwkvKiBNSUkgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBkYXRhOwkvKiBNSUkgRGF0YSAqLworfTsKKworc3RydWN0IGh3X2NhcCB7CisJdW5zaWduZWQgaW50IHZlcnNpb247CS8qIENvcmUgVmVyc2lvbiByZWdpc3RlciAoR01BQykgKi8KKwl1bnNpZ25lZCBpbnQgcG10OwkvKiBQb3dlci1Eb3duIG1vZGUgKEdNQUMpICovCisJc3RydWN0IG1hY19saW5rIGxpbms7CisJc3RydWN0IG1paV9yZWdzIG1paTsKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8geworCXN0cnVjdCBod19jYXAgaHc7CisJc3RydWN0IHN0bW1hY19vcHMgKm9wczsKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmdtYWNfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzEwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJhMGIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEhlYWRlciBGaWxlIHRvIGRlc2NyaWJlIHRoZSBETUEgZGVzY3JpcHRvcnMKKyAgVXNlIGVuaGFuY2VkIGRlc2NyaXB0b3JzIGluIGNhc2Ugb2YgR01BQyBDb3Jlcy4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZG1hX2Rlc2MgeworCS8qIFJlY2VpdmUgZGVzY3JpcHRvciAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCS8qIFJERVMwICovCisJCQl1MzIgcmVzZXJ2ZWQxOjE7CisJCQl1MzIgY3JjX2Vycm9yOjE7CisJCQl1MzIgZHJpYmJsaW5nOjE7CisJCQl1MzIgbWlpX2Vycm9yOjE7CisJCQl1MzIgcmVjZWl2ZV93YXRjaGRvZzoxOworCQkJdTMyIGZyYW1lX3R5cGU6MTsKKwkJCXUzMiBjb2xsaXNpb246MTsKKwkJCXUzMiBmcmFtZV90b29fbG9uZzoxOworCQkJdTMyIGxhc3RfZGVzY3JpcHRvcjoxOworCQkJdTMyIGZpcnN0X2Rlc2NyaXB0b3I6MTsKKwkJCXUzMiBtdWx0aWNhc3RfZnJhbWU6MTsKKwkJCXUzMiBydW5fZnJhbWU6MTsKKwkJCXUzMiBsZW5ndGhfZXJyb3I6MTsKKwkJCXUzMiBwYXJ0aWFsX2ZyYW1lX2Vycm9yOjE7CisJCQl1MzIgZGVzY3JpcHRvcl9lcnJvcjoxOworCQkJdTMyIGVycm9yX3N1bW1hcnk6MTsKKwkJCXUzMiBmcmFtZV9sZW5ndGg6MTQ7CisJCQl1MzIgZmlsdGVyaW5nX2ZhaWw6MTsKKwkJCXUzMiBvd246MTsKKwkJCS8qIFJERVMxICovCisJCQl1MzIgYnVmZmVyMV9zaXplOjExOworCQkJdTMyIGJ1ZmZlcjJfc2l6ZToxMTsKKwkJCXUzMiByZXNlcnZlZDI6MjsKKwkJCXUzMiBzZWNvbmRfYWRkcmVzc19jaGFpbmVkOjE7CisJCQl1MzIgZW5kX3Jpbmc6MTsKKwkJCXUzMiByZXNlcnZlZDM6NTsKKwkJCXUzMiBkaXNhYmxlX2ljOjE7CisJCX0gcng7CisJCXN0cnVjdCB7CisJCQkvKiBSREVTMCAqLworCQkJdTMyIHBheWxvYWRfY3N1bV9lcnJvcjoxOworCQkJdTMyIGNyY19lcnJvcjoxOworCQkJdTMyIGRyaWJibGluZzoxOworCQkJdTMyIGVycm9yX2dtaWk6MTsKKwkJCXUzMiByZWNlaXZlX3dhdGNoZG9nOjE7CisJCQl1MzIgZnJhbWVfdHlwZToxOworCQkJdTMyIGxhdGVfY29sbGlzaW9uOjE7CisJCQl1MzIgaXBjX2NzdW1fZXJyb3I6MTsKKwkJCXUzMiBsYXN0X2Rlc2NyaXB0b3I6MTsKKwkJCXUzMiBmaXJzdF9kZXNjcmlwdG9yOjE7CisJCQl1MzIgdmxhbl90YWc6MTsKKwkJCXUzMiBvdmVyZmxvd19lcnJvcjoxOworCQkJdTMyIGxlbmd0aF9lcnJvcjoxOworCQkJdTMyIHNhX2ZpbHRlcl9mYWlsOjE7CisJCQl1MzIgZGVzY3JpcHRvcl9lcnJvcjoxOworCQkJdTMyIGVycm9yX3N1bW1hcnk6MTsKKwkJCXUzMiBmcmFtZV9sZW5ndGg6MTQ7CisJCQl1MzIgZGFfZmlsdGVyX2ZhaWw6MTsKKwkJCXUzMiBvd246MTsKKwkJCS8qIFJERVMxICovCisJCQl1MzIgYnVmZmVyMV9zaXplOjEzOworCQkJdTMyIHJlc2VydmVkMToxOworCQkJdTMyIHNlY29uZF9hZGRyZXNzX2NoYWluZWQ6MTsKKwkJCXUzMiBlbmRfcmluZzoxOworCQkJdTMyIGJ1ZmZlcjJfc2l6ZToxMzsKKwkJCXUzMiByZXNlcnZlZDI6MjsKKwkJCXUzMiBkaXNhYmxlX2ljOjE7CisJCX0gZXJ4OwkJLyogLS0gZW5oYW5jZWQgLS0gKi8KKworCQkvKiBUcmFuc21pdCBkZXNjcmlwdG9yICovCisJCXN0cnVjdCB7CisJCQkvKiBUREVTMCAqLworCQkJdTMyIGRlZmVycmVkOjE7CisJCQl1MzIgdW5kZXJmbG93X2Vycm9yOjE7CisJCQl1MzIgZXhjZXNzaXZlX2RlZmVycmFsOjE7CisJCQl1MzIgY29sbGlzaW9uX2NvdW50OjQ7CisJCQl1MzIgaGVhcnRiZWF0X2ZhaWw6MTsKKwkJCXUzMiBleGNlc3NpdmVfY29sbGlzaW9uczoxOworCQkJdTMyIGxhdGVfY29sbGlzaW9uOjE7CisJCQl1MzIgbm9fY2FycmllcjoxOworCQkJdTMyIGxvc3NfY2FycmllcjoxOworCQkJdTMyIHJlc2VydmVkMTozOworCQkJdTMyIGVycm9yX3N1bW1hcnk6MTsKKwkJCXUzMiByZXNlcnZlZDI6MTU7CisJCQl1MzIgb3duOjE7CisJCQkvKiBUREVTMSAqLworCQkJdTMyIGJ1ZmZlcjFfc2l6ZToxMTsKKwkJCXUzMiBidWZmZXIyX3NpemU6MTE7CisJCQl1MzIgcmVzZXJ2ZWQzOjE7CisJCQl1MzIgZGlzYWJsZV9wYWRkaW5nOjE7CisJCQl1MzIgc2Vjb25kX2FkZHJlc3NfY2hhaW5lZDoxOworCQkJdTMyIGVuZF9yaW5nOjE7CisJCQl1MzIgY3JjX2Rpc2FibGU6MTsKKwkJCXUzMiByZXNlcnZlZDQ6MjsKKwkJCXUzMiBmaXJzdF9zZWdtZW50OjE7CisJCQl1MzIgbGFzdF9zZWdtZW50OjE7CisJCQl1MzIgaW50ZXJydXB0OjE7CisJCX0gdHg7CisJCXN0cnVjdCB7CisJCQkvKiBUREVTMCAqLworCQkJdTMyIGRlZmVycmVkOjE7CisJCQl1MzIgdW5kZXJmbG93X2Vycm9yOjE7CisJCQl1MzIgZXhjZXNzaXZlX2RlZmVycmFsOjE7CisJCQl1MzIgY29sbGlzaW9uX2NvdW50OjQ7CisJCQl1MzIgdmxhbl9mcmFtZToxOworCQkJdTMyIGV4Y2Vzc2l2ZV9jb2xsaXNpb25zOjE7CisJCQl1MzIgbGF0ZV9jb2xsaXNpb246MTsKKwkJCXUzMiBub19jYXJyaWVyOjE7CisJCQl1MzIgbG9zc19jYXJyaWVyOjE7CisJCQl1MzIgcGF5bG9hZF9lcnJvcjoxOworCQkJdTMyIGZyYW1lX2ZsdXNoZWQ6MTsKKwkJCXUzMiBqYWJiZXJfdGltZW91dDoxOworCQkJdTMyIGVycm9yX3N1bW1hcnk6MTsKKwkJCXUzMiBpcF9oZWFkZXJfZXJyb3I6MTsKKwkJCXUzMiB0aW1lX3N0YW1wX3N0YXR1czoxOworCQkJdTMyIHJlc2VydmVkMToyOworCQkJdTMyIHNlY29uZF9hZGRyZXNzX2NoYWluZWQ6MTsKKwkJCXUzMiBlbmRfcmluZzoxOworCQkJdTMyIGNoZWNrc3VtX2luc2VydGlvbjoyOworCQkJdTMyIHJlc2VydmVkMjoxOworCQkJdTMyIHRpbWVfc3RhbXBfZW5hYmxlOjE7CisJCQl1MzIgZGlzYWJsZV9wYWRkaW5nOjE7CisJCQl1MzIgY3JjX2Rpc2FibGU6MTsKKwkJCXUzMiBmaXJzdF9zZWdtZW50OjE7CisJCQl1MzIgbGFzdF9zZWdtZW50OjE7CisJCQl1MzIgaW50ZXJydXB0OjE7CisJCQl1MzIgb3duOjE7CisJCQkvKiBUREVTMSAqLworCQkJdTMyIGJ1ZmZlcjFfc2l6ZToxMzsKKwkJCXUzMiByZXNlcnZlZDM6MzsKKwkJCXUzMiBidWZmZXIyX3NpemU6MTM7CisJCQl1MzIgcmVzZXJ2ZWQ0OjM7CisJCX0gZXR4OwkJLyogLS0gZW5oYW5jZWQgLS0gKi8KKwl9IGRlczAxOworCXVuc2lnbmVkIGludCBkZXMyOworCXVuc2lnbmVkIGludCBkZXMzOworfTsKKworLyogVHJhbnNtaXQgY2hlY2tzdW0gaW5zZXJ0aW9uIGNvbnRyb2wgKi8KK2VudW0gdGRlc19jc3VtX2luc2VydGlvbiB7CisJY2ljX2Rpc2FibGVkID0gMCwJLyogQ2hlY2tzdW0gSW5zZXJ0aW9uIENvbnRyb2wgKi8KKwljaWNfb25seV9pcCA9IDEsCS8qIE9ubHkgSVAgaGVhZGVyICovCisJY2ljX25vX3BzZXVkb2hlYWRlciA9IDIsCS8qIElQIGhlYWRlciBidXQgcHNldWRvaGVhZGVyCisJCQkJCSAqIGlzIG5vdCBjYWxjdWxhdGVkICovCisJY2ljX2Z1bGwgPSAzLAkJLyogSVAgaGVhZGVyIGFuZCBwc2V1ZG9oZWFkZXIgKi8KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI0YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYwpAQCAtMCwwICsxLDY5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgR01BQyBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIgZm9yIFNUIFNvQ3MuCisgIERXQyBFdGhlciBNQUMgMTAvMTAwLzEwMDAgVW5pdmVyc2FsIHZlcnNpb24gMy40MWEgIGhhcyBiZWVuIHVzZWQgZm9yCisgIGRldmVsb3BpbmcgdGhpcyBjb2RlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgInN0bW1hYy5oIgorI2luY2x1ZGUgImdtYWMuaCIKKworI3VuZGVmIEdNQUNfREVCVUcKKy8qI2RlZmluZSBHTUFDX0RFQlVHKi8KKyN1bmRlZiBGUkFNRV9GSUxURVJfREVCVUcKKy8qI2RlZmluZSBGUkFNRV9GSUxURVJfREVCVUcqLworI2lmZGVmIEdNQUNfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdtYWNfZHVtcF9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCSAgICAgICAiXHQgIEdNQUMgcmVnaXN0ZXJzIChiYXNlIGFkZHIgPSAweCU4eClcbiIKKwkgICAgICAgIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClpb2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IDU1OyBpKyspIHsKKwkJaW50IG9mZnNldCA9IGkgKiA0OworCQlwcl9pbmZvKCJcdFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAorCQkgICAgICAgb2Zmc2V0LCByZWFkbChpb2FkZHIgKyBvZmZzZXQpKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGdtYWNfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsIHUzMiBkbWFfcngpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwkvKiBETUEgU1cgcmVzZXQgKi8KKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7CisKKwl2YWx1ZSA9IC8qIERNQV9CVVNfTU9ERV9GQiB8ICovIERNQV9CVVNfTU9ERV80UEJMIHwKKwkgICAgKChwYmwgPDwgRE1BX0JVU19NT0RFX1BCTF9TSElGVCkgfAorCSAgICAgKHBibCA8PCBETUFfQlVTX01PREVfUlBCTF9TSElGVCkpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19EQQorCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9EQTsJLyogUnggaGFzIHByaW9yaXR5IG92ZXIgdHggKi8KKyNlbmRpZgorCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKworCS8qIE1hc2sgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIENTUjcgKi8KKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBpb2FkZHIgKyBETUFfSU5UUl9FTkEpOworCisJLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUlgvVFggZGVzY3JpcHRvciBsaXN0cyBtdXN0IGJlIHdyaXR0ZW4gaW50bworCSAqIERNQSBDU1IzIGFuZCBDU1I0LCByZXNwZWN0aXZlbHkuICovCisJd3JpdGVsKGRtYV90eCwgaW9hZGRyICsgRE1BX1RYX0JBU0VfQUREUik7CisJd3JpdGVsKGRtYV9yeCwgaW9hZGRyICsgRE1BX1JDVl9CQVNFX0FERFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRyYW5zbWl0IEZJRk8gZmx1c2ggb3BlcmF0aW9uICovCitzdGF0aWMgdm9pZCBnbWFjX2ZsdXNoX3R4X2ZpZm8odW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJd3JpdGVsKChjc3I2IHwgRE1BX0NPTlRST0xfRlRGKSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCkgJiBETUFfQ09OVFJPTF9GVEYpKTsKK30KKworc3RhdGljIHZvaWQgZ21hY19kbWFfb3BlcmF0aW9uX21vZGUodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsCisJCQkJICAgIGludCByeG1vZGUpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlpZiAodHhtb2RlID09IFNGX0RNQV9NT0RFKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBlbmFibGluZyBUWCBzdG9yZSBhbmQgZm9yd2FyZCBtb2RlXG4iKTsKKwkJLyogVHJhbnNtaXQgQ09FIHR5cGUgMiBjYW5ub3QgYmUgZG9uZSBpbiBjdXQtdGhyb3VnaCBtb2RlLiAqLworCQljc3I2IHw9IERNQV9DT05UUk9MX1RTRjsKKwkJLyogT3BlcmF0aW5nIG9uIHNlY29uZCBmcmFtZSBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2UKKwkJICogZXNwZWNpYWxseSB3aGVuIHRyYW5zbWl0IHN0b3JlLWFuZC1mb3J3YXJkIGlzIHVzZWQuKi8KKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9PU0Y7CisJfSBlbHNlIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGRpc2FibGluZyBUWCBzdG9yZSBhbmQgZm9yd2FyZCBtb2RlIgorCQkJICAgICAgIiAodGhyZXNob2xkID0gJWQpXG4iLCB0eG1vZGUpOworCQljc3I2ICY9IH5ETUFfQ09OVFJPTF9UU0Y7CisJCWNzcjYgJj0gRE1BX0NPTlRST0xfVENfVFhfTUFTSzsKKwkJLyogU2V0IHRoZSB0cmFuc21pdCB0aHJlYXNob2xkICovCisJCWlmICh0eG1vZGUgPD0gMzIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKKwkJZWxzZSBpZiAodHhtb2RlIDw9IDY0KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfNjQ7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSAxMjgpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18xMjg7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSAxOTIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18xOTI7CisJCWVsc2UKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzI1NjsKKwl9CisKKwlpZiAocnhtb2RlID09IFNGX0RNQV9NT0RFKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBlbmFibGluZyBSWCBzdG9yZSBhbmQgZm9yd2FyZCBtb2RlXG4iKTsKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9SU0Y7CisJfSBlbHNlIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGRpc2FibGluZyBSWCBzdG9yZSBhbmQgZm9yd2FyZCBtb2RlIgorCQkJICAgICAgIiAodGhyZXNob2xkID0gJWQpXG4iLCByeG1vZGUpOworCQljc3I2ICY9IH5ETUFfQ09OVFJPTF9SU0Y7CisJCWNzcjYgJj0gRE1BX0NPTlRST0xfVENfUlhfTUFTSzsKKwkJaWYgKHJ4bW9kZSA8PSAzMikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzMyOworCQllbHNlIGlmIChyeG1vZGUgPD0gNjQpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ182NDsKKwkJZWxzZSBpZiAocnhtb2RlIDw9IDk2KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfOTY7CisJCWVsc2UKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzEyODsKKwl9CisKKwl3cml0ZWwoY3NyNiwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXJldHVybjsKK30KKworLyogTm90IHlldCBpbXBsZW1lbnRlZCAtLS0gbm8gUk1PTiBtb2R1bGUgKi8KK3N0YXRpYyB2b2lkIGdtYWNfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfZHVtcF9kbWFfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKwlwcl9pbmZvKCIgRE1BIHJlZ2lzdGVyc1xuIik7CisJZm9yIChpID0gMDsgaSA8IDIyOyBpKyspIHsKKwkJaWYgKChpIDwgOSkgfHwgKGkgPiAxNykpIHsKKwkJCWludCBvZmZzZXQgPSBpICogNDsKKwkJCXByX2VycigiXHQgUmVnIE5vLiAlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCisJCQkgICAgICAgKERNQV9CVVNfTU9ERSArIG9mZnNldCksCisJCQkgICAgICAgcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFICsgb2Zmc2V0KSk7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmVycm9yX3N1bW1hcnkpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBUWCBlcnJvci4uLiAweCUwOHhcbiIsIHAtPmRlczAxLmV0eCk7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguamFiYmVyX3RpbWVvdXQpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0amFiYmVyX3RpbWVvdXQgZXJyb3JcbiIpOworCQkJeC0+dHhfamFiYmVyKys7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmZyYW1lX2ZsdXNoZWQpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZnJhbWVfZmx1c2hlZCBlcnJvclxuIik7CisJCQl4LT50eF9mcmFtZV9mbHVzaGVkKys7CisJCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubG9zc19jYXJyaWVyKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGxvc3NfY2FycmllciBlcnJvclxuIik7CisJCQl4LT50eF9sb3NzY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5ub19jYXJyaWVyKSkgeworCQkJREJHKEtFUk5fRVJSICJcdG5vX2NhcnJpZXIgZXJyb3JcbiIpOworCQkJeC0+dHhfY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5sYXRlX2NvbGxpc2lvbikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsYXRlX2NvbGxpc2lvbiBlcnJvclxuIik7CisJCQlzdGF0cy0+Y29sbGlzaW9ucyArPSBwLT5kZXMwMS5ldHguY29sbGlzaW9uX2NvdW50OworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXhjZXNzaXZlX2NvbGxpc2lvbnMpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZXhjZXNzaXZlX2NvbGxpc2lvbnNcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkpIHsKKwkJCURCRyhLRVJOX0lORk8gIlx0ZXhjZXNzaXZlIHR4X2RlZmVycmFsXG4iKTsKKwkJCXgtPnR4X2RlZmVycmVkKys7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LnVuZGVyZmxvd19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHR1bmRlcmZsb3cgZXJyb3JcbiIpOworCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguaXBfaGVhZGVyX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdFRYIElQIGhlYWRlciBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X2lwX2hlYWRlcl9lcnJvcisrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5wYXlsb2FkX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdEFkZHIvUGF5bG9hZCBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X3BheWxvYWRfZXJyb3IrKzsKKwkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOworCQl9CisKKwkJcmV0ID0gLTE7CisJfQorCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5kZWZlcnJlZCkpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBUWCBzdGF0dXM6IHR4IGRlZmVycmVkXG4iKTsKKwkJeC0+dHhfZGVmZXJyZWQrKzsKKwl9CisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwlpZiAocC0+ZGVzMDEuZXR4LnZsYW5fZnJhbWUpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBUWCBzdGF0dXM6IFZMQU4gZnJhbWVcbiIpOworCQl4LT50eF92bGFuKys7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5idWZmZXIxX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgZ21hY19jb2VfcmRlczAoaW50IGlwY19lcnIsIGludCB0eXBlLCBpbnQgcGF5bG9hZF9lcnIpCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJdTMyIHN0YXR1cyA9ICh0eXBlIDw8IDIgfCBpcGNfZXJyIDw8IDEgfCBwYXlsb2FkX2VycikgJiAweDc7CisKKwkvKiBiaXRzIDUgNyAwIHwgRnJhbWUgc3RhdHVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgMCAwIDAgfCBJRUVFIDgwMi4zIFR5cGUgZnJhbWUgKGxlbmdodCA8IDE1MzYgb2N0ZWN0cykKKwkgKiAgICAgIDEgMCAwIHwgSVB2NC82IE5vIENTVU0gZXJyb3JTLgorCSAqICAgICAgMSAwIDEgfCBJUHY0LzYgQ1NVTSBQQVlMT0FEIGVycm9yCisJICogICAgICAxIDEgMCB8IElQdjQvNiBDU1VNIElQIEhSIGVycm9yCisJICogICAgICAxIDEgMSB8IElQdjQvNiBJUCBQQVlMT0FEIEFORCBIRUFERVIgZXJyb3JTCisJICogICAgICAwIDAgMSB8IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FECisJICogICAgICAwIDEgMSB8IENPRSBieXBhc3NlZC4uIG5vIElQdjQvNiBmcmFtZQorCSAqICAgICAgMCAxIDAgfCBSZXNlcnZlZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IDB4MCkgeworCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSUVFRSA4MDIuMyBUeXBlIGZyYW1lLlxuIik7CisJCXJldCA9IGdvb2RfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg0KSB7CisJCURCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuXG4iKTsKKwkJcmV0ID0gZ29vZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDUpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NikgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDcpIHsKKwkJREJHKEtFUk5fRVJSCisJCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBIZWFkZXIgYW5kIFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4MSkgeworCQlEQkcoS0VSTl9FUlIKKwkJICAgICJSWCBEZXMwIHN0YXR1czogSVB2NC82IHVuc3VwcG9ydGVkIElQIFBBWUxPQUQuXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDMpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogTm8gSVB2NCwgSVB2NiBmcmFtZS5cbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3J4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIEVycm9yIFN1bW1hcnkuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5lcngpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRlc2NyaXB0b3JfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZGVzY3JpcHRvciBlcnJvclxuIik7CisJCQl4LT5yeF9kZXNjKys7CisJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngub3ZlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0b3ZlcmZsb3cgZXJyb3JcbiIpOworCQkJeC0+cnhfZ21hY19vdmVyZmxvdysrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvcikpCisJCQlEQkcoS0VSTl9FUlIgIlx0SVBDIENzdW0gRXJyb3IvR2lhbnQgZnJhbWVcbiIpOworCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5yZWNlaXZlX3dhdGNoZG9nKSkgeworCQkJREJHKEtFUk5fRVJSICJcdHJlY2VpdmVfd2F0Y2hkb2cgZXJyb3JcbiIpOworCQkJeC0+cnhfd2F0Y2hkb2crKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX2dtaWkpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0UmVjZWl2ZSBFcnJvclxuIik7CisJCQl4LT5yeF9taWkrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmNyY19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRDUkMgZXJyb3JcbiIpOworCQkJeC0+cnhfY3JjKys7CisJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQl9CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCisJLyogQWZ0ZXIgYSBwYXlsb2FkIGNzdW0gZXJyb3IsIHRoZSBFUyBiaXQgaXMgc2V0LgorCSAqIEl0IGRvZXNuJ3QgbWF0Y2ggd2l0aCB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgaW50byB0aGUgZGF0YWJvb2suCisJICogQXQgYW55IHJhdGUsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgQ1NVTSBodyBjb21wdXRhdGlvbiBpcyBvaworCSAqIGFuZCByZXBvcnQgdGhpcyBpbmZvIHRvIHRoZSB1cHBlciBsYXllcnMuICovCisJcmV0ID0gZ21hY19jb2VfcmRlczAocC0+ZGVzMDEuZXJ4LmlwY19jc3VtX2Vycm9yLAorCQlwLT5kZXMwMS5lcnguZnJhbWVfdHlwZSwgcC0+ZGVzMDEuZXJ4LnBheWxvYWRfY3N1bV9lcnJvcik7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRyaWJibGluZykpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYOiBkcmliYmxpbmcgZXJyb3JcbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LnNhX2ZpbHRlcl9mYWlsKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggOiBTb3VyY2UgQWRkcmVzcyBmaWx0ZXIgZmFpbFxuIik7CisJCXgtPnNhX3J4X2ZpbHRlcl9mYWlsKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZGFfZmlsdGVyX2ZhaWwpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCA6IERlc3RpbmF0aW9uIEFkZHJlc3MgZmlsdGVyIGZhaWxcbiIpOworCQl4LT5kYV9yeF9maWx0ZXJfZmFpbCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4Lmxlbmd0aF9lcnJvcikpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYOiBsZW5ndGhfZXJyb3IgZXJyb3JcbiIpOworCQl4LT5yeF9sZW5naHQrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwlpZiAocC0+ZGVzMDEuZXJ4LnZsYW5fdGFnKSB7CisJCURCRyhLRVJOX0lORk8gIkdNQUMgUlg6IFZMQU4gZnJhbWUgdGFnZ2VkXG4iKTsKKwkJeC0+cnhfdmxhbisrOworCX0KKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfaXJxX3N0YXR1cyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBHTUFDX0lOVF9TVEFUVVMpOworCisJLyogTm90IHVzZWQgZXZlbnRzIChlLmcuIE1NQyBpbnRlcnJ1cHRzKSBhcmUgbm90IGhhbmRsZWQuICovCisJaWYgKChpbnRyX3N0YXR1cyAmIG1tY190eF9pcnEpKQorCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogTU1DIHR4IGludGVycnVwdDogMHglMDh4XG4iLAorCQkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19NTUNfVFhfSU5UUikpOworCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIG1tY19yeF9pcnEpKQorCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogTU1DIHJ4IGludGVycnVwdDogMHglMDh4XG4iLAorCQkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19NTUNfUlhfSU5UUikpOworCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIG1tY19yeF9jc3VtX29mZmxvYWRfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBjc3VtIG9mZmxvYWQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0NTVU1fT0ZGTE9BRCkpOworCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIHBtdF9pcnEpKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiByZWNlaXZlZCBNYWdpYyBmcmFtZVxuIik7CisJCS8qIGNsZWFyIHRoZSBQTVQgYml0cyA1IGFuZCA2IGJ5IHJlYWRpbmcgdGhlIFBNVAorCQkgKiBzdGF0dXMgcmVnaXN0ZXIuICovCisJCXJlYWRsKGlvYWRkciArIEdNQUNfUE1UKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfY29yZV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIEdNQUNfQ09OVFJPTCk7CisJdmFsdWUgfD0gR01BQ19DT1JFX0lOSVQ7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0NPTlRST0wpOworCisJLyogU1RCdXMgQnJpZGdlIENvbmZpZ3VyYXRpb24gKi8KKwkvKndyaXRlbCgweGM1NjA4LCBpb2FkZHIgKyAweDAwMDA3MDAwKTsqLworCisJLyogRnJlZXplIE1NQyBjb3VudGVycyAqLworCXdyaXRlbCgweDgsIGlvYWRkciArIEdNQUNfTU1DX0NUUkwpOworCS8qIE1hc2sgR01BQyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MjA3LCBpb2FkZHIgKyBHTUFDX0lOVF9NQVNLKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJLyogVGFnIGRldGVjdGlvbiB3aXRob3V0IGZpbHRlcmluZyAqLworCXdyaXRlbCgweDAsIGlvYWRkciArIEdNQUNfVkxBTl9UQUcpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkJdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19zZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBHTUFDX0FERFJfSElHSChyZWdfbiksCisJCQkJR01BQ19BRERSX0xPVyhyZWdfbikpOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2dldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkJdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19nZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBHTUFDX0FERFJfSElHSChyZWdfbiksCisJCQkJR01BQ19BRERSX0xPVyhyZWdfbikpOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKwlEQkcoS0VSTl9JTkZPICIlczogIyBtY2FzdHMgJWQsICMgdW5pY2FzdCAlZFxuIiwKKwkgICAgX19mdW5jX18sIGRldi0+bWNfY291bnQsIGRldi0+dWNfY291bnQpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJdmFsdWUgPSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUjsKKwllbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUE07CS8qIHBhc3MgYWxsIG11bHRpICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKTsKKwl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CisJCWludCBpOworCQl1MzIgbWNfZmlsdGVyWzJdOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKworCQkvKiBIYXNoIGZpbHRlciBmb3IgbXVsdGljYXN0ICovCisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfSE1DOworCisJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKKwkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkgICAgIG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJCS8qIFRoZSB1cHBlciA2IGJpdHMgb2YgdGhlIGNhbGN1bGF0ZWQgQ1JDIGFyZSB1c2VkIHRvCisJCQkgICBpbmRleCB0aGUgY29udGVucyBvZiB0aGUgaGFzaCB0YWJsZSAqLworCQkJaW50IGJpdF9uciA9CisJCQkgICAgYml0cmV2MzIofmNyYzMyX2xlKH4wLCBtY2xpc3QtPmRtaV9hZGRyLCA2KSkgPj4gMjY7CisJCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KKwkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0CisJCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCX0KKwkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7CisJCXdyaXRlbChtY19maWx0ZXJbMV0sIGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKTsKKwl9CisKKwkvKiBIYW5kbGUgbXVsdGlwbGUgdW5pY2FzdCBhZGRyZXNzZXMgKHBlcmZlY3QgZmlsdGVyaW5nKSovCisJaWYgKGRldi0+dWNfY291bnQgPiBHTUFDX01BWF9VTklDQVNUX0FERFJFU1NFUykKKwkJLyogU3dpdGNoIHRvIHByb21pc2N1b3VzIG1vZGUgaXMgbW9yZSB0aGFuIDE2IGFkZHJzCisJCSAgIGFyZSByZXF1aXJlZCAqLworCQl2YWx1ZSB8PSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUjsKKwllbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICp1Y19wdHIgPSBkZXYtPnVjX2xpc3Q7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPnVjX2NvdW50OyBpKyspIHsKKwkJCQlnbWFjX3NldF91bWFjX2FkZHIoaW9hZGRyLCB1Y19wdHItPmRhX2FkZHIsCisJCQkJCQlpICsgMSk7CisKKwkJCQlEQkcoS0VSTl9JTkZPICJcdCVkICIKKwkJCQkiLSBVbmljYXN0IGFkZHIgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiIKKwkJCQkiJTAyeFxuIiwgaSArIDEsCisJCQkJdWNfcHRyLT5kYV9hZGRyWzBdLCB1Y19wdHItPmRhX2FkZHJbMV0sCisJCQkJdWNfcHRyLT5kYV9hZGRyWzJdLCB1Y19wdHItPmRhX2FkZHJbM10sCisJCQkJdWNfcHRyLT5kYV9hZGRyWzRdLCB1Y19wdHItPmRhX2FkZHJbNV0pOworCQkJCXVjX3B0ciA9IHVjX3B0ci0+bmV4dDsKKwkJfQorCX0KKworI2lmZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworCS8qIEVuYWJsZSBSZWNlaXZlIGFsbCBtb2RlICh0byBkZWJ1ZyBmaWx0ZXJpbmdfZmFpbCBlcnJvcnMpICovCisJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUkE7CisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKTsKKworCURCRyhLRVJOX0lORk8gIlx0RnJhbWUgRmlsdGVyIHJlZzogMHglMDh4XG5cdEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsIHJlYWRsKGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAorCQkJICAgdW5zaWduZWQgaW50IGZjLCB1bnNpZ25lZCBpbnQgcGF1c2VfdGltZSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxvdyA9IDA7CisKKwlEQkcoS0VSTl9ERUJVRyAiR01BQyBGbG93LUNvbnRyb2w6XG4iKTsKKwlpZiAoZmMgJiBGTE9XX1JYKSB7CisJCURCRyhLRVJOX0RFQlVHICJcdFJlY2VpdmUgRmxvdy1Db250cm9sIE9OXG4iKTsKKwkJZmxvdyB8PSBHTUFDX0ZMT1dfQ1RSTF9SRkU7CisJfQorCWlmIChmYyAmIEZMT1dfVFgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0VHJhbnNtaXQgRmxvdy1Db250cm9sIE9OXG4iKTsKKwkJZmxvdyB8PSBHTUFDX0ZMT1dfQ1RSTF9URkU7CisJfQorCisJaWYgKGR1cGxleCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRkdXBsZXggbW9kZTogcGF1c2UgdGltZTogJWRcbiIsIHBhdXNlX3RpbWUpOworCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IEdNQUNfRkxPV19DVFJMX1BUX1NISUZUKTsKKwl9CisKKwl3cml0ZWwoZmxvdywgaW9hZGRyICsgR01BQ19GTE9XX0NUUkwpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19wbXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgcG10ID0gMDsKKworCWlmIChtb2RlID09IFdBS0VfTUFHSUMpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IFdPTCBNYWdpYyBmcmFtZVxuIik7CisJCXBtdCB8PSBwb3dlcl9kb3duIHwgbWFnaWNfcGt0X2VuOworCX0gZWxzZSBpZiAobW9kZSA9PSBXQUtFX1VDQVNUKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgb24gZ2xvYmFsIHVuaWNhc3RcbiIpOworCQlwbXQgfD0gZ2xvYmFsX3VuaWNhc3Q7CisJfQorCisJd3JpdGVsKHBtdCwgaW9hZGRyICsgR01BQ19QTVQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19pbml0X3J4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAorCQkJCWludCBkaXNhYmxlX3J4X2ljKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS5lcngub3duID0gMTsKKwkJcC0+ZGVzMDEuZXJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzhLaUIgLSAxOworCQkvKiBUbyBzdXBwb3J0IGp1bWJvIGZyYW1lcyAqLworCQlwLT5kZXMwMS5lcnguYnVmZmVyMl9zaXplID0gQlVGX1NJWkVfOEtpQiAtIDE7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5lcnguZW5kX3JpbmcgPSAxOworCQlpZiAoZGlzYWJsZV9yeF9pYykKKwkJCXAtPmRlczAxLmVyeC5kaXNhYmxlX2ljID0gMTsKKwkJcCsrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfaW5pdF90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS5ldHgub3duID0gMDsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IDE7CisJCXArKzsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHgub3duOworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEuZXJ4Lm93bjsKK30KKworc3RhdGljIHZvaWQgZ21hY19zZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLmV0eC5vd24gPSAxOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfdHhfbHMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50OworfQorCitzdGF0aWMgdm9pZCBnbWFjX3JlbGVhc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHRlciA9IHAtPmRlczAxLmV0eC5lbmRfcmluZzsKKworCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSk7CisJcC0+ZGVzMDEuZXR4LmVuZF9yaW5nID0gdGVyOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS5ldHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCWlmICh1bmxpa2VseShsZW4gPiBCVUZfU0laRV80S2lCKSkgeworCQlwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfNEtpQjsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjJfc2l6ZSA9IGxlbiAtIEJVRl9TSVpFXzRLaUI7CisJfSBlbHNlIHsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKKwl9CisJaWYgKGxpa2VseShjc3VtX2ZsYWcpKQorCQlwLT5kZXMwMS5ldHguY2hlY2tzdW1faW5zZXJ0aW9uID0gY2ljX2Z1bGw7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfY2xlYXJfdHhfaWMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLmV0eC5pbnRlcnJ1cHQgPSAwOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2Nsb3NlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLmV0eC5sYXN0X3NlZ21lbnQgPSAxOworCXAtPmRlczAxLmV0eC5pbnRlcnJ1cHQgPSAxOworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmVyeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfb3BzIGdtYWNfZHJpdmVyID0geworCS5jb3JlX2luaXQgPSBnbWFjX2NvcmVfaW5pdCwKKwkuZHVtcF9tYWNfcmVncyA9IGdtYWNfZHVtcF9yZWdzLAorCS5kbWFfaW5pdCA9IGdtYWNfZG1hX2luaXQsCisJLmR1bXBfZG1hX3JlZ3MgPSBnbWFjX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gZ21hY19kbWFfb3BlcmF0aW9uX21vZGUsCisJLmRtYV9kaWFnbm9zdGljX2ZyID0gZ21hY19kbWFfZGlhZ25vc3RpY19mciwKKwkudHhfc3RhdHVzID0gZ21hY19nZXRfdHhfZnJhbWVfc3RhdHVzLAorCS5yeF9zdGF0dXMgPSBnbWFjX2dldF9yeF9mcmFtZV9zdGF0dXMsCisJLmdldF90eF9sZW4gPSBnbWFjX2dldF90eF9sZW4sCisJLnNldF9maWx0ZXIgPSBnbWFjX3NldF9maWx0ZXIsCisJLmZsb3dfY3RybCA9IGdtYWNfZmxvd19jdHJsLAorCS5wbXQgPSBnbWFjX3BtdCwKKwkuaW5pdF9yeF9kZXNjID0gZ21hY19pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IGdtYWNfaW5pdF90eF9kZXNjLAorCS5nZXRfdHhfb3duZXIgPSBnbWFjX2dldF90eF9vd25lciwKKwkuZ2V0X3J4X293bmVyID0gZ21hY19nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IGdtYWNfcmVsZWFzZV90eF9kZXNjLAorCS5wcmVwYXJlX3R4X2Rlc2MgPSBnbWFjX3ByZXBhcmVfdHhfZGVzYywKKwkuY2xlYXJfdHhfaWMgPSBnbWFjX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gZ21hY19jbG9zZV90eF9kZXNjLAorCS5nZXRfdHhfbHMgPSBnbWFjX2dldF90eF9scywKKwkuc2V0X3R4X293bmVyID0gZ21hY19zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IGdtYWNfc2V0X3J4X293bmVyLAorCS5nZXRfcnhfZnJhbWVfbGVuID0gZ21hY19nZXRfcnhfZnJhbWVfbGVuLAorCS5ob3N0X2lycV9zdGF0dXMgPSBnbWFjX2lycV9zdGF0dXMsCisJLnNldF91bWFjX2FkZHIgPSBnbWFjX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBnbWFjX2dldF91bWFjX2FkZHIsCit9OworCitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpnbWFjX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKKwl1MzIgdWlkID0gcmVhZGwoaW9hZGRyICsgR01BQ19WRVJTSU9OKTsKKworCXByX2luZm8oIlx0R01BQyAtIHVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XG4iLAorCSAgICAgICAoKHVpZCAmIDB4MDAwMGZmMDApID4+IDgpLCAodWlkICYgMHgwMDAwMDBmZikpOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJbWFjLT5vcHMgPSAmZ21hY19kcml2ZXI7CisJbWFjLT5ody5wbXQgPSBQTVRfU1VQUE9SVEVEOworCW1hYy0+aHcubGluay5wb3J0ID0gR01BQ19DT05UUk9MX1BTOworCW1hYy0+aHcubGluay5kdXBsZXggPSBHTUFDX0NPTlRST0xfRE07CisJbWFjLT5ody5saW5rLnNwZWVkID0gR01BQ19DT05UUk9MX0ZFUzsKKwltYWMtPmh3Lm1paS5hZGRyID0gR01BQ19NSUlfQUREUjsKKwltYWMtPmh3Lm1paS5kYXRhID0gR01BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRhMzYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaApAQCAtMCwwICsxLDIwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR01BQ19DT05UUk9MCQkweDAwMDAwMDAwCS8qIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVIJMHgwMDAwMDAwNAkvKiBGcmFtZSBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19IQVNIX0hJR0gJCTB4MDAwMDAwMDgJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgSGlnaCAqLworI2RlZmluZSBHTUFDX0hBU0hfTE9XCQkweDAwMDAwMDBjCS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIExvdyAqLworI2RlZmluZSBHTUFDX01JSV9BRERSCQkweDAwMDAwMDEwCS8qIE1JSSBBZGRyZXNzICovCisjZGVmaW5lIEdNQUNfTUlJX0RBVEEJCTB4MDAwMDAwMTQJLyogTUlJIERhdGEgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkwJCTB4MDAwMDAwMTgJLyogRmxvdyBDb250cm9sICovCisjZGVmaW5lIEdNQUNfVkxBTl9UQUcJCTB4MDAwMDAwMWMJLyogVkxBTiBUYWcgKi8KKyNkZWZpbmUgR01BQ19WRVJTSU9OCQkweDAwMDAwMDIwCS8qIEdNQUMgQ09SRSBWZXJzaW9uICovCisjZGVmaW5lIEdNQUNfV0FLRVVQX0ZJTFRFUgkweDAwMDAwMDI4CS8qIFdha2UtdXAgRnJhbWUgRmlsdGVyICovCisKKyNkZWZpbmUgR01BQ19JTlRfU1RBVFVTCQkweDAwMDAwMDM4CS8qIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KK2VudW0gZ21hY19pcnFfc3RhdHVzIHsKKwl0aW1lX3N0YW1wX2lycSA9IDB4MDIwMCwKKwltbWNfcnhfY3N1bV9vZmZsb2FkX2lycSA9IDB4MDA4MCwKKwltbWNfdHhfaXJxID0gMHgwMDQwLAorCW1tY19yeF9pcnEgPSAweDAwMjAsCisJbW1jX2lycSA9IDB4MDAxMCwKKwlwbXRfaXJxID0gMHgwMDA4LAorCXBjc19hbmVfaXJxID0gMHgwMDA0LAorCXBjc19saW5rX2lycSA9IDB4MDAwMiwKKwlyZ21paV9pcnEgPSAweDAwMDEsCit9OworI2RlZmluZSBHTUFDX0lOVF9NQVNLCQkweDAwMDAwMDNjCS8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisKKy8qIFBNVCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19QTVQJCTB4MDAwMDAwMmMKK2VudW0gcG93ZXJfZXZlbnQgeworCXBvaW50ZXJfcmVzZXQgPSAweDgwMDAwMDAwLAorCWdsb2JhbF91bmljYXN0ID0gMHgwMDAwMDIwMCwKKwl3YWtlX3VwX3J4X2ZyYW1lID0gMHgwMDAwMDA0MCwKKwltYWdpY19mcmFtZSA9IDB4MDAwMDAwMjAsCisJd2FrZV91cF9mcmFtZV9lbiA9IDB4MDAwMDAwMDQsCisJbWFnaWNfcGt0X2VuID0gMHgwMDAwMDAwMiwKKwlwb3dlcl9kb3duID0gMHgwMDAwMDAwMSwKK307CisKKy8qIEdNQUMgSFcgQUREUiByZWdzICovCisjZGVmaW5lIEdNQUNfQUREUl9ISUdIKHJlZykJCSgweDAwMDAwMDQwKyhyZWcgKiA4KSkKKyNkZWZpbmUgR01BQ19BRERSX0xPVyhyZWcpCQkoMHgwMDAwMDA0NCsocmVnICogOCkpCisjZGVmaW5lIEdNQUNfTUFYX1VOSUNBU1RfQUREUkVTU0VTCTE2CisKKyNkZWZpbmUgR01BQ19BTl9DVFJMCTB4MDAwMDAwYzAJLyogQU4gY29udHJvbCAqLworI2RlZmluZSBHTUFDX0FOX1NUQVRVUwkweDAwMDAwMGM0CS8qIEFOIHN0YXR1cyAqLworI2RlZmluZSBHTUFDX0FORV9BRFYJMHgwMDAwMDBjOAkvKiBBdXRvLU5lZy4gQWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZSBHTUFDX0FORV9MSU5LCTB4MDAwMDAwY2MJLyogQXV0by1OZWcuIGxpbmsgcGFydGVuZXIgYWJpbGl0eSAqLworI2RlZmluZSBHTUFDX0FORV9FWFAJMHgwMDAwMDBkMAkvKiBBTkUgZXhwYW5zaW9uICovCisjZGVmaW5lIEdNQUNfVEJJCTB4MDAwMDAwZDQJLyogVEJJIGV4dGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19HTUlJX1NUQVRVUyAweDAwMDAwMGQ4CS8qIFMvUi1HTUlJIHN0YXR1cyAqLworCisvKiBHTUFDIENvbmZpZ3VyYXRpb24gZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfVEMJMHgwMTAwMDAwMAkvKiBUcmFuc21pdCBDb25mLiBpbiBSR01JSS9TR01JSSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfV0QJMHgwMDgwMDAwMAkvKiBEaXNhYmxlIFdhdGNoZG9nIG9uIHJlY2VpdmUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0pECTB4MDA0MDAwMDAJLyogSmFiYmVyIGRpc2FibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0JFCTB4MDAyMDAwMDAJLyogRnJhbWUgQnVyc3QgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9KRQkweDAwMTAwMDAwCS8qIEp1bWJvIGZyYW1lICovCitlbnVtIGludGVyX2ZyYW1lX2dhcCB7CisJR01BQ19DT05UUk9MX0lGR184OCA9IDB4MDAwNDAwMDAsCisJR01BQ19DT05UUk9MX0lGR184MCA9IDB4MDAwMjAwMDAsCisJR01BQ19DT05UUk9MX0lGR180MCA9IDB4MDAwZTAwMDAsCit9OworI2RlZmluZSBHTUFDX0NPTlRST0xfRENSUwkweDAwMDEwMDAwIC8qIERpc2FibGUgY2FycmllciBzZW5zZSBkdXJpbmcgdHggKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1BTCQkweDAwMDA4MDAwIC8qIFBvcnQgU2VsZWN0IDA6R01JIDE6TUlJICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9GRVMJMHgwMDAwNDAwMCAvKiBTcGVlZCAwOjEwIDE6MTAwICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9ETwkJMHgwMDAwMjAwMCAvKiBEaXNhYmxlIFJ4IE93biAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfTE0JCTB4MDAwMDEwMDAgLyogTG9vcC1iYWNrIG1vZGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RNCQkweDAwMDAwODAwIC8qIER1cGxleCBNb2RlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9JUEMJMHgwMDAwMDQwMCAvKiBDaGVja3N1bSBPZmZsb2FkICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EUgkJMHgwMDAwMDIwMCAvKiBEaXNhYmxlIFJldHJ5ICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9MVUQJMHgwMDAwMDEwMCAvKiBMaW5rIHVwL2Rvd24gKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0FDUwkweDAwMDAwMDgwIC8qIEF1dG9tYXRpYyBQYWQgU3RyaXBwaW5nICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EQwkJMHgwMDAwMDAxMCAvKiBEZWZlcnJhbCBDaGVjayAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfVEUJCTB4MDAwMDAwMDggLyogVHJhbnNtaXR0ZXIgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9SRQkJMHgwMDAwMDAwNCAvKiBSZWNlaXZlciBFbmFibGUgKi8KKworI2RlZmluZSBHTUFDX0NPUkVfSU5JVCAoR01BQ19DT05UUk9MX0pEIHwgR01BQ19DT05UUk9MX1BTIHwgR01BQ19DT05UUk9MX0FDUyB8IFwKKwkJCUdNQUNfQ09OVFJPTF9JUEMgfCBHTUFDX0NPTlRST0xfSkUgfCBHTUFDX0NPTlRST0xfQkUpCisKKy8qIEdNQUMgRnJhbWUgRmlsdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUFIJMHgwMDAwMDAwMQkvKiBQcm9taXNjdW91cyBNb2RlICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hVQwkweDAwMDAwMDAyCS8qIEhhc2ggVW5pY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9ITUMJMHgwMDAwMDAwNAkvKiBIYXNoIE11bHRpY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQUlGCTB4MDAwMDAwMDgJLyogREEgSW52ZXJzZSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUE0JMHgwMDAwMDAxMAkvKiBQYXNzIGFsbCBtdWx0aWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfREJGCTB4MDAwMDAwMjAJLyogRGlzYWJsZSBCcm9hZGNhc3QgZnJhbWVzICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBSUYJMHgwMDAwMDEwMAkvKiBJbnZlcnNlIEZpbHRlcmluZyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9TQUYJMHgwMDAwMDIwMAkvKiBTb3VyY2UgQWRkcmVzcyBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFBGCTB4MDAwMDA0MDAJLyogSGFzaCBvciBwZXJmZWN0IEZpbHRlciAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9SQQkweDgwMDAwMDAwCS8qIFJlY2VpdmUgYWxsIG1vZGUgKi8KKy8qIEdNSUkgQUREUiAgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX01JSV9BRERSX1dSSVRFCTB4MDAwMDAwMDIJLyogTUlJIFdyaXRlICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFJfQlVTWQkweDAwMDAwMDAxCS8qIE1JSSBCdXN5ICovCisvKiBHTUFDIEZMT1cgQ1RSTCBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1BUX01BU0sJMHhmZmZmMDAwMAkvKiBQYXVzZSBUaW1lIE1hc2sgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQJMTYKKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUkZFCTB4MDAwMDAwMDQJLyogUnggRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9URkUJMHgwMDAwMDAwMgkvKiBUeCBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX0ZDQl9CUEEJMHgwMDAwMDAwMQkvKiBGbG93IENvbnRyb2wgQnVzeSAuLi4gKi8KKworLyotLS0gRE1BIEJMT0NLIGRlZmluZXMgLS0tKi8KKy8qIERNQSBCdXMgTW9kZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQJMHgwMDAwMDAwMQkvKiBTb2Z0d2FyZSBSZXNldCAqLworI2RlZmluZSBETUFfQlVTX01PREVfREEJCTB4MDAwMDAwMDIJLyogQXJiaXRyYXRpb24gc2NoZW1lICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfTUFTSwkweDAwMDAwMDdjCS8qIERlc2NyaXB0b3IgU2tpcCBMZW5ndGggKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9TSElGVAkyCS8qICAgKGluIERXT1JEUykgICAgICAqLworLyogUHJvZ3JhbW1hYmxlIGJ1cnN0IGxlbmd0aCAocGFzc2VkIHRob3J1Z2ggcGxhdGZvcm0pKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9NQVNLCTB4MDAwMDNmMDAJLyogUHJvZ3JhbW1hYmxlIEJ1cnN0IExlbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX1NISUZUCTgKKworZW51bSByeF90eF9wcmlvcml0eV9yYXRpbyB7CisJZG91YmxlX3JhdGlvID0gMHgwMDAwNDAwMCwJLyoyOjEgKi8KKwl0cmlwbGVfcmF0aW8gPSAweDAwMDA4MDAwLAkvKjM6MSAqLworCXF1YWRydXBsZV9yYXRpbyA9IDB4MDAwMGMwMDAsCS8qNDoxICovCit9OworCisjZGVmaW5lIERNQV9CVVNfTU9ERV9GQgkJMHgwMDAxMDAwMAkvKiBGaXhlZCBidXJzdCAqLworI2RlZmluZSBETUFfQlVTX01PREVfUlBCTF9NQVNLCTB4MDAzZTAwMDAJLyogUngtUHJvZ3JhbW1hYmxlIEJ1cnN0IExlbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUlBCTF9TSElGVAkxNworI2RlZmluZSBETUFfQlVTX01PREVfVVNQCTB4MDA4MDAwMDAKKyNkZWZpbmUgRE1BX0JVU19NT0RFXzRQQkwJMHgwMTAwMDAwMAorI2RlZmluZSBETUFfQlVTX01PREVfQUFMCTB4MDIwMDAwMDAKKworLyogRE1BIENSUyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgTWFwcGluZyAqLworI2RlZmluZSBETUFfSE9TVF9UWF9ERVNDCSAgMHgwMDAwMTA0OAkvKiBDdXJyZW50IEhvc3QgVHggZGVzY3JpcHRvciAqLworI2RlZmluZSBETUFfSE9TVF9SWF9ERVNDCSAgMHgwMDAwMTA0YwkvKiBDdXJyZW50IEhvc3QgUnggZGVzY3JpcHRvciAqLworLyogIERNQSBCdXMgTW9kZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9CVVNfUFJfUkFUSU9fTUFTSwkgIDB4MDAwMGMwMDAJLyogUngvVHggcHJpb3JpdHkgcmF0aW8gKi8KKyNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19TSElGVAkgIDE0CisjZGVmaW5lIERNQV9CVVNfRkIJICAJICAweDAwMDEwMDAwCS8qIEZpeGVkIEJ1cnN0ICovCisKKy8qIERNQSBvcGVyYXRpb24gbW9kZSBkZWZpbmVzIChzdGFydC9zdG9wIHR4L3J4IGFyZSBwbGFjZWQgaW4gY29tbW9uIGhlYWRlcikqLworI2RlZmluZSBETUFfQ09OVFJPTF9EVAkJMHgwNDAwMDAwMCAvKiBEaXNhYmxlIERyb3AgVENQL0lQIGNzdW0gZXJyb3IgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfUlNGCQkweDAyMDAwMDAwIC8qIFJlY2VpdmUgU3RvcmUgYW5kIEZvcndhcmQgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfREZGCQkweDAxMDAwMDAwIC8qIERpc2FhYmxlIGZsdXNoaW5nICovCisvKiBUaGVzaG9sZCBmb3IgQWN0aXZhdGluZyB0aGUgRkMgKi8KK2VudW0gcmZhIHsKKwlhY3RfZnVsbF9taW51c18xID0gMHgwMDgwMDAwMCwKKwlhY3RfZnVsbF9taW51c18yID0gMHgwMDgwMDIwMCwKKwlhY3RfZnVsbF9taW51c18zID0gMHgwMDgwMDQwMCwKKwlhY3RfZnVsbF9taW51c180ID0gMHgwMDgwMDYwMCwKK307CisvKiBUaGVzaG9sZCBmb3IgRGVhY3RpdmF0aW5nIHRoZSBGQyAqLworZW51bSByZmQgeworCWRlYWNfZnVsbF9taW51c18xID0gMHgwMDQwMDAwMCwKKwlkZWFjX2Z1bGxfbWludXNfMiA9IDB4MDA0MDA4MDAsCisJZGVhY19mdWxsX21pbnVzXzMgPSAweDAwNDAxMDAwLAorCWRlYWNfZnVsbF9taW51c180ID0gMHgwMDQwMTgwMCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RTRgkJMHgwMDIwMDAwMCAvKiBUcmFuc21pdCAgU3RvcmUgYW5kIEZvcndhcmQgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfRlRGCQkweDAwMTAwMDAwIC8qIEZsdXNoIHRyYW5zbWl0IEZJRk8gKi8KKworZW51bSB0dGNfY29udHJvbCB7CisJRE1BX0NPTlRST0xfVFRDXzY0ID0gMHgwMDAwMDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTI4ID0gMHgwMDAwNDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTkyID0gMHgwMDAwODAwMCwKKwlETUFfQ09OVFJPTF9UVENfMjU2ID0gMHgwMDAwYzAwMCwKKwlETUFfQ09OVFJPTF9UVENfNDAgPSAweDAwMDEwMDAwLAorCURNQV9DT05UUk9MX1RUQ18zMiA9IDB4MDAwMTQwMDAsCisJRE1BX0NPTlRST0xfVFRDXzI0ID0gMHgwMDAxODAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTYgPSAweDAwMDFjMDAwLAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVENfVFhfTUFTSwkweGZmZmUzZmZmCisKKyNkZWZpbmUgRE1BX0NPTlRST0xfRUZDCQkweDAwMDAwMTAwCisjZGVmaW5lIERNQV9DT05UUk9MX0ZFRgkJMHgwMDAwMDA4MAorI2RlZmluZSBETUFfQ09OVFJPTF9GVUYJCTB4MDAwMDAwNDAKKworZW51bSBydGNfY29udHJvbCB7CisJRE1BX0NPTlRST0xfUlRDXzY0ID0gMHgwMDAwMDAwMCwKKwlETUFfQ09OVFJPTF9SVENfMzIgPSAweDAwMDAwMDA4LAorCURNQV9DT05UUk9MX1JUQ185NiA9IDB4MDAwMDAwMTAsCisJRE1BX0NPTlRST0xfUlRDXzEyOCA9IDB4MDAwMDAwMTgsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UQ19SWF9NQVNLCTB4ZmZmZmZmZTcKKworI2RlZmluZSBETUFfQ09OVFJPTF9PU0YJMHgwMDAwMDAwNAkvKiBPcGVyYXRlIG9uIHNlY29uZCBmcmFtZSAqLworCisvKiBNTUMgcmVnaXN0ZXJzIG9mZnNldCAqLworI2RlZmluZSBHTUFDX01NQ19DVFJMICAgICAgMHgxMDAKKyNkZWZpbmUgR01BQ19NTUNfUlhfSU5UUiAgIDB4MTA0CisjZGVmaW5lIEdNQUNfTU1DX1RYX0lOVFIgICAweDEwOAorI2RlZmluZSBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQgICAweDIwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTE3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMKQEAgLTAsMCArMSw1MTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIE1BQyAxMC8xMDAgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyCisgIGN1cnJlbnRseSB0ZXN0ZWQgb24gYWxsIHRoZSBTVCBib2FyZHMgYmFzZWQgb24gU1RiNzEwOSBhbmQgc3R4NzIwMCBTb0NzLgorCisgIERXQyBFdGhlciBNQUMgMTAvMTAwIFVuaXZlcnNhbCB2ZXJzaW9uIDQuMCBoYXMgYmVlbiB1c2VkIGZvciBkZXZlbG9waW5nCisgIHRoaXMgY29kZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtYWMxMDAuaCIKKworI3VuZGVmIE1BQzEwMF9ERUJVRworLyojZGVmaW5lIE1BQzEwMF9ERUJVRyovCisjaWZkZWYgTUFDMTAwX0RFQlVHCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBtYWMxMDBfY29yZV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCXdyaXRlbCgodmFsdWUgfCBNQUNfQ09SRV9JTklUKSwgaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwl3cml0ZWwoRVRIX1BfODAyMVEsIGlvYWRkciArIE1BQ19WTEFOMSk7CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9kdW1wX21hY19yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXByX2luZm8oIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCSAgICAgICAiXHQgIE1BQzEwMCBDU1IgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgorCSAgICAgICAiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KWlvYWRkcik7CisJcHJfaW5mbygiXHRjb250cm9sIHJlZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19DT05UUk9MLAorCSAgICAgICByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0YWRkciBISSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiAiLCBNQUNfQUREUl9ISUdILAorCSAgICAgICByZWFkbChpb2FkZHIgKyBNQUNfQUREUl9ISUdIKSk7CisJcHJfaW5mbygiXHRhZGRyIExPIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0FERFJfTE9XLAorCSAgICAgICByZWFkbChpb2FkZHIgKyBNQUNfQUREUl9MT1cpKTsKKwlwcl9pbmZvKCJcdG11bHRpY2FzdCBoYXNoIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJCU1BQ19IQVNIX0hJR0gsIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0hJR0gpKTsKKwlwcl9pbmZvKCJcdG11bHRpY2FzdCBoYXNoIExPIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJCU1BQ19IQVNIX0xPVywgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7CisJcHJfaW5mbygiXHRmbG93IGNvbnRyb2wgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNQUNfRkxPV19DVFJMLCByZWFkbChpb2FkZHIgKyBNQUNfRkxPV19DVFJMKSk7CisJcHJfaW5mbygiXHRWTEFOMSB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjEsCisJICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19WTEFOMSkpOworCXByX2luZm8oIlx0VkxBTjIgdGFnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX1ZMQU4yLAorCSAgICAgICByZWFkbChpb2FkZHIgKyBNQUNfVkxBTjIpKTsKKwlwcl9pbmZvKCJcblx0TUFDIG1hbmFnZW1lbnQgY291bnRlciByZWdpc3RlcnNcbiIpOworCXByX2luZm8oIlx0IE1NQyBjcnRsIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgICAgTU1DX0NPTlRST0wsIHJlYWRsKGlvYWRkciArIE1NQ19DT05UUk9MKSk7CisJcHJfaW5mbygiXHQgTU1DIEhpZ2ggSW50ZXJydXB0IChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgICAgTU1DX0hJR0hfSU5UUiwgcmVhZGwoaW9hZGRyICsgTU1DX0hJR0hfSU5UUikpOworCXByX2luZm8oIlx0IE1NQyBMb3cgSW50ZXJydXB0IChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgICAgTU1DX0xPV19JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfTE9XX0lOVFIpKTsKKwlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgTWFzayAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgICAgIE1NQ19ISUdIX0lOVFJfTUFTSywgcmVhZGwoaW9hZGRyICsgTU1DX0hJR0hfSU5UUl9NQVNLKSk7CisJcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgICAgIE1NQ19MT1dfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSykpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBtYWMxMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJLyogRW5hYmxlIEFwcGxpY2F0aW9uIEFjY2VzcyBieSB3cml0aW5nIHRvIERNQSBDU1IwICovCisJd3JpdGVsKERNQV9CVVNfTU9ERV9ERUZBVUxUIHwgKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSwKKwkgICAgICAgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKworCS8qIE1hc2sgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIENTUjcgKi8KKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBpb2FkZHIgKyBETUFfSU5UUl9FTkEpOworCisJLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUlgvVFggZGVzY3JpcHRvciBsaXN0cyBtdXN0IGJlIHdyaXR0ZW4gaW50bworCSAqIERNQSBDU1IzIGFuZCBDU1I0LCByZXNwZWN0aXZlbHkuICovCisJd3JpdGVsKGRtYV90eCwgaW9hZGRyICsgRE1BX1RYX0JBU0VfQUREUik7CisJd3JpdGVsKGRtYV9yeCwgaW9hZGRyICsgRE1BX1JDVl9CQVNFX0FERFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3JlIGFuZCBGb3J3YXJkIGNhcGFiaWxpdHkgaXMgbm90IHVzZWQgYXQgYWxsLi4KKyAqIFRoZSB0cmFuc21pdCB0aHJlc2hvbGQgY2FuIGJlIHByb2dyYW1tZWQgYnkKKyAqIHNldHRpbmcgdGhlIFRUQyBiaXRzIGluIHRoZSBETUEgY29udHJvbCByZWdpc3Rlci4qLworc3RhdGljIHZvaWQgbWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKKwkJCQkgICAgICBpbnQgcnhtb2RlKQoreworCXUzMiBjc3I2ID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJaWYgKHR4bW9kZSA8PSAzMikKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7CisJZWxzZSBpZiAodHhtb2RlIDw9IDY0KQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ182NDsKKwllbHNlCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzEyODsKKworCXdyaXRlbChjc3I2LCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCisJREJHKEtFUk5fREVCVUcgIk1BQzEwMCBETUEgQ1NSIFxuIik7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJcHJfZGVidWcoIlx0IENTUiVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJICAgICAgIChETUFfQlVTX01PREUgKyBpICogNCksCisJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBpICogNCkpOworCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgIERNQV9DVVJfVFhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfVFhfQlVGX0FERFIpKTsKKwlEQkcoS0VSTl9ERUJVRyAiXHQgQ1NSMjEgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICBETUFfQ1VSX1JYX0JVRl9BRERSLCByZWFkbChpb2FkZHIgKyBETUFfQ1VSX1JYX0JVRl9BRERSKSk7CisJcmV0dXJuOworfQorCisvKiBETUEgY29udHJvbGxlciBoYXMgdHdvIGNvdW50ZXJzIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YKKyAgIHRoZSByZWNlaXZlIG1pc3NlZCBmcmFtZXMuICovCitzdGF0aWMgdm9pZCBtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisJdTMyIGNzcjggPSByZWFkbChpb2FkZHIgKyBETUFfTUlTU0VEX0ZSQU1FX0NUUik7CisKKwlpZiAodW5saWtlbHkoY3NyOCkpIHsKKwkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRSkgeworCQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzICs9IDB4ODAwOworCQkJeC0+cnhfb3ZlcmZsb3dfY250ciArPSAweDgwMDsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBvdmVfY250cjsKKwkJCW92ZV9jbnRyID0gKChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkVfQ05UUikgPj4gMTcpOworCQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzICs9IG92ZV9jbnRyOworCQkJeC0+cnhfb3ZlcmZsb3dfY250ciArPSBvdmVfY250cjsKKwkJfQorCisJCWlmIChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkVfTSkgeworCQkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gMHhmZmZmOworCQkJeC0+cnhfbWlzc2VkX2NudHIgKz0gMHhmZmZmOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IG1pc3NfZiA9IChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9NX0NOVFIpOworCQkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gbWlzc19mOworCQkJeC0+cnhfbWlzc2VkX2NudHIgKz0gbWlzc19mOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICAgIHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5lcnJvcl9zdW1tYXJ5KSkgeworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHgudW5kZXJmbG93X2Vycm9yKSkgeworCQkJeC0+dHhfdW5kZXJmbG93Kys7CisJCQlzdGF0cy0+dHhfZmlmb19lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHgubm9fY2FycmllcikpIHsKKwkJCXgtPnR4X2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5sb3NzX2NhcnJpZXIpKSB7CisJCQl4LT50eF9sb3NzY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KChwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwpIHx8CisJCQkgICAgIChwLT5kZXMwMS50eC5leGNlc3NpdmVfY29sbGlzaW9ucykgfHwKKwkJCSAgICAgKHAtPmRlczAxLnR4LmxhdGVfY29sbGlzaW9uKSkpCisJCQlzdGF0cy0+Y29sbGlzaW9ucyArPSBwLT5kZXMwMS50eC5jb2xsaXNpb25fY291bnQ7CisJCXJldCA9IC0xOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwpKSB7CisJCXgtPnR4X2hlYXJ0YmVhdCsrOworCQlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQlyZXQgPSAtMTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmRlZmVycmVkKSkKKwkJeC0+dHhfZGVmZXJyZWQrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5idWZmZXIxX3NpemU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgaWYgZWFjaCBpbmNvbWluZyBmcmFtZSBoYXMgc29tZSBlcnJvcnMKKyAqIGFuZCwgaWYgcmVxdWlyZWQsIHVwZGF0ZXMgdGhlIG11bHRpY2FzdCBzdGF0aXN0aWNzLgorICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCByZXR1cm5zIGNzdW1fbm9uZSBiZWNhc3VlIHRoZSBkZXZpY2UKKyAqIGlzIG5vdCBhYmxlIHRvIGNvbXB1dGUgdGhlIGNzdW0gaW4gSFcuICovCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCByZXQgPSBjc3VtX25vbmU7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5sYXN0X2Rlc2NyaXB0b3IgPT0gMCkpIHsKKwkJcHJfd2FybmluZygibWFjMTAwIEVycm9yOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgorCQkJICAgImZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVyc1xuIik7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldHVybiBkaXNjYXJkX2ZyYW1lOworCX0KKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5lcnJvcl9zdW1tYXJ5KSkgeworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZGVzY3JpcHRvcl9lcnJvcikpCisJCQl4LT5yeF9kZXNjKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5wYXJ0aWFsX2ZyYW1lX2Vycm9yKSkKKwkJCXgtPnJ4X3BhcnRpYWwrKzsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnJ1bl9mcmFtZSkpCisJCQl4LT5yeF9ydW50Kys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5mcmFtZV90b29fbG9uZykpCisJCQl4LT5yeF90b29sb25nKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5jb2xsaXNpb24pKSB7CisJCQl4LT5yeF9jb2xsaXNpb24rKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNyY19lcnJvcikpIHsKKwkJCXgtPnJ4X2NyYysrOworCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJfQorCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZHJpYmJsaW5nKSkKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5sZW5ndGhfZXJyb3IpKSB7CisJCXgtPnJ4X2xlbmdodCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubWlpX2Vycm9yKSkgeworCQl4LT5yeF9taWkrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHAtPmRlczAxLnJ4Lm11bHRpY2FzdF9mcmFtZSkgeworCQl4LT5yeF9tdWx0aWNhc3QrKzsKKwkJc3RhdHMtPm11bHRpY2FzdCsrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfaXJxX3N0YXR1cyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9zZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX3NldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIE1BQ19BRERSX0hJR0gsIE1BQ19BRERSX0xPVyk7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX2dldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIE1BQ19BRERSX0hJR0gsIE1BQ19BRERSX0xPVyk7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BSOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyB8CisJCQkgICBNQUNfQ09OVFJPTF9IUCk7CisJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BNOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0xPVyk7CisJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDApIHsJLyogbm8gbXVsdGljYXN0ICovCisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGIHwKKwkJCSAgIE1BQ19DT05UUk9MX0hPIHwgTUFDX0NPTlRST0xfSFApOworCX0gZWxzZSB7CisJCWludCBpOworCQl1MzIgbWNfZmlsdGVyWzJdOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKworCQkvKiBQZXJmZWN0IGZpbHRlciBtb2RlIGZvciBwaHlzaWNhbCBhZGRyZXNzIGFuZCBIYXNoCisJCSAgIGZpbHRlciBmb3IgbXVsdGljYXN0ICovCisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX0hQOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRgorCQkJICAgfCBNQUNfQ09OVFJPTF9ITyk7CisKKwkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJCSAgICAgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJLyogVGhlIHVwcGVyIDYgYml0cyBvZiB0aGUgY2FsY3VsYXRlZCBDUkMgYXJlIHVzZWQgdG8KKwkJCSAqIGluZGV4IHRoZSBjb250ZW5zIG9mIHRoZSBoYXNoIHRhYmxlICovCisJCQlpbnQgYml0X25yID0KKwkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCisJCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAorCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KKwkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOworCQl9CisJCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIE1BQ19IQVNIX0xPVyk7CisJCXdyaXRlbChtY19maWx0ZXJbMV0sIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOworCX0KKworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisJREJHKEtFUk5fSU5GTyAiJXM6IENUUkwgcmVnOiAweCUwOHggSGFzaCByZWdzOiAiCisJICAgICJISSAweCUwOHgsIExPIDB4JTA4eFxuIiwKKwkgICAgX19mdW5jX18sIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCksIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0xPVykpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZjLCB1bnNpZ25lZCBpbnQgcGF1c2VfdGltZSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxvdyA9IE1BQ19GTE9XX0NUUkxfRU5BQkxFOworCisJaWYgKGR1cGxleCkKKwkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBNQUNfRkxPV19DVFJMX1BUX1NISUZUKTsKKwl3cml0ZWwoZmxvdywgaW9hZGRyICsgTUFDX0ZMT1dfQ1RSTCk7CisKKwlyZXR1cm47Cit9CisKKy8qIE5vIFBNVCBtb2R1bGUgc3VwcG9ydGVkIGluIG91ciBTb0MgIGZvciB0aGUgRXRoZXJuZXQgQ29udHJvbGxlci4gKi8KK3N0YXRpYyB2b2lkIG1hYzEwMF9wbXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9pbml0X3J4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAorCQkJCWludCBkaXNhYmxlX3J4X2ljKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS5yeC5vd24gPSAxOworCQlwLT5kZXMwMS5yeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV8yS2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLnJ4LmVuZF9yaW5nID0gMTsKKwkJaWYgKGRpc2FibGVfcnhfaWMpCisJCQlwLT5kZXMwMS5yeC5kaXNhYmxlX2ljID0gMTsKKwkJcCsrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9pbml0X3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS50eC5vd24gPSAwOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEudHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHgub3duOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5yeC5vd247Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9zZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4Lm93biA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudDsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3JlbGVhc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHRlciA9IHAtPmRlczAxLnR4LmVuZF9yaW5nOworCisJLyogY2xlYW4gZmllbGQgdXNlZCB3aXRoaW4gdGhlIHhtaXQgKi8KKwlwLT5kZXMwMS50eC5maXJzdF9zZWdtZW50ID0gMDsKKwlwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQgPSAwOworCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IDA7CisKKwkvKiBjbGVhbiBzdGF0dXMgcmVwb3J0ZWQgKi8KKwlwLT5kZXMwMS50eC5lcnJvcl9zdW1tYXJ5ID0gMDsKKwlwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IgPSAwOworCXAtPmRlczAxLnR4Lm5vX2NhcnJpZXIgPSAwOworCXAtPmRlczAxLnR4Lmxvc3NfY2FycmllciA9IDA7CisJcC0+ZGVzMDEudHguZXhjZXNzaXZlX2RlZmVycmFsID0gMDsKKwlwLT5kZXMwMS50eC5leGNlc3NpdmVfY29sbGlzaW9ucyA9IDA7CisJcC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24gPSAwOworCXAtPmRlczAxLnR4LmhlYXJ0YmVhdF9mYWlsID0gMDsKKwlwLT5kZXMwMS50eC5kZWZlcnJlZCA9IDA7CisKKwkvKiBzZXQgdGVybWluYXRpb24gZmllbGQgKi8KKwlwLT5kZXMwMS50eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgICBpbnQgY3N1bV9mbGFnKQoreworCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKKwlwLT5kZXMwMS50eC5idWZmZXIxX3NpemUgPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHguaW50ZXJydXB0ID0gMDsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2Nsb3NlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDE7CisJcC0+ZGVzMDEudHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnJ4LmZyYW1lX2xlbmd0aDsKK30KKworc3RydWN0IHN0bW1hY19vcHMgbWFjMTAwX2RyaXZlciA9IHsKKwkuY29yZV9pbml0ID0gbWFjMTAwX2NvcmVfaW5pdCwKKwkuZHVtcF9tYWNfcmVncyA9IG1hYzEwMF9kdW1wX21hY19yZWdzLAorCS5kbWFfaW5pdCA9IG1hYzEwMF9kbWFfaW5pdCwKKwkuZHVtcF9kbWFfcmVncyA9IG1hYzEwMF9kdW1wX2RtYV9yZWdzLAorCS5kbWFfbW9kZSA9IG1hYzEwMF9kbWFfb3BlcmF0aW9uX21vZGUsCisJLmRtYV9kaWFnbm9zdGljX2ZyID0gbWFjMTAwX2RtYV9kaWFnbm9zdGljX2ZyLAorCS50eF9zdGF0dXMgPSBtYWMxMDBfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKKwkucnhfc3RhdHVzID0gbWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXMsCisJLmdldF90eF9sZW4gPSBtYWMxMDBfZ2V0X3R4X2xlbiwKKwkuc2V0X2ZpbHRlciA9IG1hYzEwMF9zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBtYWMxMDBfZmxvd19jdHJsLAorCS5wbXQgPSBtYWMxMDBfcG10LAorCS5pbml0X3J4X2Rlc2MgPSBtYWMxMDBfaW5pdF9yeF9kZXNjLAorCS5pbml0X3R4X2Rlc2MgPSBtYWMxMDBfaW5pdF90eF9kZXNjLAorCS5nZXRfdHhfb3duZXIgPSBtYWMxMDBfZ2V0X3R4X293bmVyLAorCS5nZXRfcnhfb3duZXIgPSBtYWMxMDBfZ2V0X3J4X293bmVyLAorCS5yZWxlYXNlX3R4X2Rlc2MgPSBtYWMxMDBfcmVsZWFzZV90eF9kZXNjLAorCS5wcmVwYXJlX3R4X2Rlc2MgPSBtYWMxMDBfcHJlcGFyZV90eF9kZXNjLAorCS5jbGVhcl90eF9pYyA9IG1hYzEwMF9jbGVhcl90eF9pYywKKwkuY2xvc2VfdHhfZGVzYyA9IG1hYzEwMF9jbG9zZV90eF9kZXNjLAorCS5nZXRfdHhfbHMgPSBtYWMxMDBfZ2V0X3R4X2xzLAorCS5zZXRfdHhfb3duZXIgPSBtYWMxMDBfc2V0X3R4X293bmVyLAorCS5zZXRfcnhfb3duZXIgPSBtYWMxMDBfc2V0X3J4X293bmVyLAorCS5nZXRfcnhfZnJhbWVfbGVuID0gbWFjMTAwX2dldF9yeF9mcmFtZV9sZW4sCisJLmhvc3RfaXJxX3N0YXR1cyA9IG1hYzEwMF9pcnFfc3RhdHVzLAorCS5zZXRfdW1hY19hZGRyID0gbWFjMTAwX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBtYWMxMDBfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzEwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisKKwltYWMgPSBremFsbG9jKHNpemVvZihjb25zdCBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlwcl9pbmZvKCJcdE1BQyAxMC8xMDBcbiIpOworCisJbWFjLT5vcHMgPSAmbWFjMTAwX2RyaXZlcjsKKwltYWMtPmh3LnBtdCA9IFBNVF9OT1RfU1VQUE9SVEVEOworCW1hYy0+aHcubGluay5wb3J0ID0gTUFDX0NPTlRST0xfUFM7CisJbWFjLT5ody5saW5rLmR1cGxleCA9IE1BQ19DT05UUk9MX0Y7CisJbWFjLT5ody5saW5rLnNwZWVkID0gMDsKKwltYWMtPmh3Lm1paS5hZGRyID0gTUFDX01JSV9BRERSOworCW1hYy0+aHcubWlpLmRhdGEgPSBNQUNfTUlJX0RBVEE7CisKKwlyZXR1cm4gbWFjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGYxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIE1BQyAxMC8xMDAgSGVhZGVyIEZpbGUKKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkgCQkJTUFDIEJMT0NLIGRlZmluZXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1BQyBDU1Igb2Zmc2V0ICovCisjZGVmaW5lIE1BQ19DT05UUk9MCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX0FERFJfSElHSAkweDAwMDAwMDA0CS8qIE1BQyBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgTUFDX0FERFJfTE9XCTB4MDAwMDAwMDgJLyogTUFDIEFkZHJlc3MgTG93ICovCisjZGVmaW5lIE1BQ19IQVNIX0hJR0gJMHgwMDAwMDAwYwkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCisjZGVmaW5lIE1BQ19IQVNIX0xPVwkweDAwMDAwMDEwCS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIExvdyAqLworI2RlZmluZSBNQUNfTUlJX0FERFIJMHgwMDAwMDAxNAkvKiBNSUkgQWRkcmVzcyAqLworI2RlZmluZSBNQUNfTUlJX0RBVEEJMHgwMDAwMDAxOAkvKiBNSUkgRGF0YSAqLworI2RlZmluZSBNQUNfRkxPV19DVFJMCTB4MDAwMDAwMWMJLyogRmxvdyBDb250cm9sICovCisjZGVmaW5lIE1BQ19WTEFOMQkweDAwMDAwMDIwCS8qIFZMQU4xIFRhZyAqLworI2RlZmluZSBNQUNfVkxBTjIJMHgwMDAwMDAyNAkvKiBWTEFOMiBUYWcgKi8KKworLyogTUFDIENUUkwgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9SQQkweDgwMDAwMDAwCS8qIFJlY2VpdmUgQWxsIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQkxFCTB4NDAwMDAwMDAJLyogRW5kaWFuIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfSEJECTB4MTAwMDAwMDAJLyogSGVhcnRiZWF0IERpc2FibGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUFMJMHgwODAwMDAwMAkvKiBQb3J0IFNlbGVjdCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9EUk8JMHgwMDgwMDAwMAkvKiBEaXNhYmxlIFJlY2VpdmUgT3duICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0VYVF9MT09QQkFDSyAweDAwNDAwMDAwCS8qIFJlc2VydmVkIChleHQgbG9vcGJhY2s/KSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9PTQkweDAwMjAwMDAwCS8qIExvb3BiYWNrIE9wZXJhdGluZyBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0YJMHgwMDEwMDAwMAkvKiBGdWxsIER1cGxleCBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1BNCTB4MDAwODAwMDAJLyogUGFzcyBBbGwgTXVsdGljYXN0ICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1BSCTB4MDAwNDAwMDAJLyogUHJvbWlzY3VvdXMgTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9JRgkweDAwMDIwMDAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1BCCTB4MDAwMTAwMDAJLyogUGFzcyBCYWQgRnJhbWVzICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0hPCTB4MDAwMDgwMDAJLyogSGFzaCBPbmx5IEZpbHRlcmluZyBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0hQCTB4MDAwMDIwMDAJLyogSGFzaC9QZXJmZWN0IEZpbHRlcmluZyBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0xDQwkweDAwMDAxMDAwCS8qIExhdGUgQ29sbGlzaW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfREJGCTB4MDAwMDA4MDAJLyogRGlzYWJsZSBCcm9hZGNhc3QgRnJhbWVzICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0RSVFkJMHgwMDAwMDQwMAkvKiBEaXNhYmxlIFJldHJ5ICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0FTVFAJMHgwMDAwMDEwMAkvKiBBdXRvbWF0aWMgUGFkIFN0cmlwcGluZyAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9CT0xNVF8xMAkweDAwMDAwMDAwCS8qIEJhY2sgT2ZmIExpbWl0IDEwICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0JPTE1UXzgJMHgwMDAwMDA0MAkvKiBCYWNrIE9mZiBMaW1pdCA4ICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0JPTE1UXzQJMHgwMDAwMDA4MAkvKiBCYWNrIE9mZiBMaW1pdCA0ICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0JPTE1UXzEJMHgwMDAwMDBjMAkvKiBCYWNrIE9mZiBMaW1pdCAxICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0RDCQkweDAwMDAwMDIwCS8qIERlZmVycmFsIENoZWNrICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1RFCQkweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9SRQkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KKworI2RlZmluZSBNQUNfQ09SRV9JTklUIChNQUNfQ09OVFJPTF9IQkQgfCBNQUNfQ09OVFJPTF9BU1RQKQorCisvKiBNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTF9QVF9NQVNLCTB4ZmZmZjAwMDAJLyogUGF1c2UgVGltZSBNYXNrICovCisjZGVmaW5lIE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQJMTYKKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTF9QQVNTCTB4MDAwMDAwMDQJLyogUGFzcyBDb250cm9sIEZyYW1lcyAqLworI2RlZmluZSBNQUNfRkxPV19DVFJMX0VOQUJMRQkweDAwMDAwMDAyCS8qIEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTF9QQVVTRQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLworCisvKiBNSUkgQUREUiAgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KKyNkZWZpbmUgTUFDX01JSV9BRERSX0JVU1kJMHgwMDAwMDAwMQkvKiBNSUkgQnVzeSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAkJCQlETUEgQkxPQ0sgZGVmaW5lcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBETUEgQnVzIE1vZGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQlVTX01PREVfREJPCTB4MDAxMDAwMDAJLyogRGVzY3JpcHRvciBCeXRlIE9yZGVyaW5nICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9CTEUJMHgwMDAwMDA4MAkvKiBCaWcgRW5kaWFuL0xpdHRsZSBFbmRpYW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9NQVNLCTB4MDAwMDNmMDAJLyogUHJvZ3JhbW1hYmxlIEJ1cnN0IExlbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX1NISUZUCTgKKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLworI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9CQVJfQlVTCTB4MDAwMDAwMDIJLyogQmFyLUJ1cyBBcmJpdHJhdGlvbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfU0ZUX1JFU0VUCTB4MDAwMDAwMDEJLyogU29mdHdhcmUgUmVzZXQgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RFRkFVTFQJMHgwMDAwMDAwMAorCisvKiBETUEgQ29udHJvbCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9DT05UUk9MX1NGCQkweDAwMjAwMDAwCS8qIFN0b3JlIEFuZCBGb3J3YXJkICovCisKKy8qIFRyYW5zbWl0IFRocmVzaG9sZCBDb250cm9sICovCitlbnVtIHR0Y19jb250cm9sIHsKKwlETUFfQ09OVFJPTF9UVENfREVGQVVMVCA9IDB4MDAwMDAwMDAsCS8qIFRocmVzaG9sZCBpcyAzMiBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfNjQgPSAweDAwMDA0MDAwLAkvKiBUaHJlc2hvbGQgaXMgNjQgRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDgwMDAsCS8qIFRocmVzaG9sZCBpcyAxMjggRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCS8qIFRocmVzaG9sZCBpcyAyNTYgRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzE4ID0gMHgwMDQwMDAwMCwJLyogVGhyZXNob2xkIGlzIDE4IERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDA0MDQwMDAsCS8qIFRocmVzaG9sZCBpcyAyNCBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwNDA4MDAwLAkvKiBUaHJlc2hvbGQgaXMgMzIgRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDQwYzAwMCwJLyogVGhyZXNob2xkIGlzIDQwIERXT1JEUyAqLworCURNQV9DT05UUk9MX1NFID0gMHgwMDAwMDAwOCwJLyogU3RvcCBPbiBFbXB0eSAqLworCURNQV9DT05UUk9MX09TRiA9IDB4MDAwMDAwMDQsCS8qIE9wZXJhdGUgT24gMm5kIEZyYW1lICovCit9OworCisvKiBTVE1BQzExMCBETUEgTWlzc2VkIEZyYW1lIENvdW50ZXIgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX09WRQkweDEwMDAwMDAwCS8qIEZJRk8gT3ZlcmZsb3cgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9PVkVfQ05UUiAweDBmZmUwMDAwCS8qIE92ZXJmbG93IEZyYW1lIENvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9PVkVfTQkweDAwMDEwMDAwCS8qIE1pc3NlZCBGcmFtZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX01fQ05UUgkweDAwMDBmZmZmCS8qIE1pc3NlZCBGcmFtZSBDb3VpbnRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMmVhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSJPY3RfMDkiCisKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKyNkZWZpbmUgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKyNpbmNsdWRlICJzdG1tYWNfdGltZXIuaCIKKyNlbmRpZgorCitzdHJ1Y3Qgc3RtbWFjX3ByaXYgeworCS8qIEZyZXF1ZW50bHkgdXNlZCB2YWx1ZXMgYXJlIGtlcHQgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdCAqLworCXN0cnVjdCBkbWFfZGVzYyAqZG1hX3R4IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwlkbWFfYWRkcl90IGRtYV90eF9waHk7CisJc3RydWN0IHNrX2J1ZmYgKip0eF9za2J1ZmY7CisJdW5zaWduZWQgaW50IGN1cl90eDsKKwl1bnNpZ25lZCBpbnQgZGlydHlfdHg7CisJdW5zaWduZWQgaW50IGRtYV90eF9zaXplOworCWludCB0eF9jb2U7CisJaW50IHR4X2NvYWxlc2NlOworCisJc3RydWN0IGRtYV9kZXNjICpkbWFfcnggOworCXVuc2lnbmVkIGludCBjdXJfcng7CisJdW5zaWduZWQgaW50IGRpcnR5X3J4OworCXN0cnVjdCBza19idWZmICoqcnhfc2tidWZmOworCWRtYV9hZGRyX3QgKnJ4X3NrYnVmZl9kbWE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOworCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgaXNfZ21hYzsKKwlkbWFfYWRkcl90IGRtYV9yeF9waHk7CisJdW5zaWduZWQgaW50IGRtYV9yeF9zaXplOworCWludCByeF9jc3VtOworCXVuc2lnbmVkIGludCBkbWFfYnVmX3N6OworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWNfdHlwZTsKKworCXN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgeHN0YXRzOworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCisJcGh5X2ludGVyZmFjZV90IHBoeV9pbnRlcmZhY2U7CisJaW50IHBibDsKKwlpbnQgYnVzX2lkOworCWludCBwaHlfYWRkcjsKKwlpbnQgcGh5X21hc2s7CisJaW50ICgqcGh5X3Jlc2V0KSAodm9pZCAqcHJpdik7CisJdm9pZCAoKmZpeF9tYWNfc3BlZWQpICh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOworCXZvaWQgKmJzcF9wcml2OworCisJaW50IHBoeV9pcnE7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwlpbnQgb2xkbGluazsKKwlpbnQgc3BlZWQ7CisJaW50IG9sZGR1cGxleDsKKwl1bnNpZ25lZCBpbnQgZmxvd19jdHJsOworCXVuc2lnbmVkIGludCBwYXVzZTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbWlpOworCisJdTMyIG1zZ19lbmFibGU7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCB3b2xvcHRzOworCWludCB3b2xlbmFibGVkOworCWludCBzaHV0ZG93bjsKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJc3RydWN0IHN0bW1hY190aW1lciAqdG07CisjZW5kaWYKKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKyNlbmRpZgorfTsKKworZXh0ZXJuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK2V4dGVybiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0ZWJlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCkBAIC0wLDAgKzEsMzk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBTVE1NQUMgRXRodG9vbCBzdXBwb3J0CisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgInN0bW1hYy5oIgorCisjZGVmaW5lIFJFR19TUEFDRV9TSVpFCTB4MTA1NAorI2RlZmluZSBNQUMxMDBfRVRIVE9PTF9OQU1FCSJzdF9tYWMxMDAiCisjZGVmaW5lIEdNQUNfRVRIVE9PTF9OQU1FCSJzdF9nbWFjIgorCitzdHJ1Y3Qgc3RtbWFjX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBzdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgU1RNTUFDX1NUQVQobSkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzLCBtKSwJXAorCW9mZnNldG9mKHN0cnVjdCBzdG1tYWNfcHJpdiwgeHN0YXRzLm0pfQorCitzdGF0aWMgY29uc3Qgc3RydWN0ICBzdG1tYWNfc3RhdHMgc3RtbWFjX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJU1RNTUFDX1NUQVQodHhfdW5kZXJmbG93KSwKKwlTVE1NQUNfU1RBVCh0eF9jYXJyaWVyKSwKKwlTVE1NQUNfU1RBVCh0eF9sb3NzY2FycmllciksCisJU1RNTUFDX1NUQVQodHhfaGVhcnRiZWF0KSwKKwlTVE1NQUNfU1RBVCh0eF9kZWZlcnJlZCksCisJU1RNTUFDX1NUQVQodHhfdmxhbiksCisJU1RNTUFDX1NUQVQocnhfdmxhbiksCisJU1RNTUFDX1NUQVQodHhfamFiYmVyKSwKKwlTVE1NQUNfU1RBVCh0eF9mcmFtZV9mbHVzaGVkKSwKKwlTVE1NQUNfU1RBVCh0eF9wYXlsb2FkX2Vycm9yKSwKKwlTVE1NQUNfU1RBVCh0eF9pcF9oZWFkZXJfZXJyb3IpLAorCVNUTU1BQ19TVEFUKHJ4X2Rlc2MpLAorCVNUTU1BQ19TVEFUKHJ4X3BhcnRpYWwpLAorCVNUTU1BQ19TVEFUKHJ4X3J1bnQpLAorCVNUTU1BQ19TVEFUKHJ4X3Rvb2xvbmcpLAorCVNUTU1BQ19TVEFUKHJ4X2NvbGxpc2lvbiksCisJU1RNTUFDX1NUQVQocnhfY3JjKSwKKwlTVE1NQUNfU1RBVChyeF9sZW5naHQpLAorCVNUTU1BQ19TVEFUKHJ4X21paSksCisJU1RNTUFDX1NUQVQocnhfbXVsdGljYXN0KSwKKwlTVE1NQUNfU1RBVChyeF9nbWFjX292ZXJmbG93KSwKKwlTVE1NQUNfU1RBVChyeF93YXRjaGRvZyksCisJU1RNTUFDX1NUQVQoZGFfcnhfZmlsdGVyX2ZhaWwpLAorCVNUTU1BQ19TVEFUKHNhX3J4X2ZpbHRlcl9mYWlsKSwKKwlTVE1NQUNfU1RBVChyeF9taXNzZWRfY250ciksCisJU1RNTUFDX1NUQVQocnhfb3ZlcmZsb3dfY250ciksCisJU1RNTUFDX1NUQVQodHhfdW5kZWZsb3dfaXJxKSwKKwlTVE1NQUNfU1RBVCh0eF9wcm9jZXNzX3N0b3BwZWRfaXJxKSwKKwlTVE1NQUNfU1RBVCh0eF9qYWJiZXJfaXJxKSwKKwlTVE1NQUNfU1RBVChyeF9vdmVyZmxvd19pcnEpLAorCVNUTU1BQ19TVEFUKHJ4X2J1Zl91bmF2X2lycSksCisJU1RNTUFDX1NUQVQocnhfcHJvY2Vzc19zdG9wcGVkX2lycSksCisJU1RNTUFDX1NUQVQocnhfd2F0Y2hkb2dfaXJxKSwKKwlTVE1NQUNfU1RBVCh0eF9lYXJseV9pcnEpLAorCVNUTU1BQ19TVEFUKGZhdGFsX2J1c19lcnJvcl9pcnEpLAorCVNUTU1BQ19TVEFUKHRocmVzaG9sZCksCisJU1RNTUFDX1NUQVQodHhfcGt0X24pLAorCVNUTU1BQ19TVEFUKHJ4X3BrdF9uKSwKKwlTVE1NQUNfU1RBVChwb2xsX24pLAorCVNUTU1BQ19TVEFUKHNjaGVkX3RpbWVyX24pLAorCVNUTU1BQ19TVEFUKG5vcm1hbF9pcnFfbiksCit9OworI2RlZmluZSBTVE1NQUNfU1RBVFNfTEVOIEFSUkFZX1NJWkUoc3RtbWFjX2dzdHJpbmdzX3N0YXRzKQorCit2b2lkIHN0bW1hY19ldGh0b29sX2dldGRydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIXByaXYtPmlzX2dtYWMpCisJCXN0cmNweShpbmZvLT5kcml2ZXIsIE1BQzEwMF9FVEhUT09MX05BTUUpOworCWVsc2UKKwkJc3RyY3B5KGluZm8tPmRyaXZlciwgR01BQ19FVEhUT09MX05BTUUpOworCisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9NT0RVTEVfVkVSU0lPTik7CisJaW5mby0+ZndfdmVyc2lvblswXSA9ICdcMCc7CisJaW5mby0+bl9zdGF0cyA9IFNUTU1BQ19TVEFUU19MRU47CisJcmV0dXJuOworfQorCitpbnQgc3RtbWFjX2V0aHRvb2xfZ2V0c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gcHJpdi0+cGh5ZGV2OworCWludCByYzsKKwlpZiAocGh5ID09IE5VTEwpIHsKKwkJcHJfZXJyKCIlczogJXM6IFBIWSBpcyBub3QgcmVnaXN0ZXJlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcHJfZXJyKCIlczogaW50ZXJmYWNlIGlzIGRpc2FibGVkOiB3ZSBjYW5ub3QgdHJhY2sgIgorCQkibGluayBzcGVlZCAvIGR1cGxleCBzZXR0aW5nXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlyYyA9IHBoeV9ldGh0b29sX2dzZXQocGh5LCBjbWQpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCitpbnQgc3RtbWFjX2V0aHRvb2xfc2V0c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gcHJpdi0+cGh5ZGV2OworCWludCByYzsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJcmMgPSBwaHlfZXRodG9vbF9zc2V0KHBoeSwgY21kKTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3UzMiBzdG1tYWNfZXRodG9vbF9nZXRtc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIHByaXYtPm1zZ19lbmFibGU7Cit9CisKK3ZvaWQgc3RtbWFjX2V0aHRvb2xfc2V0bXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcHJpdi0+bXNnX2VuYWJsZSA9IGxldmVsOworCit9CisKK2ludCBzdG1tYWNfY2hlY2tfaWZfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCXJldHVybiAwOworfQorCitpbnQgc3RtbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIFJFR19TUEFDRV9TSVpFOworfQorCit2b2lkIHN0bW1hY19ldGh0b29sX2dyZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnNwYWNlKQoreworCWludCBpOworCXUzMiAqcmVnX3NwYWNlID0gKHUzMiAqKSBzcGFjZTsKKworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwltZW1zZXQocmVnX3NwYWNlLCAweDAsIFJFR19TUEFDRV9TSVpFKTsKKworCWlmICghcHJpdi0+aXNfZ21hYykgeworCQkvKiBNQUMgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQorCQkJcmVnX3NwYWNlW2ldID0gcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyAoaSAqIDQpKTsKKwkJLyogRE1BIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQkJcmVnX3NwYWNlW2kgKyAxMl0gPQorCQkJICAgIHJlYWRsKGRldi0+YmFzZV9hZGRyICsgKERNQV9CVVNfTU9ERSArIChpICogNCkpKTsKKwkJcmVnX3NwYWNlWzIyXSA9IHJlYWRsKGRldi0+YmFzZV9hZGRyICsgRE1BX0NVUl9UWF9CVUZfQUREUik7CisJCXJlZ19zcGFjZVsyM10gPSByZWFkbChkZXYtPmJhc2VfYWRkciArIERNQV9DVVJfUlhfQlVGX0FERFIpOworCX0gZWxzZSB7CisJCS8qIE1BQyByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDU1OyBpKyspCisJCQlyZWdfc3BhY2VbaV0gPSByZWFkbChkZXYtPmJhc2VfYWRkciArIChpICogNCkpOworCQkvKiBETUEgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKQorCQkJcmVnX3NwYWNlW2kgKyA1NV0gPQorCQkJICAgIHJlYWRsKGRldi0+YmFzZV9hZGRyICsgKERNQV9CVVNfTU9ERSArIChpICogNCkpKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK2ludCBzdG1tYWNfZXRodG9vbF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlpZiAoZGF0YSkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJZWxzZQorCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0hXX0NTVU07CisKKwlyZXR1cm4gMDsKK30KKwordTMyIHN0bW1hY19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBwcml2LT5yeF9jc3VtOworfQorCitzdGF0aWMgdm9pZAorc3RtbWFjX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJcGF1c2UtPnJ4X3BhdXNlID0gMDsKKwlwYXVzZS0+dHhfcGF1c2UgPSAwOworCXBhdXNlLT5hdXRvbmVnID0gcHJpdi0+cGh5ZGV2LT5hdXRvbmVnOworCisJaWYgKHByaXYtPmZsb3dfY3RybCAmIEZMT1dfUlgpCisJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CisJaWYgKHByaXYtPmZsb3dfY3RybCAmIEZMT1dfVFgpCisJCXBhdXNlLT50eF9wYXVzZSA9IDE7CisKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50CitzdG1tYWNfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gcHJpdi0+cGh5ZGV2OworCWludCBuZXdfcGF1c2UgPSBGTE9XX09GRjsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAocGF1c2UtPnJ4X3BhdXNlKQorCQluZXdfcGF1c2UgfD0gRkxPV19SWDsKKwlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQluZXdfcGF1c2UgfD0gRkxPV19UWDsKKworCXByaXYtPmZsb3dfY3RybCA9IG5ld19wYXVzZTsKKworCWlmIChwaHktPmF1dG9uZWcpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJc3RydWN0IGV0aHRvb2xfY21kIGNtZDsKKwkJCS8qIGF1dG8tbmVnb3RpYXRpb24gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgKi8KKwkJCWNtZC5jbWQgPSBFVEhUT09MX05XQVlfUlNUOworCQkJY21kLnN1cHBvcnRlZCA9IHBoeS0+c3VwcG9ydGVkOworCQkJY21kLmFkdmVydGlzaW5nID0gcGh5LT5hZHZlcnRpc2luZzsKKwkJCWNtZC5hdXRvbmVnID0gcGh5LT5hdXRvbmVnOworCQkJY21kLnNwZWVkID0gcGh5LT5zcGVlZDsKKwkJCWNtZC5kdXBsZXggPSBwaHktPmR1cGxleDsKKwkJCWNtZC5waHlfYWRkcmVzcyA9IHBoeS0+YWRkcjsKKwkJCXJldCA9IHBoeV9ldGh0b29sX3NzZXQocGh5LCAmY21kKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmV0ZGV2LT5iYXNlX2FkZHI7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAorCQkJCQkgICAgICAgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CisJfQorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmR1bW15LCB1NjQgKmRhdGEpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCBpOworCisJLyogVXBkYXRlIEhXIHN0YXRzIGlmIHN1cHBvcnRlZCAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9kaWFnbm9zdGljX2ZyKCZkZXYtPnN0YXRzLCAmcHJpdi0+eHN0YXRzLAorCQkJCQkgICAgICAgaW9hZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCBTVE1NQUNfU1RBVFNfTEVOOyBpKyspIHsKKwkJY2hhciAqcCA9IChjaGFyICopcHJpdiArIHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKKwkJZGF0YVtpXSA9IChzdG1tYWNfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KKwkJc2l6ZW9mKHU2NCkpID8gKCoodTY0ICopcCkgOiAoKih1MzIgKilwKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBzc2V0KQoreworCXN3aXRjaCAoc3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gU1RNTUFDX1NUQVRTX0xFTjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCit7CisJaW50IGk7CisJdTggKnAgPSBkYXRhOworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpID0gMDsgaSA8IFNUTU1BQ19TVEFUU19MRU47IGkrKykgeworCQkJbWVtY3B5KHAsIHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0cmluZywKKwkJCQlFVEhfR1NUUklOR19MRU4pOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBXT0wgdGhyb3VnaCBNYWdpYyBwYWNrZXQuICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9TVVBQT1JURUQpIHsKKwkJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDOworCQl3b2wtPndvbG9wdHMgPSBwcml2LT53b2xvcHRzOworCX0KKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworfQorCitzdGF0aWMgaW50IHN0bW1hY19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzdXBwb3J0ID0gV0FLRV9NQUdJQzsKKworCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9OT1RfU1VQUE9SVEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+c3VwcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod29sLT53b2xvcHRzID09IDApCisJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShwcml2LT5kZXZpY2UsIDApOworCWVsc2UKKwkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHByaXYtPmRldmljZSwgMSk7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlwcml2LT53b2xvcHRzID0gd29sLT53b2xvcHRzOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzdG1tYWNfZXRodG9vbF9vcHMgPSB7CisJLmJlZ2luID0gc3RtbWFjX2NoZWNrX2lmX3J1bm5pbmcsCisJLmdldF9kcnZpbmZvID0gc3RtbWFjX2V0aHRvb2xfZ2V0ZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzID0gc3RtbWFjX2V0aHRvb2xfZ2V0c2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHN0bW1hY19ldGh0b29sX3NldHNldHRpbmdzLAorCS5nZXRfbXNnbGV2ZWwgPSBzdG1tYWNfZXRodG9vbF9nZXRtc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsID0gc3RtbWFjX2V0aHRvb2xfc2V0bXNnbGV2ZWwsCisJLmdldF9yZWdzID0gc3RtbWFjX2V0aHRvb2xfZ3JlZ3MsCisJLmdldF9yZWdzX2xlbiA9IHN0bW1hY19ldGh0b29sX2dldF9yZWdzX2xlbiwKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfcnhfY3N1bSA9IHN0bW1hY19ldGh0b29sX2dldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtID0gc3RtbWFjX2V0aHRvb2xfc2V0X3R4X2NzdW0sCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3BhdXNlcGFyYW0gPSBzdG1tYWNfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gc3RtbWFjX3NldF9wYXVzZXBhcmFtLAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3N0cmluZ3MgPSBzdG1tYWNfZ2V0X3N0cmluZ3MsCisJLmdldF93b2wgPSBzdG1tYWNfZ2V0X3dvbCwKKwkuc2V0X3dvbCA9IHN0bW1hY19zZXRfd29sLAorCS5nZXRfc3NldF9jb3VudAk9IHN0bW1hY19nZXRfc3NldF9jb3VudCwKKyNpZmRlZiBORVRJRl9GX1RTTworCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAorI2VuZGlmCit9OworCit2b2lkIHN0bW1hY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmc3RtbWFjX2V0aHRvb2xfb3BzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmMTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0wLDAgKzEsMjIwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU1QgTUFDIDEwLzEwMC8xMDAwIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlcnMuCisgIFNUIEV0aGVybmV0IElQcyBhcmUgYnVpbHQgYXJvdW5kIGEgU3lub3BzeXMgSVAgQ29yZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorCisgIERvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0OgorCWh0dHA6Ly93d3cuc3RsaW51eC5jb20KKyAgU3VwcG9ydCBhdmFpbGFibGUgYXQ6CisJaHR0cHM6Ly9idWd6aWxsYS5zdGxpbnV4LmNvbS8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RtL3NvYy5oPgorI2luY2x1ZGUgInN0bW1hYy5oIgorCisjZGVmaW5lIFNUTU1BQ19SRVNPVVJDRV9OQU1FCSJzdG1tYWNldGgiCisjZGVmaW5lIFBIWV9SRVNPVVJDRV9OQU1FCSJzdG1tYWNwaHkiCisKKyN1bmRlZiBTVE1NQUNfREVCVUcKKy8qI2RlZmluZSBTVE1NQUNfREVCVUcqLworI2lmZGVmIFNUTU1BQ19ERUJVRworI2RlZmluZSBEQkcobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgXAorCQkoKHZvaWQpKG5ldGlmX21zZ18jI25sZXZlbChwcml2KSAmJiBcCisJCXByaW50ayhLRVJOXyMja2xldmVsIGZtdCwgIyMgYXJncykpKQorI2Vsc2UKKyNkZWZpbmUgREJHKG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjdW5kZWYgU1RNTUFDX1JYX0RFQlVHCisvKiNkZWZpbmUgU1RNTUFDX1JYX0RFQlVHKi8KKyNpZmRlZiBTVE1NQUNfUlhfREVCVUcKKyNkZWZpbmUgUlhfREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBSWF9EQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyN1bmRlZiBTVE1NQUNfWE1JVF9ERUJVRworLyojZGVmaW5lIFNUTU1BQ19YTUlUX0RFQlVHKi8KKyNpZmRlZiBTVE1NQUNfVFhfREVCVUcKKyNkZWZpbmUgVFhfREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBUWF9EQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgU1RNTUFDX0FMSUdOKHgpCUwxX0NBQ0hFX0FMSUdOKHgpCisjZGVmaW5lIEpVTUJPX0xFTgk5MDAwCisKKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFRYX1RJTUVPIDUwMDAgLyogZGVmYXVsdCA1IHNlY29uZHMgKi8KK3N0YXRpYyBpbnQgd2F0Y2hkb2cgPSBUWF9USU1FTzsKK21vZHVsZV9wYXJhbSh3YXRjaGRvZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHdhdGNoZG9nLCAiVHJhbnNtaXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IC0xOwkJLyogLTE6IGRlZmF1bHQsIDA6IG5vIG91dHB1dCwgMTY6ICBhbGwgKi8KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiTWVzc2FnZSBMZXZlbCAoMDogbm8gb3V0cHV0LCAxNjogYWxsKSIpOworCitzdGF0aWMgaW50IHBoeWFkZHIgPSAtMTsKK21vZHVsZV9wYXJhbShwaHlhZGRyLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhwaHlhZGRyLCAiUGh5c2ljYWwgZGV2aWNlIGFkZHJlc3MiKTsKKworI2RlZmluZSBETUFfVFhfU0laRSAyNTYKK3N0YXRpYyBpbnQgZG1hX3R4c2l6ZSA9IERNQV9UWF9TSVpFOworbW9kdWxlX3BhcmFtKGRtYV90eHNpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkbWFfdHhzaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSBUWCBsaXN0Iik7CisKKyNkZWZpbmUgRE1BX1JYX1NJWkUgMjU2CitzdGF0aWMgaW50IGRtYV9yeHNpemUgPSBETUFfUlhfU0laRTsKK21vZHVsZV9wYXJhbShkbWFfcnhzaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hX3J4c2l6ZSwgIk51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgUlggbGlzdCIpOworCitzdGF0aWMgaW50IGZsb3dfY3RybCA9IEZMT1dfT0ZGOworbW9kdWxlX3BhcmFtKGZsb3dfY3RybCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGZsb3dfY3RybCwgIkZsb3cgY29udHJvbCBhYmlsaXR5IFtvbi9vZmZdIik7CisKK3N0YXRpYyBpbnQgcGF1c2UgPSBQQVVTRV9USU1FOworbW9kdWxlX3BhcmFtKHBhdXNlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocGF1c2UsICJGbG93IENvbnRyb2wgUGF1c2UgVGltZSIpOworCisjZGVmaW5lIFRDX0RFRkFVTFQgNjQKK3N0YXRpYyBpbnQgdGMgPSBUQ19ERUZBVUxUOworbW9kdWxlX3BhcmFtKHRjLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModGMsICJETUEgdGhyZXNob2xkIGNvbnRyb2wgdmFsdWUiKTsKKworI2RlZmluZSBSWF9OT19DT0FMRVNDRQkxCS8qIEFsd2F5cyBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLworI2RlZmluZSBUWF9OT19DT0FMRVNDRQktMQkvKiBObyBtb2RlcmF0aW9uIGJ5IGRlZmF1bHQgKi8KKworLyogUGF5IGF0dGVudGlvbiB0byB0dW5lIHRoaXMgcGFyYW1ldGVyOyB0YWtlIGNhcmUgb2YgYm90aAorICogaGFyZHdhcmUgY2FwYWJpbGl0eSBhbmQgbmV0d29yayBzdGFiaXRpbHkvcGVyZm9ybWFuY2UgaW1wYWN0LgorICogTWFueSB0ZXN0cyBzaG93ZWQgdGhhdCB+NG1zIGxhdGVuY3kgc2VlbXMgdG8gYmUgZ29vZCBlbm91Z2guICovCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorI2RlZmluZSBERUZBVUxUX1BFUklPRElDX1JBVEUJMjU2CitzdGF0aWMgaW50IHRtcmF0ZSA9IERFRkFVTFRfUEVSSU9ESUNfUkFURTsKK21vZHVsZV9wYXJhbSh0bXJhdGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh0bXJhdGUsICJFeHRlcm5hbCB0aW1lciBmcmVxLiAoZGVmYXVsdDogMjU2SHopIik7CisjZW5kaWYKKworI2RlZmluZSBETUFfQlVGRkVSX1NJWkUJQlVGX1NJWkVfMktpQgorc3RhdGljIGludCBidWZfc3ogPSBETUFfQlVGRkVSX1NJWkU7Cittb2R1bGVfcGFyYW0oYnVmX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmX3N6LCAiRE1BIGJ1ZmZlciBzaXplIik7CisKKy8qIEluIGNhc2Ugb2YgR2lnYSBFVEgsIHdlIGNhbiBlbmFibGUvZGlzYWJsZSB0aGUgQ09FIGZvciB0aGUKKyAqIHRyYW5zbWl0IEhXIGNoZWNrc3VtIGNvbXB1dGF0aW9uLgorICogTm90ZSB0aGF0LCBpZiB0eCBjc3VtIGlzIG9mZiBpbiBIVywgU0cgd2lsbCBiZSBzdGlsbCBzdXBwb3J0ZWQuICovCitzdGF0aWMgaW50IHR4X2NvZSA9IEhXX0NTVU07Cittb2R1bGVfcGFyYW0odHhfY29lLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModHhfY29lLCAiR01BQyBDT0UgdHlwZSAyIFtvbi9vZmZdIik7CisKK3N0YXRpYyBjb25zdCB1MzIgZGVmYXVsdF9tc2dfbGV2ZWwgPSAoTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSB8CisJCQkJICAgICAgTkVUSUZfTVNHX0xJTksgfCBORVRJRl9NU0dfSUZVUCB8CisJCQkJICAgICAgTkVUSUZfTVNHX0lGRE9XTiB8IE5FVElGX01TR19USU1FUik7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdG1tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RtbWFjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKy8qKgorICogc3RtbWFjX3ZlcmlmeV9hcmdzIC0gdmVyaWZ5IHRoZSBkcml2ZXIgcGFyYW1ldGVycy4KKyAqIERlc2NyaXB0aW9uOiBpdCB2ZXJpZmllcyBpZiBzb21lIHdyb25nIHBhcmFtZXRlciBpcyBwYXNzZWQgdG8gdGhlIGRyaXZlci4KKyAqIE5vdGUgdGhhdCB3cm9uZyBwYXJhbWV0ZXJzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX3ZlcmlmeV9hcmdzKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHdhdGNoZG9nIDwgMCkpCisJCXdhdGNoZG9nID0gVFhfVElNRU87CisJaWYgKHVubGlrZWx5KGRtYV9yeHNpemUgPCAwKSkKKwkJZG1hX3J4c2l6ZSA9IERNQV9SWF9TSVpFOworCWlmICh1bmxpa2VseShkbWFfdHhzaXplIDwgMCkpCisJCWRtYV90eHNpemUgPSBETUFfVFhfU0laRTsKKwlpZiAodW5saWtlbHkoKGJ1Zl9zeiA8IERNQV9CVUZGRVJfU0laRSkgfHwgKGJ1Zl9zeiA+IEJVRl9TSVpFXzE2S2lCKSkpCisJCWJ1Zl9zeiA9IERNQV9CVUZGRVJfU0laRTsKKwlpZiAodW5saWtlbHkoZmxvd19jdHJsID4gMSkpCisJCWZsb3dfY3RybCA9IEZMT1dfQVVUTzsKKwllbHNlIGlmIChsaWtlbHkoZmxvd19jdHJsIDwgMCkpCisJCWZsb3dfY3RybCA9IEZMT1dfT0ZGOworCWlmICh1bmxpa2VseSgocGF1c2UgPCAwKSB8fCAocGF1c2UgPiAweGZmZmYpKSkKKwkJcGF1c2UgPSBQQVVTRV9USU1FOworCisJcmV0dXJuOworfQorCisjaWYgZGVmaW5lZChTVE1NQUNfWE1JVF9ERUJVRykgfHwgZGVmaW5lZChTVE1NQUNfUlhfREVCVUcpCitzdGF0aWMgdm9pZCBwcmludF9wa3QodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBqOworCXByX2luZm8oImxlbiA9ICVkIGJ5dGUsIGJ1ZiBhZGRyOiAweCVwIiwgbGVuLCBidWYpOworCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworCQlpZiAoKGogJSAxNikgPT0gMCkKKwkJCXByX2luZm8oIlxuICUwM3g6Iiwgaik7CisJCXByX2luZm8oIiAlMDJ4IiwgYnVmW2pdKTsKKwl9CisJcHJfaW5mbygiXG4iKTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworLyogbWluaW11bSBudW1iZXIgb2YgZnJlZSBUWCBkZXNjcmlwdG9ycyByZXF1aXJlZCB0byB3YWtlIHVwIFRYIHByb2Nlc3MgKi8KKyNkZWZpbmUgU1RNTUFDX1RYX1RIUkVTSCh4KQkoeC0+ZG1hX3R4X3NpemUvNCkKKworc3RhdGljIGlubGluZSB1MzIgc3RtbWFjX3R4X2F2YWlsKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+ZGlydHlfdHggKyBwcml2LT5kbWFfdHhfc2l6ZSAtIHByaXYtPmN1cl90eCAtIDE7Cit9CisKKy8qKgorICogc3RtbWFjX2FkanVzdF9saW5rCisgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IGFkanVzdHMgdGhlIGxpbmsgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi0+cGh5ZGV2OworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmV3X3N0YXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgZmMgPSBwcml2LT5mbG93X2N0cmwsIHBhdXNlX3RpbWUgPSBwcml2LT5wYXVzZTsKKworCWlmIChwaHlkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJREJHKHByb2JlLCBERUJVRywgInN0bW1hY19hZGp1c3RfbGluazogY2FsbGVkLiAgYWRkcmVzcyAlZCBsaW5rICVkXG4iLAorCSAgICBwaHlkZXYtPmFkZHIsIHBoeWRldi0+bGluayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJdTMyIGN0cmwgPSByZWFkbChpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCisJCS8qIE5vdyB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gYmUgaW4gZnVsbCBkdXBsZXggbW9kZS4KKwkJICogSWYgbm90LCB3ZSBvcGVyYXRlIGluIGhhbGYtZHVwbGV4IG1vZGUuICovCisJCWlmIChwaHlkZXYtPmR1cGxleCAhPSBwcml2LT5vbGRkdXBsZXgpIHsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQlpZiAoIShwaHlkZXYtPmR1cGxleCkpCisJCQkJY3RybCAmPSB+cHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuZHVwbGV4OworCQkJZWxzZQorCQkJCWN0cmwgfD0gcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuZHVwbGV4OworCQkJcHJpdi0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJCX0KKwkJLyogRmxvdyBDb250cm9sIG9wZXJhdGlvbiAqLworCQlpZiAocGh5ZGV2LT5wYXVzZSkKKwkJCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAorCQkJCQkJICAgICAgIGZjLCBwYXVzZV90aW1lKTsKKworCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBwcml2LT5zcGVlZCkgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgeworCQkJY2FzZSAxMDAwOgorCQkJCWlmIChsaWtlbHkocHJpdi0+aXNfZ21hYykpCisJCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJYnJlYWs7CisJCQljYXNlIDEwMDoKKwkJCWNhc2UgMTA6CisJCQkJaWYgKHByaXYtPmlzX2dtYWMpIHsKKwkJCQkJY3RybCB8PSBwcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJCQkJCWN0cmwgfD0KKwkJCQkJCSAgICBwcml2LT5tYWNfdHlwZS0+aHcubGluay4KKwkJCQkJCSAgICBzcGVlZDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWN0cmwgJj0KKwkJCQkJCSAgICB+KHByaXYtPm1hY190eXBlLT5ody4KKwkJCQkJCSAgICAgIGxpbmsuc3BlZWQpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJY3RybCAmPSB+cHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsucG9ydDsKKwkJCQl9CisJCQkJcHJpdi0+Zml4X21hY19zcGVlZChwcml2LT5ic3BfcHJpdiwKKwkJCQkJCSAgICBwaHlkZXYtPnNwZWVkKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKG5ldGlmX21zZ19saW5rKHByaXYpKQorCQkJCQlwcl93YXJuaW5nKCIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAiCisJCQkJICAgICAgICIgb3IgMTAwIVxuIiwgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcHJpdi0+c3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCQl9CisKKwkJd3JpdGVsKGN0cmwsIGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisKKwkJaWYgKCFwcml2LT5vbGRsaW5rKSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJcHJpdi0+b2xkbGluayA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHByaXYtPm9sZGxpbmspIHsKKwkJbmV3X3N0YXRlID0gMTsKKwkJcHJpdi0+b2xkbGluayA9IDA7CisJCXByaXYtPnNwZWVkID0gMDsKKwkJcHJpdi0+b2xkZHVwbGV4ID0gLTE7CisJfQorCisJaWYgKG5ld19zdGF0ZSAmJiBuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJREJHKHByb2JlLCBERUJVRywgInN0bW1hY19hZGp1c3RfbGluazogZXhpdGluZ1xuIik7Cit9CisKKy8qKgorICogc3RtbWFjX2luaXRfcGh5IC0gUEhZIGluaXRpYWxpemF0aW9uCisgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IGluaXRpYWxpemVzIHRoZSBkcml2ZXIncyBQSFkgc3RhdGUsIGFuZCBhdHRhY2hlcyB0aGUgUEhZCisgKiB0byB0aGUgbWFjIGRyaXZlci4KKyAqICBSZXR1cm4gdmFsdWU6CisgKiAgMCBvbiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCWNoYXIgcGh5X2lkW0JVU19JRF9TSVpFXTsJLyogUEhZIHRvIGNvbm5lY3QgKi8KKwljaGFyIGJ1c19pZFtCVVNfSURfU0laRV07CisKKwlwcml2LT5vbGRsaW5rID0gMDsKKwlwcml2LT5zcGVlZCA9IDA7CisJcHJpdi0+b2xkZHVwbGV4ID0gLTE7CisKKwlpZiAocHJpdi0+cGh5X2FkZHIgPT0gLTEpIHsKKwkJLyogV2UgZG9uJ3QgaGF2ZSBhIFBIWSwgc28gZG8gbm90aGluZyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihidXNfaWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKKwlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULCBidXNfaWQsIHByaXYtPnBoeV9hZGRyKTsKKwlwcl9kZWJ1Zygic3RtbWFjX2luaXRfcGh5OiAgdHJ5aW5nIHRvIGF0dGFjaCB0byAlc1xuIiwgcGh5X2lkKTsKKworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmc3RtbWFjX2FkanVzdF9saW5rLCAwLAorCQkJcHJpdi0+cGh5X2ludGVyZmFjZSk7CisKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJcHJfZXJyKCIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJfQorCisJLyoKKwkgKiBCcm9rZW4gSFcgaXMgc29tZXRpbWVzIG1pc3NpbmcgdGhlIHB1bGwtdXAgcmVzaXN0b3Igb24gdGhlCisJICogTURJTyBsaW5lLCB3aGljaCByZXN1bHRzIGluIHJlYWRzIHRvIG5vbi1leGlzdGVudCBkZXZpY2VzIHJldHVybmluZworCSAqIDAgcmF0aGVyIHRoYW4gMHhmZmZmLiBDYXRjaCB0aGlzIGhlcmUgYW5kIHRyZWF0IDAgYXMgYSBub24tZXhpc3RlbnQKKwkgKiBkZXZpY2UgYXMgd2VsbC4KKwkgKiBOb3RlOiBwaHlkZXYtPnBoeV9pZCBpcyB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgdGhlIFVJRCBQSFkgcmVnaXN0ZXJzLgorCSAqLworCWlmIChwaHlkZXYtPnBoeV9pZCA9PSAwKSB7CisJCXBoeV9kaXNjb25uZWN0KHBoeWRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwcl9kZWJ1Zygic3RtbWFjX2luaXRfcGh5OiAgJXM6IGF0dGFjaGVkIHRvIFBIWSAoVUlEIDB4JXgpIgorCSAgICAgICAiIExpbmsgPSAlZFxuIiwgZGV2LT5uYW1lLCBwaHlkZXYtPnBoeV9pZCwgcGh5ZGV2LT5saW5rKTsKKworCXByaXYtPnBoeWRldiA9IHBoeWRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX21hY19lbmFibGVfcngodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKwl2YWx1ZSB8PSBNQUNfUk5BQkxFX1JYOworCS8qIFNldCB0aGUgUkUgKHJlY2VpdmUgZW5hYmxlIGJpdCBpbnRvIHRoZSBNQUMgQ1RSTCByZWdpc3RlcikuICAqLworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19tYWNfZW5hYmxlX3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisJdmFsdWUgfD0gTUFDX0VOQUJMRV9UWDsKKwkvKiBTZXQgdGhlIFRFICh0cmFuc21pdCBlbmFibGUgYml0IGludG8gdGhlIE1BQyBDVFJMIHJlZ2lzdGVyKS4gICovCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX21hY19kaXNhYmxlX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisJdmFsdWUgJj0gfk1BQ19STkFCTEVfUlg7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX21hY19kaXNhYmxlX3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisJdmFsdWUgJj0gfk1BQ19FTkFCTEVfVFg7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworfQorCisvKioKKyAqIGRpc3BsYXlfcmluZworICogQHA6IHBvaW50ZXIgdG8gdGhlIHJpbmcuCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmluZy4KKyAqIERlc2NyaXB0aW9uOiBkaXNwbGF5IGFsbCB0aGUgZGVzY3JpcHRvcnMgd2l0aGluIHRoZSByaW5nLgorICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X3Jpbmcoc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdG1wX3MgeworCQl1NjQgYTsKKwkJdW5zaWduZWQgaW50IGI7CisJCXVuc2lnbmVkIGludCBjOworCX07CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlzdHJ1Y3QgdG1wX3MgKnggPSAoc3RydWN0IHRtcF9zICopKHAgKyBpKTsKKwkJcHJfaW5mbygiXHQlZCBbMHgleF06IERFUzA9MHgleCBERVMxPTB4JXggQlVGMT0weCV4IEJVRjI9MHgleCIsCisJCSAgICAgICBpLCAodW5zaWduZWQgaW50KXZpcnRfdG9fcGh5cygmcFtpXSksCisJCSAgICAgICAodW5zaWduZWQgaW50KSh4LT5hKSwgKHVuc2lnbmVkIGludCkoKHgtPmEpID4+IDMyKSwKKwkJICAgICAgIHgtPmIsIHgtPmMpOworCQlwcl9pbmZvKCJcbiIpOworCX0KK30KKworLyoqCisgKiBpbml0X2RtYV9kZXNjX3JpbmdzIC0gaW5pdCB0aGUgUlgvVFggZGVzY3JpcHRvciByaW5ncworICogQGRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgRE1BIFJYL1RYIGRlc2NyaXB0b3JzCisgKiBhbmQgYWxsb2NhdGVzIHRoZSBzb2NrZXQgYnVmZmVycy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF9kbWFfZGVzY19yaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgdHhzaXplID0gcHJpdi0+ZG1hX3R4X3NpemU7CisJdW5zaWduZWQgaW50IHJ4c2l6ZSA9IHByaXYtPmRtYV9yeF9zaXplOworCXVuc2lnbmVkIGludCBiZnNpemUgPSBwcml2LT5kbWFfYnVmX3N6OworCWludCBidWZmMl9uZWVkZWQgPSAwOworCWludCBkaXNfaWMgPSAwOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIFVzaW5nIFRpbWVycyBkaXNhYmxlIGludGVycnVwdHMgb24gY29tcGxldGlvbiBmb3IgdGhlIHJlY2VwdGlvbiAqLworCWRpc19pYyA9IDE7CisjZW5kaWYKKwkvKiBTZXQgdGhlIEJ1ZmZlciBzaXplIGFjY29yZGluZyB0byB0aGUgTVRVOworCSAqIGluZGVlZCwgaW4gY2FzZSBvZiBqdW1ibyB3ZSBuZWVkIHRvIGJ1bXAtdXAgdGhlIGJ1ZmZlciBzaXplcy4KKwkgKi8KKwlpZiAodW5saWtlbHkoZGV2LT5tdHUgPj0gQlVGX1NJWkVfOEtpQikpCisJCWJmc2l6ZSA9IEJVRl9TSVpFXzE2S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IEJVRl9TSVpFXzRLaUIpKQorCQliZnNpemUgPSBCVUZfU0laRV84S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IEJVRl9TSVpFXzJLaUIpKQorCQliZnNpemUgPSBCVUZfU0laRV80S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IERNQV9CVUZGRVJfU0laRSkpCisJCWJmc2l6ZSA9IEJVRl9TSVpFXzJLaUI7CisJZWxzZQorCQliZnNpemUgPSBETUFfQlVGRkVSX1NJWkU7CisKKwkvKiBJZiB0aGUgTVRVIGV4Y2VlZHMgOGsgc28gdXNlIHRoZSBzZWNvbmQgYnVmZmVyIGluIHRoZSBjaGFpbiAqLworCWlmIChiZnNpemUgPj0gQlVGX1NJWkVfOEtpQikKKwkJYnVmZjJfbmVlZGVkID0gMTsKKworCURCRyhwcm9iZSwgSU5GTywgInN0bW1hYzogdHhzaXplICVkLCByeHNpemUgJWQsIGJmc2l6ZSAlZFxuIiwKKwkgICAgdHhzaXplLCByeHNpemUsIGJmc2l6ZSk7CisKKwlwcml2LT5yeF9za2J1ZmZfZG1hID0ga21hbGxvYyhyeHNpemUgKiBzaXplb2YoZG1hX2FkZHJfdCksIEdGUF9LRVJORUwpOworCXByaXYtPnJ4X3NrYnVmZiA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmICopICogcnhzaXplLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5kbWFfcnggPQorCSAgICAoc3RydWN0IGRtYV9kZXNjICopZG1hX2FsbG9jX2NvaGVyZW50KHByaXYtPmRldmljZSwKKwkJCQkJCSAgcnhzaXplICoKKwkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYyksCisJCQkJCQkgICZwcml2LT5kbWFfcnhfcGh5LAorCQkJCQkJICBHRlBfS0VSTkVMKTsKKwlwcml2LT50eF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIHR4c2l6ZSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJcHJpdi0+ZG1hX3R4ID0KKwkgICAgKHN0cnVjdCBkbWFfZGVzYyAqKWRtYV9hbGxvY19jb2hlcmVudChwcml2LT5kZXZpY2UsCisJCQkJCQkgIHR4c2l6ZSAqCisJCQkJCQkgIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJCQkJICAmcHJpdi0+ZG1hX3R4X3BoeSwKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoKHByaXYtPmRtYV9yeCA9PSBOVUxMKSB8fCAocHJpdi0+ZG1hX3R4ID09IE5VTEwpKSB7CisJCXByX2VycigiJXM6RVJST1IgYWxsb2NhdGluZyB0aGUgRE1BIFR4L1J4IGRlc2NcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCURCRyhwcm9iZSwgSU5GTywgInN0bW1hYyAoJXMpIERNQSBkZXNjIHJpbmdzOiB2aXJ0IGFkZHIgKFJ4ICVwLCAiCisJICAgICJUeCAlcClcblx0RE1BIHBoeSBhZGRyIChSeCAweCUwOHgsIFR4IDB4JTA4eClcbiIsCisJICAgIGRldi0+bmFtZSwgcHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfdHgsCisJICAgICh1bnNpZ25lZCBpbnQpcHJpdi0+ZG1hX3J4X3BoeSwgKHVuc2lnbmVkIGludClwcml2LT5kbWFfdHhfcGh5KTsKKworCS8qIFJYIElOSVRJQUxJWkFUSU9OICovCisJREJHKHByb2JlLCBJTkZPLCAic3RtbWFjOiBTS0IgYWRkcmVzc2VzOlxuIgorCQkJICJza2JcdFx0c2tiIGRhdGFcdGRtYSBkYXRhXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCByeHNpemU7IGkrKykgeworCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfcnggKyBpOworCisJCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LCBiZnNpemUpOworCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CisJCQlwcl9lcnIoIiVzOiBSeCBpbml0IGZhaWxzOyBza2IgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKwkJcHJpdi0+cnhfc2tidWZmW2ldID0gc2tiOworCQlwcml2LT5yeF9za2J1ZmZfZG1hW2ldID0gZG1hX21hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBza2ItPmRhdGEsCisJCQkJCQliZnNpemUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJcC0+ZGVzMiA9IHByaXYtPnJ4X3NrYnVmZl9kbWFbaV07CisJCWlmICh1bmxpa2VseShidWZmMl9uZWVkZWQpKQorCQkJcC0+ZGVzMyA9IHAtPmRlczIgKyBCVUZfU0laRV84S2lCOworCQlEQkcocHJvYmUsIElORk8sICJbJXBdXHRbJXBdXHRbJXhdXG4iLCBwcml2LT5yeF9za2J1ZmZbaV0sCisJCQlwcml2LT5yeF9za2J1ZmZbaV0tPmRhdGEsIHByaXYtPnJ4X3NrYnVmZl9kbWFbaV0pOworCX0KKwlwcml2LT5jdXJfcnggPSAwOworCXByaXYtPmRpcnR5X3J4ID0gKHVuc2lnbmVkIGludCkoaSAtIHJ4c2l6ZSk7CisJcHJpdi0+ZG1hX2J1Zl9zeiA9IGJmc2l6ZTsKKwlidWZfc3ogPSBiZnNpemU7CisKKwkvKiBUWCBJTklUSUFMSVpBVElPTiAqLworCWZvciAoaSA9IDA7IGkgPCB0eHNpemU7IGkrKykgeworCQlwcml2LT50eF9za2J1ZmZbaV0gPSBOVUxMOworCQlwcml2LT5kbWFfdHhbaV0uZGVzMiA9IDA7CisJfQorCXByaXYtPmRpcnR5X3R4ID0gMDsKKwlwcml2LT5jdXJfdHggPSAwOworCisJLyogQ2xlYXIgdGhlIFJ4L1R4IGRlc2NyaXB0b3JzICovCisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aW5pdF9yeF9kZXNjKHByaXYtPmRtYV9yeCwgcnhzaXplLCBkaXNfaWMpOworCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CisKKwlpZiAobmV0aWZfbXNnX2h3KHByaXYpKSB7CisJCXByX2luZm8oIlJYIGRlc2NyaXB0b3IgcmluZzpcbiIpOworCQlkaXNwbGF5X3JpbmcocHJpdi0+ZG1hX3J4LCByeHNpemUpOworCQlwcl9pbmZvKCJUWCBkZXNjcmlwdG9yIHJpbmc6XG4iKTsKKwkJZGlzcGxheV9yaW5nKHByaXYtPmRtYV90eCwgdHhzaXplKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkbWFfZnJlZV9yeF9za2J1ZnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPmRtYV9yeF9zaXplOyBpKyspIHsKKwkJaWYgKHByaXYtPnJ4X3NrYnVmZltpXSkgeworCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHByaXYtPnJ4X3NrYnVmZl9kbWFbaV0sCisJCQkJCSBwcml2LT5kbWFfYnVmX3N6LCBETUFfRlJPTV9ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+cnhfc2tidWZmW2ldKTsKKwkJfQorCQlwcml2LT5yeF9za2J1ZmZbaV0gPSBOVUxMOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9mcmVlX3R4X3NrYnVmcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZG1hX3R4X3NpemU7IGkrKykgeworCQlpZiAocHJpdi0+dHhfc2tidWZmW2ldICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBkbWFfZGVzYyAqcCA9IHByaXYtPmRtYV90eCArIGk7CisJCQlpZiAocC0+ZGVzMikKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgcC0+ZGVzMiwKKwkJCQkgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xlbihwKSwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShwcml2LT50eF9za2J1ZmZbaV0pOworCQkJcHJpdi0+dHhfc2tidWZmW2ldID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwkvKiBSZWxlYXNlIHRoZSBETUEgVFgvUlggc29ja2V0IGJ1ZmZlcnMgKi8KKwlkbWFfZnJlZV9yeF9za2J1ZnMocHJpdik7CisJZG1hX2ZyZWVfdHhfc2tidWZzKHByaXYpOworCisJLyogRnJlZSB0aGUgcmVnaW9uIG9mIGNvbnNpc3RlbnQgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIGZvcgorCSAqIHRoZSBETUEgKi8KKwlkbWFfZnJlZV9jb2hlcmVudChwcml2LT5kZXZpY2UsCisJCQkgIHByaXYtPmRtYV90eF9zaXplICogc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYyksCisJCQkgIHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3BoeSk7CisJZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJICBwcml2LT5kbWFfcnhfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJICBwcml2LT5kbWFfcngsIHByaXYtPmRtYV9yeF9waHkpOworCWtmcmVlKHByaXYtPnJ4X3NrYnVmZl9kbWEpOworCWtmcmVlKHByaXYtPnJ4X3NrYnVmZik7CisJa2ZyZWUocHJpdi0+dHhfc2tidWZmKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiBzdG1tYWNfZG1hX3N0YXJ0X3R4CisgKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKKyAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSB0eCBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXJldHVybjsKK30KKworLyoqCisgKiBzdG1tYWNfZG1hX3N0YXJ0X3J4CisgKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKKyAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSByeCBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSAmPSB+RE1BX0NPTlRST0xfU1I7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGUKKyAqICBAcHJpdiA6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqICBEZXNjcmlwdGlvbjogaXQgc2V0cyB0aGUgRE1BIG9wZXJhdGlvbiBtb2RlOiB0eC9yeCBETUEgdGhyZXNob2xkcworICogIG9yIFN0b3JlLUFuZC1Gb3J3YXJkIGNhcGFiaWxpdHkuIEl0IGFsc28gdmVyaWZpZXMgdGhlIENPRSBmb3IgdGhlCisgKiAgdHJhbnNtaXNzaW9uIGluIGNhc2Ugb2YgR2lnYSBFVEguCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCWlmICghcHJpdi0+aXNfZ21hYykgeworCQkvKiBNQUMgMTAvMTAwICovCisJCXByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9tb2RlKHByaXYtPmRldi0+YmFzZV9hZGRyLCB0YywgMCk7CisJCXByaXYtPnR4X2NvZSA9IE5PX0hXX0NTVU07CisJfSBlbHNlIHsKKwkJaWYgKChwcml2LT5kZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pICYmICh0eF9jb2UpKSB7CisJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwKKwkJCQkJCSAgICAgIFNGX0RNQV9NT0RFLCBTRl9ETUFfTU9ERSk7CisJCQl0YyA9IFNGX0RNQV9NT0RFOworCQkJcHJpdi0+dHhfY29lID0gSFdfQ1NVTTsKKwkJfSBlbHNlIHsKKwkJCS8qIENoZWNrc3VtIGNvbXB1dGF0aW9uIGlzIHBlcmZvcm1lZCBpbiBzb2Z0d2FyZS4gKi8KKwkJCXByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9tb2RlKHByaXYtPmRldi0+YmFzZV9hZGRyLCB0YywKKwkJCQkJCSAgICAgIFNGX0RNQV9NT0RFKTsKKwkJCXByaXYtPnR4X2NvZSA9IE5PX0hXX0NTVU07CisJCX0KKwl9CisJdHhfY29lID0gcHJpdi0+dHhfY29lOworCisJcmV0dXJuOworfQorCisjaWZkZWYgU1RNTUFDX0RFQlVHCisvKioKKyAqIHNob3dfdHhfcHJvY2Vzc19zdGF0ZQorICogQHN0YXR1czogdHggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKKyAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgVHJhbnNtaXQgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsyMjoyMF0KKyAqLworc3RhdGljIHZvaWQgc2hvd190eF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfVFNfTUFTSykgPj4gRE1BX1NUQVRVU19UU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gVFggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOkZldGNoaW5nIHRoZSBUeCBkZXNjXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTogV2FpdGluZyBmb3IgZW5kIG9mIHR4XG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTogUmVhZGluZyB0aGUgZGF0YSAiCisJCSAgICAgICAiYW5kIHF1ZXVpbmcgdGhlIGRhdGEgaW50byB0aGUgVHggYnVmXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlwcl9pbmZvKCItIFRYIChTdXNwZW5kZWQpOiBUeCBCdWZmIFVuZGVyZmxvdyAiCisJCSAgICAgICAib3IgYW4gdW5hdmFpbGFibGUgVHJhbnNtaXQgZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IENsb3NpbmcgVHggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKKy8qKgorICogc2hvd19yeF9wcm9jZXNzX3N0YXRlCisgKiBAc3RhdHVzOiByeCBkZXNjcmlwdG9yIHN0YXR1cyBmaWVsZAorICogRGVzY3JpcHRpb246IGl0IHNob3dzIHRoZSAgUmVjZWl2ZSBQcm9jZXNzIFN0YXRlIGZvciBDU1I1WzE5OjE3XQorICovCitzdGF0aWMgdm9pZCBzaG93X3J4X3Byb2Nlc3Nfc3RhdGUodW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJc3RhdGUgPSAoc3RhdHVzICYgRE1BX1NUQVRVU19SU19NQVNLKSA+PiBETUFfU1RBVFVTX1JTX1NISUZUOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiLSBSWCAoU3RvcHBlZCk6IFJlc2V0IG9yIFN0b3AgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IEZldGNoaW5nIHRoZSBSeCBkZXNjXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcl9pbmZvKCItIFJYIChSdW5uaW5nKTpDaGVja2luZyBmb3IgZW5kIG9mIHBrdFxuIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIFJ4IHBrdFxuIik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHJfaW5mbygiLSBSWCAoU3VzcGVuZGVkKTogVW5hdmFpbGFibGUgUnggYnVmXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlwcl9pbmZvKCItIFJYIChSdW5uaW5nKTogQ2xvc2luZyBSeCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlwcl9pbmZvKCItIFJYKFJ1bm5pbmcpOiBGbHVzaGluZyB0aGUgY3VycmVudCBmcmFtZSIKKwkJICAgICAgICIgZnJvbSB0aGUgUnggYnVmXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlwcl9pbmZvKCItIFJYIChSdW5uaW5nKTogUXVldWluZyB0aGUgUnggZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZiBpbnRvIG1lbW9yeVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisjZW5kaWYKKworLyoqCisgKiBzdG1tYWNfdHg6CisgKiBAcHJpdjogcHJpdmF0ZSBkcml2ZXIgc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgcmVjbGFpbXMgcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWlzc2lvbiBjb21wbGV0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY190eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgaW50IHR4c2l6ZSA9IHByaXYtPmRtYV90eF9zaXplOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gcHJpdi0+ZGV2LT5iYXNlX2FkZHI7CisKKwl3aGlsZSAocHJpdi0+ZGlydHlfdHggIT0gcHJpdi0+Y3VyX3R4KSB7CisJCWludCBsYXN0OworCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5kaXJ0eV90eCAlIHR4c2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnR4X3NrYnVmZltlbnRyeV07CisJCXN0cnVjdCBkbWFfZGVzYyAqcCA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCisJCS8qIENoZWNrIGlmIHRoZSBkZXNjcmlwdG9yIGlzIG93bmVkIGJ5IHRoZSBETUEuICovCisJCWlmIChwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdHhfb3duZXIocCkpCisJCQlicmVhazsKKworCQkvKiBWZXJpZnkgdHggZXJyb3IgYnkgbG9va2luZyBhdCB0aGUgbGFzdCBzZWdtZW50ICovCisJCWxhc3QgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdHhfbHMocCk7CisJCWlmIChsaWtlbHkobGFzdCkpIHsKKwkJCWludCB0eF9lcnJvciA9CisJCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+dHhfc3RhdHVzKCZwcml2LT5kZXYtPnN0YXRzLAorCQkJCQkJCSAgICZwcml2LT54c3RhdHMsCisJCQkJCQkJICAgcCwgaW9hZGRyKTsKKwkJCWlmIChsaWtlbHkodHhfZXJyb3IgPT0gMCkpIHsKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlwcml2LT54c3RhdHMudHhfcGt0X24rKzsKKwkJCX0gZWxzZQorCQkJCXByaXYtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCX0KKwkJVFhfREJHKCIlczogY3VyciAlZCwgZGlydHkgJWRcbiIsIF9fZnVuY19fLAorCQkJcHJpdi0+Y3VyX3R4LCBwcml2LT5kaXJ0eV90eCk7CisKKwkJaWYgKGxpa2VseShwLT5kZXMyKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwLT5kZXMyLAorCQkJCQkgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xlbihwKSwKKwkJCQkJIERNQV9UT19ERVZJQ0UpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMykpCisJCQlwLT5kZXMzID0gMDsKKworCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZXJlJ3Mgcm9vbSBpbiB0aGUgcXVldWUgKGxpbWl0IGl0IHRvIHNpemUpCisJCQkgKiB3ZSBhZGQgdGhpcyBza2IgYmFjayBpbnRvIHRoZSBwb29sLAorCQkJICogaWYgaXQncyB0aGUgcmlnaHQgc2l6ZS4KKwkJCSAqLworCQkJaWYgKChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9yZWN5Y2xlKSA8CisJCQkJcHJpdi0+ZG1hX3J4X3NpemUpICYmCisJCQkJc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBwcml2LT5kbWFfYnVmX3N6KSkKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZwcml2LT5yeF9yZWN5Y2xlLCBza2IpOworCQkJZWxzZQorCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCQkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisJCX0KKworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5yZWxlYXNlX3R4X2Rlc2MocCk7CisKKwkJZW50cnkgPSAoKytwcml2LT5kaXJ0eV90eCkgJSB0eHNpemU7CisJfQorCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPmRldikgJiYKKwkJICAgICBzdG1tYWNfdHhfYXZhaWwocHJpdikgPiBTVE1NQUNfVFhfVEhSRVNIKHByaXYpKSkgeworCQluZXRpZl90eF9sb2NrKHByaXYtPmRldik7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPmRldikgJiYKKwkJICAgICBzdG1tYWNfdHhfYXZhaWwocHJpdikgPiBTVE1NQUNfVFhfVEhSRVNIKHByaXYpKSB7CisJCQlUWF9EQkcoIiVzOiByZXN0YXJ0IHRyYW5zbWl0XG4iLCBfX2Z1bmNfXyk7CisJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisJCX0KKwkJbmV0aWZfdHhfdW5sb2NrKHByaXYtPmRldik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19lbmFibGVfaXJxKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKyNpZm5kZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKyNlbHNlCisJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19kaXNhYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisjaWZuZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwl3cml0ZWwoMCwgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOworI2Vsc2UKKwlwcml2LT50bS0+dGltZXJfc3RvcCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX2hhc193b3JrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBpbnQgaGFzX3dvcmsgPSAwOworCWludCByeHJldCwgdHhfd29yayA9IDA7CisKKwlyeHJldCA9IHByaXYtPm1hY190eXBlLT5vcHMtPmdldF9yeF9vd25lcihwcml2LT5kbWFfcnggKworCQkocHJpdi0+Y3VyX3J4ICUgcHJpdi0+ZG1hX3J4X3NpemUpKTsKKworCWlmIChwcml2LT5kaXJ0eV90eCAhPSBwcml2LT5jdXJfdHgpCisJCXR4X3dvcmsgPSAxOworCisJaWYgKGxpa2VseSghcnhyZXQgfHwgdHhfd29yaykpCisJCWhhc193b3JrID0gMTsKKworCXJldHVybiBoYXNfd29yazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zdG1tYWNfc2NoZWR1bGUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCWlmIChsaWtlbHkoc3RtbWFjX2hhc193b3JrKHByaXYpKSkgeworCQlzdG1tYWNfZGlzYWJsZV9pcnEocHJpdik7CisJCW5hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCX0KK30KKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKK3ZvaWQgc3RtbWFjX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXByaXYtPnhzdGF0cy5zY2hlZF90aW1lcl9uKys7CisKKwlfc3RtbWFjX3NjaGVkdWxlKHByaXYpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfbm9fdGltZXJfc3RhcnRlZCh1bnNpZ25lZCBpbnQgeCkKK3s7Cit9OworCitzdGF0aWMgdm9pZCBzdG1tYWNfbm9fdGltZXJfc3RvcHBlZCh2b2lkKQorezsKK307CisjZW5kaWYKKworLyoqCisgKiBzdG1tYWNfdHhfZXJyOgorICogQHByaXY6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IGNsZWFucyB0aGUgZGVzY3JpcHRvcnMgYW5kIHJlc3RhcnRzIHRoZSB0cmFuc21pc3Npb24KKyAqIGluIGNhc2Ugb2YgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfdHhfZXJyKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CisKKwlzdG1tYWNfZG1hX3N0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOworCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfc2l6ZSk7CisJcHJpdi0+ZGlydHlfdHggPSAwOworCXByaXYtPmN1cl90eCA9IDA7CisJc3RtbWFjX2RtYV9zdGFydF90eChwcml2LT5kZXYtPmJhc2VfYWRkcik7CisKKwlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiBzdG1tYWNfZG1hX2ludGVycnVwdCAtIEludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyCisgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IEludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyIChETUEpLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkvKiByZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKENTUjUpICovCisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgRE1BX1NUQVRVUyk7CisKKwlEQkcoaW50ciwgSU5GTywgIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKworI2lmZGVmIFNUTU1BQ19ERUJVRworCS8qIEl0IGRpc3BsYXlzIHRoZSBETUEgdHJhbnNtaXQgcHJvY2VzcyBzdGF0ZSAoQ1NSNSByZWdpc3RlcikgKi8KKwlpZiAobmV0aWZfbXNnX3R4X2RvbmUocHJpdikpCisJCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CisJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMocHJpdikpCisJCXNob3dfcnhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CisjZW5kaWYKKwkvKiBBQk5PUk1BTCBpbnRlcnJ1cHRzICovCisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19BSVMpKSB7CisJCURCRyhpbnRyLCBJTkZPLCAiQ1NSNVsxNV0gRE1BIEFCTk9STUFMIElSUTogIik7CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVU5GKSkgeworCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCB1bmRlcmZsb3dcbiIpOworCQkJaWYgKHVubGlrZWx5KHRjICE9IFNGX0RNQV9NT0RFKQorCQkJICAgICYmICh0YyA8PSAyNTYpKSB7CisJCQkJLyogVHJ5IHRvIGJ1bXAgdXAgdGhlIHRocmVzaG9sZCAqLworCQkJCXRjICs9IDY0OworCQkJCXByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9tb2RlKGlvYWRkciwgdGMsCisJCQkJCSAgICAgIFNGX0RNQV9NT0RFKTsKKwkJCQlwcml2LT54c3RhdHMudGhyZXNob2xkID0gdGM7CisJCQl9CisJCQlzdG1tYWNfdHhfZXJyKHByaXYpOworCQkJcHJpdi0+eHN0YXRzLnR4X3VuZGVmbG93X2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVEpUKSkgeworCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBqYWJiZXJcbiIpOworCQkJcHJpdi0+eHN0YXRzLnR4X2phYmJlcl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7CisJCQlwcml2LT54c3RhdHMucnhfb3ZlcmZsb3dfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SVSkpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSBidWZmZXIgdW5hdmFpbGFibGVcbiIpOworCQkJcHJpdi0+eHN0YXRzLnJ4X2J1Zl91bmF2X2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlBTKSkgeworCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQlwcml2LT54c3RhdHMucnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgeworCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKKwkJCXByaXYtPnhzdGF0cy5yeF93YXRjaGRvZ19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKKwkJCXByaXYtPnhzdGF0cy50eF9lYXJseV9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RQUykpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKKwkJCXByaXYtPnhzdGF0cy50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7CisJCQlzdG1tYWNfdHhfZXJyKHByaXYpOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgeworCQkJREJHKGludHIsIElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOworCQkJcHJpdi0+eHN0YXRzLmZhdGFsX2J1c19lcnJvcl9pcnErKzsKKwkJCXN0bW1hY190eF9lcnIocHJpdik7CisJCX0KKwl9CisKKwkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLworCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7CisJCXByaXYtPnhzdGF0cy5ub3JtYWxfaXJxX24rKzsKKwkJaWYgKGxpa2VseSgoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JJKSB8fAorCQkJIChpbnRyX3N0YXR1cyAmIChETUFfU1RBVFVTX1RJKSkpKQorCQkJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7CisJfQorCisJLyogT3B0aW9uYWwgaGFyZHdhcmUgYmxvY2tzLCBpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCAqLworCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmCisJCSAgICAgKERNQV9TVEFUVVNfR1BJIHwgRE1BX1NUQVRVU19HTUkgfCBETUFfU1RBVFVTX0dMSSkpKQorCQlwcl9pbmZvKCIlczogdW5leHBlY3RlZCBzdGF0dXMgJTA4eFxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KKwl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOworCisJREJHKGludHIsIElORk8sICJcblxuIik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogIHN0bW1hY19vcGVuIC0gb3BlbiBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyCisgKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiAgRGVzY3JpcHRpb246CisgKiAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgb3BlbiBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLgorICogIFJldHVybiB2YWx1ZToKKyAqICAwIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlICgtKXZlIGludGVnZXIgYXMgZGVmaW5lZCBpbiBlcnJuby5oCisgKiAgZmlsZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCByZXQ7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBNQUMgYWRkcmVzcyBpcyB2YWxpZC4gIElmIGl0cyBub3QsIHJlZnVzZQorCSAqIHRvIGJyaW5nIHRoZSBkZXZpY2UgdXAuIFRoZSB1c2VyIG11c3Qgc3BlY2lmeSBhbgorCSAqIGFkZHJlc3MgdXNpbmcgdGhlIGZvbGxvd2luZyBsaW51eCBjb21tYW5kOgorCSAqICAgICAgaWZjb25maWcgZXRoMCBodyBldGhlciB4eDp4eDp4eDp4eDp4eDp4eCAgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCXByX3dhcm5pbmcoIiVzOiBnZW5lcmF0ZWQgcmFuZG9tIE1BQyBhZGRyZXNzICVwTVxuIiwgZGV2LT5uYW1lLAorCQkJZGV2LT5kZXZfYWRkcik7CisJfQorCisJc3RtbWFjX3ZlcmlmeV9hcmdzKCk7CisKKwlyZXQgPSBzdG1tYWNfaW5pdF9waHkoZGV2KTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlwcl9lcnIoIiVzOiBDYW5ub3QgYXR0YWNoIHRvIFBIWSAoZXJyb3I6ICVkKVxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVxdWVzdCB0aGUgSVJRIGxpbmVzICovCisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZzdG1tYWNfaW50ZXJydXB0LAorCQkJICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogYWxsb2NhdGluZyB0aGUgSVJRICVkIChlcnJvcjogJWQpXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+aXJxLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlwcml2LT50bSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdG1tYWNfdGltZXIgKiksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseShwcml2LT50bSA9PSBOVUxMKSkgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogdGltZXIgbWVtb3J5IGFsbG9jIGZhaWxlZCBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXByaXYtPnRtLT5mcmVxID0gdG1yYXRlOworCisJLyogVGVzdCBpZiB0aGUgSFcgdGltZXIgY2FuIGJlIGFjdHVhbGx5IHVzZWQuCisJICogSW4gY2FzZSBvZiBmYWlsdXJlIGNvbnRpbnVlIHdpdGggbm8gdGltZXIuICovCisJaWYgKHVubGlrZWx5KChzdG1tYWNfb3Blbl9leHRfdGltZXIoZGV2LCBwcml2LT50bSkpIDwgMCkpIHsKKwkJcHJfd2FybmluZygic3RtbWFjZXRoOiBjYW5ub3QgYXR0YWNoIHRoZSBIVyB0aW1lclxuIik7CisJCXRtcmF0ZSA9IDA7CisJCXByaXYtPnRtLT5mcmVxID0gMDsKKwkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0ID0gc3RtbWFjX25vX3RpbWVyX3N0YXJ0ZWQ7CisJCXByaXYtPnRtLT50aW1lcl9zdG9wID0gc3RtbWFjX25vX3RpbWVyX3N0b3BwZWQ7CisJfQorI2VuZGlmCisKKwkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFRYL1JYIGRlc2NyaXB0b3JzIGNoYWlucy4gKi8KKwlwcml2LT5kbWFfdHhfc2l6ZSA9IFNUTU1BQ19BTElHTihkbWFfdHhzaXplKTsKKwlwcml2LT5kbWFfcnhfc2l6ZSA9IFNUTU1BQ19BTElHTihkbWFfcnhzaXplKTsKKwlwcml2LT5kbWFfYnVmX3N6ID0gU1RNTUFDX0FMSUdOKGJ1Zl9zeik7CisJaW5pdF9kbWFfZGVzY19yaW5ncyhkZXYpOworCisJLyogRE1BIGluaXRpYWxpemF0aW9uIGFuZCBTVyByZXNldCAqLworCWlmICh1bmxpa2VseShwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfaW5pdChpb2FkZHIsCisJCXByaXYtPnBibCwgcHJpdi0+ZG1hX3R4X3BoeSwgcHJpdi0+ZG1hX3J4X3BoeSkgPCAwKSkgeworCisJCXByX2VycigiJXM6IERNQSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENvcHkgdGhlIE1BQyBhZGRyIGludG8gdGhlIEhXICAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF91bWFjX2FkZHIoaW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKwkvKiBJbml0aWFsaXplIHRoZSBNQUMgQ29yZSAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmNvcmVfaW5pdChpb2FkZHIpOworCisJcHJpdi0+c2h1dGRvd24gPSAwOworCisJLyogSW5pdGlhbGlzZSB0aGUgTU1DIChpZiBwcmVzZW50KSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLworCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spOworCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSyk7CisKKwkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLworCXN0bW1hY19tYWNfZW5hYmxlX3J4KGlvYWRkcik7CisJc3RtbWFjX21hY19lbmFibGVfdHgoaW9hZGRyKTsKKworCS8qIFNldCB0aGUgSFcgRE1BIG1vZGUgYW5kIHRoZSBDT0UgKi8KKwlzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHByaXYpOworCisJLyogRXh0cmEgc3RhdGlzdGljcyAqLworCW1lbXNldCgmcHJpdi0+eHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cykpOworCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKKworCS8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi8KKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IERNQSBSWC9UWCBwcm9jZXNzZXMgc3RhcnRlZC4uLlxuIiwgZGV2LT5uYW1lKTsKKwlzdG1tYWNfZG1hX3N0YXJ0X3R4KGlvYWRkcik7CisJc3RtbWFjX2RtYV9zdGFydF9yeChpb2FkZHIpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworI2VuZGlmCisJLyogRHVtcCBETUEvTUFDIHJlZ2lzdGVycyAqLworCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9tYWNfcmVncyhpb2FkZHIpOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kdW1wX2RtYV9yZWdzKGlvYWRkcik7CisJfQorCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7CisKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcmVjeWNsZSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgc3RtbWFjX3JlbGVhc2UgLSBjbG9zZSBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyCisgKiAgQGRldiA6IGRldmljZSBwb2ludGVyLgorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgaXMgdGhlIHN0b3AgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGludCBzdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KKwlpZiAocHJpdi0+cGh5ZGV2KSB7CisJCXBoeV9zdG9wKHByaXYtPnBoeWRldik7CisJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeWRldik7CisJCXByaXYtPnBoeWRldiA9IE5VTEw7CisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIFN0b3AgYW5kIHJlbGVhc2UgdGhlIHRpbWVyICovCisJc3RtbWFjX2Nsb3NlX2V4dF90aW1lcigpOworCWlmIChwcml2LT50bSAhPSBOVUxMKQorCQlrZnJlZShwcml2LT50bSk7CisjZW5kaWYKKwluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+cnhfcmVjeWNsZSk7CisKKwkvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi8KKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCS8qIFN0b3AgVFgvUlggRE1BIGFuZCBjbGVhciB0aGUgZGVzY3JpcHRvcnMgKi8KKwlzdG1tYWNfZG1hX3N0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisKKwkvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi8KKwlmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2KTsKKworCS8qIERpc2FibGUgdGhlIE1BQyBjb3JlICovCisJc3RtbWFjX21hY19kaXNhYmxlX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVG8gcGVyZm9ybSBlbXVsYXRlZCBoYXJkd2FyZSBzZWdtZW50YXRpb24gb24gc2tiLgorICovCitzdGF0aWMgaW50IHN0bW1hY19zd190c28oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpzZWdzLCAqY3Vycl9za2I7CisJaW50IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKKworCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSB3b3JzdCBjYXNlICovCisJaWYgKHVubGlrZWx5KHN0bW1hY190eF9hdmFpbChwcml2KSA8IGdzb19zZWdzKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CisJCVRYX0RCRyhLRVJOX0VSUiAiJXM6IFRTTyBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlpZiAoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDwgZ3NvX3NlZ3MpCisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCX0KKwlUWF9EQkcoIlx0c3RtbWFjX3N3X3Rzbzogc2VnbWVudGluZzogc2tiICVwIChsZW4gJWQpXG4iLAorCSAgICAgICBza2IsIHNrYi0+bGVuKTsKKworCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBwcml2LT5kZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKKwkJZ290byBzd190c29fZW5kOworCisJZG8geworCQljdXJyX3NrYiA9IHNlZ3M7CisJCXNlZ3MgPSBzZWdzLT5uZXh0OworCQlUWF9EQkcoIlx0XHRjdXJyZW50IHNrYi0+bGVuOiAlZCwgKmN1cnIgJXAsIgorCQkgICAgICAgIipuZXh0ICVwXG4iLCBjdXJyX3NrYi0+bGVuLCBjdXJyX3NrYiwgc2Vncyk7CisJCWN1cnJfc2tiLT5uZXh0ID0gTlVMTDsKKwkJc3RtbWFjX3htaXQoY3Vycl9za2IsIHByaXYtPmRldik7CisJfSB3aGlsZSAoc2Vncyk7CisKK3N3X3Rzb19lbmQ6CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzdG1tYWNfaGFuZGxlX2p1bWJvX2ZyYW1lcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIGludCBjc3VtX2luc2VydGlvbikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IHR4c2l6ZSA9IHByaXYtPmRtYV90eF9zaXplOworCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmN1cl90eCAlIHR4c2l6ZTsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKKworCWlmIChub3BhZ2VkX2xlbiA+IEJVRl9TSVpFXzhLaUIpIHsKKworCQlpbnQgYnVmMl9zaXplID0gbm9wYWdlZF9sZW4gLSBCVUZfU0laRV84S2lCOworCisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKKwkJCQkJICAgIEJVRl9TSVpFXzhLaUIsIERNQV9UT19ERVZJQ0UpOworCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBCVUZfU0laRV84S2lCLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisKKwkJZW50cnkgPSAoKytwcml2LT5jdXJfdHgpICUgdHhzaXplOworCQlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwKKwkJCQkJc2tiLT5kYXRhICsgQlVGX1NJWkVfOEtpQiwKKwkJCQkJYnVmMl9zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJZGVzYy0+ZGVzMyA9IGRlc2MtPmRlczIgKyBCVUZfU0laRV80S2lCOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwKKwkJCQkJCSAgICAgYnVmMl9zaXplLCBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihkZXNjKTsKKwkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIG5vcGFnZWRfbGVuLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJfQorCXJldHVybiBlbnRyeTsKK30KKworLyoqCisgKiAgc3RtbWFjX3htaXQ6CisgKiAgQHNrYiA6IHRoZSBzb2NrZXQgYnVmZmVyCisgKiAgQGRldiA6IGRldmljZSBwb2ludGVyCisgKiAgRGVzY3JpcHRpb24gOiBUeCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RtbWFjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZW50cnk7CisJaW50IGksIGNzdW1faW5zZXJ0aW9uID0gMDsKKwlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MsICpmaXJzdDsKKworCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPCBuZnJhZ3MgKyAxKSkgeworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdC4gKi8KKwkJCXByX2VycigiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2VcbiIsCisJCQkJX19mdW5jX18pOworCQl9CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwllbnRyeSA9IHByaXYtPmN1cl90eCAlIHR4c2l6ZTsKKworI2lmZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisJaWYgKChza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHx8IG5mcmFncykKKwkJcHJfaW5mbygic3RtbWFjIHhtaXQ6XG4iCisJCSAgICAgICAiXHRza2IgYWRkciAlcCAtIGxlbjogJWQgLSBub3BhZ2VkX2xlbjogJWRcbiIKKwkJICAgICAgICJcdG5fZnJhZ3M6ICVkIC0gaXBfc3VtbWVkOiAlZCAtICVzIGdzb1xuIiwKKwkJICAgICAgIHNrYiwgc2tiLT5sZW4sIHNrYl9oZWFkbGVuKHNrYiksIG5mcmFncywgc2tiLT5pcF9zdW1tZWQsCisJCSAgICAgICAhc2tiX2lzX2dzbyhza2IpID8gImlzbid0IiA6ICJpcyIpOworI2VuZGlmCisKKwlpZiAodW5saWtlbHkoc2tiX2lzX2dzbyhza2IpKSkKKwkJcmV0dXJuIHN0bW1hY19zd190c28ocHJpdiwgc2tiKTsKKworCWlmIChsaWtlbHkoKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSkgeworCQlpZiAobGlrZWx5KHByaXYtPnR4X2NvZSA9PSBOT19IV19DU1VNKSkKKwkJCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisJCWVsc2UKKwkJCWNzdW1faW5zZXJ0aW9uID0gMTsKKwl9CisKKwlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisJZmlyc3QgPSBkZXNjOworCisjaWZkZWYgU1RNTUFDX1hNSVRfREVCVUcKKwlpZiAoKG5mcmFncyA+IDApIHx8IChza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pKQorCQlwcl9kZWJ1Zygic3RtbWFjIHhtaXQ6IHNrYiBsZW46ICVkLCBub3BhZ2VkX2xlbjogJWQsXG4iCisJCSAgICAgICAiXHRcdG5fZnJhZ3M6ICVkLCBpcF9zdW1tZWQ6ICVkXG4iLAorCQkgICAgICAgc2tiLT5sZW4sIHNrYl9oZWFkbGVuKHNrYiksIG5mcmFncywgc2tiLT5pcF9zdW1tZWQpOworI2VuZGlmCisJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPj0gQlVGX1NJWkVfNEtpQikpIHsKKwkJZW50cnkgPSBzdG1tYWNfaGFuZGxlX2p1bWJvX2ZyYW1lcyhza2IsIGRldiwgY3N1bV9pbnNlcnRpb24pOworCQlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IG5vcGFnZWRfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZnJhZ3M7IGkrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCWludCBsZW4gPSBmcmFnLT5zaXplOworCisJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKKwkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCisJCVRYX0RCRygiXHRbZW50cnkgJWRdIHNlZ21lbnQgbGVuOiAlZFxuIiwgZW50cnksIGxlbik7CisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3BhZ2UocHJpdi0+ZGV2aWNlLCBmcmFnLT5wYWdlLAorCQkJCQkgIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQkgIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwgbGVuLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihkZXNjKTsKKwl9CisKKwkvKiBJbnRlcnJ1cHQgb24gY29tcGxldGl0aW9uIG9ubHkgZm9yIHRoZSBsYXRlc3Qgc2VnbWVudCAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmNsb3NlX3R4X2Rlc2MoZGVzYyk7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVycyAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmNsZWFyX3R4X2ljKGRlc2MpOworI2VuZGlmCisJLyogVG8gYXZvaWQgcmFpc2UgY29uZGl0aW9uICovCisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3R4X293bmVyKGZpcnN0KTsKKworCXByaXYtPmN1cl90eCsrOworCisjaWZkZWYgU1RNTUFDX1hNSVRfREVCVUcKKwlpZiAobmV0aWZfbXNnX3BrdGRhdGEocHJpdikpIHsKKwkJcHJfaW5mbygic3RtbWFjIHhtaXQ6IGN1cnJlbnQ9JWQsIGRpcnR5PSVkLCBlbnRyeT0lZCwgIgorCQkgICAgICAgImZpcnN0PSVwLCBuZnJhZ3M9JWRcbiIsCisJCSAgICAgICAocHJpdi0+Y3VyX3R4ICUgdHhzaXplKSwgKHByaXYtPmRpcnR5X3R4ICUgdHhzaXplKSwKKwkJICAgICAgIGVudHJ5LCBmaXJzdCwgbmZyYWdzKTsKKwkJZGlzcGxheV9yaW5nKHByaXYtPmRtYV90eCwgdHhzaXplKTsKKwkJcHJfaW5mbygiPj4+IGZyYW1lIHRvIGJlIHRyYW5zbWl0dGVkOiAiKTsKKwkJcHJpbnRfcGt0KHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCX0KKyNlbmRpZgorCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKKwkJVFhfREJHKCIlczogc3RvcCB0cmFuc21pdHRlZCBwYWNrZXRzXG4iLCBfX2Z1bmNfXyk7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJLyogQ1NSMSBlbmFibGVzIHRoZSB0cmFuc21pdCBETUEgdG8gY2hlY2sgZm9yIG5ldyBkZXNjcmlwdG9yICovCisJd3JpdGVsKDEsIGRldi0+YmFzZV9hZGRyICsgRE1BX1hNVF9QT0xMX0RFTUFORCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX3J4X3JlZmlsbChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgaW50IHJ4c2l6ZSA9IHByaXYtPmRtYV9yeF9zaXplOworCWludCBiZnNpemUgPSBwcml2LT5kbWFfYnVmX3N6OworCXN0cnVjdCBkbWFfZGVzYyAqcCA9IHByaXYtPmRtYV9yeDsKKworCWZvciAoOyBwcml2LT5jdXJfcnggLSBwcml2LT5kaXJ0eV9yeCA+IDA7IHByaXYtPmRpcnR5X3J4KyspIHsKKwkJdW5zaWduZWQgaW50IGVudHJ5ID0gcHJpdi0+ZGlydHlfcnggJSByeHNpemU7CisJCWlmIChsaWtlbHkocHJpdi0+cnhfc2tidWZmW2VudHJ5XSA9PSBOVUxMKSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCQkJc2tiID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+cnhfcmVjeWNsZSk7CisJCQlpZiAoc2tiID09IE5VTEwpCisJCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihwcml2LT5kZXYsCisJCQkJCQkJCWJmc2l6ZSk7CisKKwkJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCisJCQkJYnJlYWs7CisKKwkJCXByaXYtPnJ4X3NrYnVmZltlbnRyeV0gPSBza2I7CisJCQlwcml2LT5yeF9za2J1ZmZfZG1hW2VudHJ5XSA9CisJCQkgICAgZG1hX21hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBza2ItPmRhdGEsIGJmc2l6ZSwKKwkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKKworCQkJKHAgKyBlbnRyeSktPmRlczIgPSBwcml2LT5yeF9za2J1ZmZfZG1hW2VudHJ5XTsKKwkJCWlmICh1bmxpa2VseShwcml2LT5pc19nbWFjKSkgeworCQkJCWlmIChiZnNpemUgPj0gQlVGX1NJWkVfOEtpQikKKwkJCQkJKHAgKyBlbnRyeSktPmRlczMgPQorCQkJCQkgICAgKHAgKyBlbnRyeSktPmRlczIgKyBCVUZfU0laRV84S2lCOworCQkJfQorCQkJUlhfREJHKEtFUk5fSU5GTyAiXHRyZWZpbGwgZW50cnkgIyVkXG4iLCBlbnRyeSk7CisJCX0KKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3J4X293bmVyKHAgKyBlbnRyeSk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBzdG1tYWNfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBpbnQgbGltaXQpCit7CisJdW5zaWduZWQgaW50IHJ4c2l6ZSA9IHByaXYtPmRtYV9yeF9zaXplOworCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmN1cl9yeCAlIHJ4c2l6ZTsKKwl1bnNpZ25lZCBpbnQgbmV4dF9lbnRyeTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXN0cnVjdCBkbWFfZGVzYyAqcCA9IHByaXYtPmRtYV9yeCArIGVudHJ5OworCXN0cnVjdCBkbWFfZGVzYyAqcF9uZXh0OworCisjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCisJaWYgKG5ldGlmX21zZ19odyhwcml2KSkgeworCQlwcl9kZWJ1ZygiPj4+IHN0bW1hY19yeDogZGVzY3JpcHRvciByaW5nOlxuIik7CisJCWRpc3BsYXlfcmluZyhwcml2LT5kbWFfcngsIHJ4c2l6ZSk7CisJfQorI2VuZGlmCisJY291bnQgPSAwOworCXdoaWxlICghcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X293bmVyKHApKSB7CisJCWludCBzdGF0dXM7CisKKwkJaWYgKGNvdW50ID49IGxpbWl0KQorCQkJYnJlYWs7CisKKwkJY291bnQrKzsKKworCQluZXh0X2VudHJ5ID0gKCsrcHJpdi0+Y3VyX3J4KSAlIHJ4c2l6ZTsKKwkJcF9uZXh0ID0gcHJpdi0+ZG1hX3J4ICsgbmV4dF9lbnRyeTsKKwkJcHJlZmV0Y2gocF9uZXh0KTsKKworCQkvKiByZWFkIHRoZSBzdGF0dXMgb2YgdGhlIGluY29taW5nIGZyYW1lICovCisJCXN0YXR1cyA9IChwcml2LT5tYWNfdHlwZS0+b3BzLT5yeF9zdGF0dXMoJnByaXYtPmRldi0+c3RhdHMsCisJCQkJCQkJICZwcml2LT54c3RhdHMsIHApKTsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBkaXNjYXJkX2ZyYW1lKSkKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWVsc2UgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCS8qIExlbmd0aCBzaG91bGQgb21pdCB0aGUgQ1JDICovCisJCQlpbnQgZnJhbWVfbGVuID0KKwkJCSAgICBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfcnhfZnJhbWVfbGVuKHApIC0gNDsKKworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworCQkJaWYgKGZyYW1lX2xlbiA+IEVUSF9GUkFNRV9MRU4pCisJCQkJcHJfZGVidWcoIlx0UlggZnJhbWUgc2l6ZSAlZCwgQ09FIHN0YXR1czogJWRcbiIsCisJCQkJCWZyYW1lX2xlbiwgc3RhdHVzKTsKKworCQkJaWYgKG5ldGlmX21zZ19odyhwcml2KSkKKwkJCQlwcl9kZWJ1ZygiXHRkZXNjOiAlcCBbZW50cnkgJWRdIGJ1ZmY9MHgleFxuIiwKKwkJCQkJcCwgZW50cnksIHAtPmRlczIpOworI2VuZGlmCisJCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbZW50cnldOworCQkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQkJcHJfZXJyKCIlczogSW5jb25zaXN0ZW50IFJ4IGRlc2NyaXB0b3IgY2hhaW5cbiIsCisJCQkJCXByaXYtPmRldi0+bmFtZSk7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwcmVmZXRjaChza2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOworCQkJcHJpdi0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisKKwkJCXNrYl9wdXQoc2tiLCBmcmFtZV9sZW4pOworCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsCisJCQkJCSBwcml2LT5yeF9za2J1ZmZfZG1hW2VudHJ5XSwKKwkJCQkJIHByaXYtPmRtYV9idWZfc3osIERNQV9GUk9NX0RFVklDRSk7CisjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCisJCQlpZiAobmV0aWZfbXNnX3BrdGRhdGEocHJpdikpIHsKKwkJCQlwcl9pbmZvKCIgZnJhbWUgcmVjZWl2ZWQgKCVkYnl0ZXMpIiwgZnJhbWVfbGVuKTsKKwkJCQlwcmludF9wa3Qoc2tiLT5kYXRhLCBmcmFtZV9sZW4pOworCQkJfQorI2VuZGlmCisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5kZXYpOworCisJCQlpZiAodW5saWtlbHkoc3RhdHVzID09IGNzdW1fbm9uZSkpIHsKKwkJCQkvKiBhbHdheXMgZm9yIHRoZSBvbGQgbWFjIDEwLzEwMCAqLworCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfSBlbHNlIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnByaXYtPm5hcGksIHNrYik7CisJCQl9CisKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBmcmFtZV9sZW47CisJCQlwcml2LT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQl9CisJCWVudHJ5ID0gbmV4dF9lbnRyeTsKKwkJcCA9IHBfbmV4dDsJLyogdXNlIHByZWZldGNoZWQgdmFsdWVzICovCisJfQorCisJc3RtbWFjX3J4X3JlZmlsbChwcml2KTsKKworCXByaXYtPnhzdGF0cy5yeF9wa3RfbiArPSBjb3VudDsKKworCXJldHVybiBjb3VudDsKK30KKworLyoqCisgKiAgc3RtbWFjX3BvbGwgLSBzdG1tYWMgcG9sbCBtZXRob2QgKE5BUEkpCisgKiAgQG5hcGkgOiBwb2ludGVyIHRvIHRoZSBuYXBpIHN0cnVjdHVyZS4KKyAqICBAYnVkZ2V0IDogbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IHRoZSBjdXJyZW50IENQVSBjYW4gcmVjZWl2ZSBmcm9tCisgKgkgICAgICBhbGwgaW50ZXJmYWNlcy4KKyAqICBEZXNjcmlwdGlvbiA6CisgKiAgIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgdGhlIHJlY2VwdGlvbiBwcm9jZXNzLgorICogICBBbHNvIGl0IHJ1bnMgdGhlIFRYIGNvbXBsZXRpb24gdGhyZWFkCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qgc3RtbWFjX3ByaXYsIG5hcGkpOworCWludCB3b3JrX2RvbmUgPSAwOworCisJcHJpdi0+eHN0YXRzLnBvbGxfbisrOworCXN0bW1hY190eChwcml2KTsKKwl3b3JrX2RvbmUgPSBzdG1tYWNfcngocHJpdiwgYnVkZ2V0KTsKKworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJc3RtbWFjX2VuYWJsZV9pcnEocHJpdik7CisJfQorCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qKgorICogIHN0bW1hY190eF90aW1lb3V0CisgKiAgQGRldiA6IFBvaW50ZXIgdG8gbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqICBEZXNjcmlwdGlvbjogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhY2tldCB0cmFuc21pc3Npb24gZmFpbHMgdG8KKyAqICAgY29tcGxldGUgd2l0aGluIGEgcmVhc29uYWJsZSB0bXJhdGUuIFRoZSBkcml2ZXIgd2lsbCBtYXJrIHRoZSBlcnJvciBpbiB0aGUKKyAqICAgbmV0ZGV2IHN0cnVjdHVyZSBhbmQgYXJyYW5nZSBmb3IgdGhlIGRldmljZSB0byBiZSByZXNldCB0byBhIHNhbmUgc3RhdGUKKyAqICAgaW4gb3JkZXIgdG8gdHJhbnNtaXQgYSBuZXcgcGFja2V0LgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBDbGVhciBUeCByZXNvdXJjZXMgYW5kIHJlc3RhcnQgdHJhbnNtaXR0aW5nIGFnYWluICovCisJc3RtbWFjX3R4X2Vycihwcml2KTsKKwlyZXR1cm47Cit9CisKKy8qIENvbmZpZ3VyYXRpb24gY2hhbmdlcyAocGFzc2VkIG9uIGJ5IGlmY29uZmlnKSAqLworc3RhdGljIGludCBzdG1tYWNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQoreworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQkvKiBjYW4ndCBhY3Qgb24gYSBydW5uaW5nIGludGVyZmFjZSAqLworCQlyZXR1cm4gLUVCVVNZOworCisJLyogRG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIEkvTyBhZGRyZXNzICovCisJaWYgKG1hcC0+YmFzZV9hZGRyICE9IGRldi0+YmFzZV9hZGRyKSB7CisJCXByX3dhcm5pbmcoIiVzOiBjYW4ndCBjaGFuZ2UgSS9PIGFkZHJlc3NcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBEb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgSVJRICovCisJaWYgKG1hcC0+aXJxICE9IGRldi0+aXJxKSB7CisJCXByX3dhcm5pbmcoIiVzOiBjYW4ndCBjaGFuZ2UgSVJRIG51bWJlciAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogaWdub3JlIG90aGVyIGZpZWxkcyAqLworCXJldHVybiAwOworfQorCisvKioKKyAqICBzdG1tYWNfbXVsdGljYXN0X2xpc3QgLSBlbnRyeSBwb2ludCBmb3IgbXVsdGljYXN0IGFkZHJlc3NpbmcKKyAqICBAZGV2IDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgZnVuY3Rpb24gaXMgYSBkcml2ZXIgZW50cnkgcG9pbnQgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgdGhlIGtlcm5lbAorICogIHdoZW5ldmVyIG11bHRpY2FzdCBhZGRyZXNzZXMgbXVzdCBiZSBlbmFibGVkL2Rpc2FibGVkLgorICogIFJldHVybiB2YWx1ZToKKyAqICB2b2lkLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfZmlsdGVyKGRldik7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybjsKK30KKworLyoqCisgKiAgc3RtbWFjX2NoYW5nZV9tdHUgLSBlbnRyeSBwb2ludCB0byBjaGFuZ2UgTVRVIHNpemUgZm9yIHRoZSBkZXZpY2UuCisgKiAgQGRldiA6IGRldmljZSBwb2ludGVyLgorICogIEBuZXdfbXR1IDogdGhlIG5ldyBNVFUgc2l6ZSBmb3IgdGhlIGRldmljZS4KKyAqICBEZXNjcmlwdGlvbjogdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdCAoTVRVKSBpcyB1c2VkIGJ5IHRoZSBuZXR3b3JrIGxheWVyCisgKiAgdG8gZHJpdmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gRXRoZXJuZXQgaGFzIGFuIE1UVSBvZiAxNTAwIG9jdGV0cworICogIChFVEhfREFUQV9MRU4pLiBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIHdpdGggaWZjb25maWcuCisgKiAgUmV0dXJuIHZhbHVlOgorICogIDAgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcyBkZWZpbmVkIGluIGVycm5vLmgKKyAqICBmaWxlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbWF4X210dTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcHJfZXJyKCIlczogbXVzdCBiZSBzdG9wcGVkIHRvIGNoYW5nZSBpdHMgTVRVXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChwcml2LT5pc19nbWFjKQorCQltYXhfbXR1ID0gSlVNQk9fTEVOOworCWVsc2UKKwkJbWF4X210dSA9IEVUSF9EQVRBX0xFTjsKKworCWlmICgobmV3X210dSA8IDQ2KSB8fCAobmV3X210dSA+IG1heF9tdHUpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgTVRVLCBtYXggTVRVIGlzOiAlZFxuIiwgZGV2LT5uYW1lLCBtYXhfbXR1KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5tdHUgPSBuZXdfbXR1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdG1tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAodW5saWtlbHkoIWRldikpIHsKKwkJcHJfZXJyKCIlczogaW52YWxpZCBkZXYgcG9pbnRlclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKHByaXYtPmlzX2dtYWMpIHsKKwkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwkJLyogVG8gaGFuZGxlIEdNQUMgb3duIGludGVycnVwdHMgKi8KKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aG9zdF9pcnFfc3RhdHVzKGlvYWRkcik7CisJfQorCXN0bW1hY19kbWFfaW50ZXJydXB0KGRldik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyogUG9sbGluZyByZWNlaXZlIC0gdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBkaWFnbm9zdGljIHRvb2xzCisgKiB0byBhbGxvdyBuZXR3b3JrIEkvTyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICovCitzdGF0aWMgdm9pZCBzdG1tYWNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCXN0bW1hY19pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7CisJZW5hYmxlX2lycShkZXYtPmlycSk7Cit9CisjZW5kaWYKKworLyoqCisgKiAgc3RtbWFjX2lvY3RsIC0gRW50cnkgcG9pbnQgZm9yIHRoZSBJb2N0bAorICogIEBkZXY6IERldmljZSBwb2ludGVyLgorICogIEBycTogQW4gSU9DVEwgc3BlY2VmaWMgc3RydWN0dXJlLCB0aGF0IGNhbiBjb250YWluIGEgcG9pbnRlciB0bworICogIGEgcHJvcHJpZXRhcnkgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgZHJpdmVyLgorICogIEBjbWQ6IElPQ1RMIGNvbW1hbmQKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBDdXJyZW50bHkgdGhlcmUgYXJlIG5vIHNwZWNpYWwgZnVuY3Rpb25hbGl0eSBzdXBwb3J0ZWQgaW4gSU9DVEwsIGp1c3QgdGhlCisgKiAgcGh5X21paV9pb2N0bCguLi4pIGNhbiBiZSBpbnZva2VkLgorICovCitzdGF0aWMgaW50IHN0bW1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCWNhc2UgU0lPQ0dNSUlSRUc6CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJaWYgKCFwcml2LT5waHlkZXYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQlyZXQgPSBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKK3N0YXRpYyB2b2lkIHN0bW1hY192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCURCRyhwcm9iZSwgSU5GTywgIiVzOiBTZXR0aW5nIHZsZ3JwIHRvICVwXG4iLCBkZXYtPm5hbWUsIGdycCk7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXByaXYtPnZsZ3JwID0gZ3JwOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0bW1hY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IHN0bW1hY19vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCA9IHN0bW1hY194bWl0LAorCS5uZG9fc3RvcCA9IHN0bW1hY19yZWxlYXNlLAorCS5uZG9fY2hhbmdlX210dSA9IHN0bW1hY19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc3RtbWFjX211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dCA9IHN0bW1hY190eF90aW1lb3V0LAorCS5uZG9fZG9faW9jdGwgPSBzdG1tYWNfaW9jdGwsCisJLm5kb19zZXRfY29uZmlnID0gc3RtbWFjX2NvbmZpZywKKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IHN0bW1hY192bGFuX3J4X3JlZ2lzdGVyLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciA9IHN0bW1hY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGV0aF9tYWNfYWRkciwKK307CisKKy8qKgorICogc3RtbWFjX3Byb2JlIC0gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGFkYXB0ZXIgLgorICogQGRldiA6IGRldmljZSBwb2ludGVyCisgKiBEZXNjcmlwdGlvbjogVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgZm9yCisgKiB0aGUgU1RNTUFDIGRyaXZlci4gSXQgYWxzbyBjYWxscyB0aGUgbG93IGxldmVsIHJvdXRpbmVzCisgKiBpbiBvcmRlciB0byBpbml0IHRoZSBIVyAoaS5lLiB0aGUgRE1BIGVuZ2luZSkKKyAqLworc3RhdGljIGludCBzdG1tYWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZXRoZXJfc2V0dXAoZGV2KTsKKworCWRldi0+bmV0ZGV2X29wcyA9ICZzdG1tYWNfbmV0ZGV2X29wczsKKwlzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKGRldik7CisKKwlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9ISUdIRE1BKTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gbXNlY3NfdG9famlmZmllcyh3YXRjaGRvZyk7CisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwkvKiBCb3RoIG1hYzEwMCBhbmQgZ21hYyBzdXBwb3J0IHJlY2VpdmUgVkxBTiB0YWcgZGV0ZWN0aW9uICovCisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlg7CisjZW5kaWYKKwlwcml2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnX2xldmVsKTsKKworCWlmIChwcml2LT5pc19nbWFjKQorCQlwcml2LT5yeF9jc3VtID0gMTsKKworCWlmIChmbG93X2N0cmwpCisJCXByaXYtPmZsb3dfY3RybCA9IEZMT1dfQVVUTzsJLyogUlgvVFggcGF1c2Ugb24gKi8KKworCXByaXYtPnBhdXNlID0gcGF1c2U7CisJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+bmFwaSwgc3RtbWFjX3BvbGwsIDY0KTsKKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdW1hY19hZGRyKGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKwkJcHJfd2FybmluZygiXHRubyB2YWxpZCBNQUMgYWRkcmVzczsiCisJCQkicGxlYXNlLCB1c2UgaWZjb25maWcgb3Igbndod2NvbmZpZyFcbiIpOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIiVzOiBFUlJPUiAlaSByZWdpc3RlcmluZyB0aGUgZGV2aWNlXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCURCRyhwcm9iZSwgREVCVUcsICIlczogU2NhdHRlci9HYXRoZXI6ICVzIC0gSFcgY2hlY2tzdW1zOiAlc1xuIiwKKwkgICAgZGV2LT5uYW1lLCAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpID8gIm9uIiA6ICJvZmYiLAorCSAgICAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgPyAib24iIDogIm9mZiIpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzdG1tYWNfbWFjX2RldmljZV9zZXR1cAorICogQGRldiA6IGRldmljZSBwb2ludGVyCisgKiBEZXNjcmlwdGlvbjogc2VsZWN0IGFuZCBpbml0aWFsaXNlIHRoZSBtYWMgZGV2aWNlIChtYWMxMDAgb3IgR21hYykuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX21hY19kZXZpY2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpkZXZpY2U7CisKKwlpZiAocHJpdi0+aXNfZ21hYykKKwkJZGV2aWNlID0gZ21hY19zZXR1cChpb2FkZHIpOworCWVsc2UKKwkJZGV2aWNlID0gbWFjMTAwX3NldHVwKGlvYWRkcik7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5tYWNfdHlwZSA9IGRldmljZTsKKworCXByaXYtPndvbGVuYWJsZWQgPSBwcml2LT5tYWNfdHlwZS0+aHcucG10OwkvKiBQTVQgc3VwcG9ydGVkICovCisJaWYgKHByaXYtPndvbGVuYWJsZWQgPT0gUE1UX1NVUFBPUlRFRCkKKwkJcHJpdi0+d29sb3B0cyA9IFdBS0VfTUFHSUM7CQkvKiBNYWdpYyBGcmFtZSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbGF0X3N0bW1hY3BoeV9kYXRhICpwbGF0X2RhdDsKKwlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKworCXByX2RlYnVnKCJzdG1tYWNwaHlfZHZyX3Byb2JlOiBhZGRlZCBwaHkgZm9yIGJ1cyAlZFxuIiwKKwkgICAgICAgcGxhdF9kYXQtPmJ1c19pZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG1tYWNwaHlfZHZyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1tYWNwaHlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gUEhZX1JFU09VUkNFX05BTUUsCisJCSAgIH0sCisJLnByb2JlID0gc3RtbWFjcGh5X2R2cl9wcm9iZSwKKwkucmVtb3ZlID0gc3RtbWFjcGh5X2R2cl9yZW1vdmUsCit9OworCisvKioKKyAqIHN0bW1hY19hc3NvY2lhdGVfcGh5CisgKiBAZGV2OiBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkYXRhOiBwb2ludHMgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICogRGVzY3JpcHRpb246IFNjYW5zIHRocm91Z2ggYWxsIHRoZSBQSFlzIHdlIGhhdmUgcmVnaXN0ZXJlZCBhbmQgY2hlY2tzIGlmCisgKiBhbnkgYXJlIGFzc29jaWF0ZWQgd2l0aCBvdXIgTUFDLiAgSWYgc28sIHRoZW4ganVzdCBmaWxsIGluCisgKiB0aGUgYmxhbmtzIGluIG91ciBsb2NhbCBjb250ZXh0IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHN0bW1hY19hc3NvY2lhdGVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSAoc3RydWN0IHN0bW1hY19wcml2ICopZGF0YTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQ7CisKKwlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqKShkZXYtPnBsYXRmb3JtX2RhdGEpOworCisJREJHKHByb2JlLCBERUJVRywgIiVzOiBjaGVja2luZyBwaHkgZm9yIGJ1cyAlZFxuIiwgX19mdW5jX18sCisJCXBsYXRfZGF0LT5idXNfaWQpOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIHBoeSBpcyBmb3IgdGhlIE1BQyBiZWluZyBpbml0aWFsaXNlZCAqLworCWlmIChwcml2LT5idXNfaWQgIT0gcGxhdF9kYXQtPmJ1c19pZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBPSywgdGhpcyBQSFkgaXMgY29ubmVjdGVkIHRvIHRoZSBNQUMuCisJICAgR28gYWhlYWQgYW5kIGdldCB0aGUgcGFyYW1ldGVycyAqLworCURCRyhwcm9iZSwgREVCVUcsICIlczogT0suIEZvdW5kIFBIWSBjb25maWdcbiIsIF9fZnVuY19fKTsKKwlwcml2LT5waHlfaXJxID0KKwkgICAgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksICJwaHlpcnEiKTsKKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IFBIWSBpcnEgb24gYnVzICVkIGlzICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgcGxhdF9kYXQtPmJ1c19pZCwgcHJpdi0+cGh5X2lycSk7CisKKwkvKiBPdmVycmlkZSB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzIGlmIHN1cHBsaWVkIFhYWCBDUlMgWFhYCisJICogdGhpcyBuZWVkcyB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyAqLworCWlmICgocGh5YWRkciA+PSAwKSAmJiAocGh5YWRkciA8PSAzMSkpCisJCXBsYXRfZGF0LT5waHlfYWRkciA9IHBoeWFkZHI7CisKKwlwcml2LT5waHlfYWRkciA9IHBsYXRfZGF0LT5waHlfYWRkcjsKKwlwcml2LT5waHlfbWFzayA9IHBsYXRfZGF0LT5waHlfbWFzazsKKwlwcml2LT5waHlfaW50ZXJmYWNlID0gcGxhdF9kYXQtPmludGVyZmFjZTsKKwlwcml2LT5waHlfcmVzZXQgPSBwbGF0X2RhdC0+cGh5X3Jlc2V0OworCisJREJHKHByb2JlLCBERUJVRywgIiVzOiBleGl0aW5nXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7CS8qIGZvcmNlcyBleGl0IG9mIGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoKSAqLworfQorCisvKioKKyAqIHN0bW1hY19kdnJfcHJvYmUKKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IHRoZSBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCBwbGF0Zm9ybV9kZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCAqYWRkciA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0OworCisJcHJfaW5mbygiU1RNTUFDIGRyaXZlcjpcblx0cGxhdGZvcm0gcmVnaXN0cmF0aW9uLi4uICIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCXByX2luZm8oImRvbmUhXG4iKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpLAorCQkJCXBkZXYtPm5hbWUpKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCisJCSAgICAgICAiY2Fubm90IGdldCB0aGUgSS9PIGFkZHIgMHgleFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXJlcy0+c3RhcnQpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWFkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKTsKKwlpZiAoIWFkZHIpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IG1lbW9yeSBtYXBwaW5nIGZhaWxlZCBcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpKTsKKwlpZiAoIW5kZXYpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IGFsbG9jYXRpbmcgdGhlIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKKworCS8qIEdldCB0aGUgTUFDIGluZm9ybWF0aW9uICovCisJbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIm1hY2lycSIpOworCWlmIChuZGV2LT5pcnEgPT0gLUVOWElPKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBNQUMgSVJRIGNvbmZpZ3VyYXRpb24gIgorCQkgICAgICAgImluZm9ybWF0aW9uIG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJcHJpdi0+ZGV2aWNlID0gJihwZGV2LT5kZXYpOworCXByaXYtPmRldiA9IG5kZXY7CisJcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICopKChwZGV2LT5kZXYpLnBsYXRmb3JtX2RhdGEpOworCXByaXYtPmJ1c19pZCA9IHBsYXRfZGF0LT5idXNfaWQ7CisJcHJpdi0+cGJsID0gcGxhdF9kYXQtPnBibDsJLyogVExJICovCisJcHJpdi0+aXNfZ21hYyA9IHBsYXRfZGF0LT5oYXNfZ21hYzsJLyogR01BQyBpcyBvbiBib2FyZCAqLworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CisKKwkvKiBTZXQgdGhlIEkvTyBiYXNlIGFkZHIgKi8KKwluZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyOworCisJLyogTUFDIEhXIHJldmljZSBkZXRlY3Rpb24gKi8KKwlyZXQgPSBzdG1tYWNfbWFjX2RldmljZV9zZXR1cChuZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBOZXR3b3JrIERldmljZSBSZWdpc3RyYXRpb24gKi8KKwlyZXQgPSBzdG1tYWNfcHJvYmUobmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogYXNzb2NpYXRlIGEgUEhZIC0gaXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciBwbGF0Zm9ybSBidXMgKi8KKwlpZiAoIWRyaXZlcl9mb3JfZWFjaF9kZXZpY2UKKwkgICAgKCYoc3RtbWFjcGh5X2RyaXZlci5kcml2ZXIpLCBOVUxMLCAodm9pZCAqKXByaXYsCisJICAgICBzdG1tYWNfYXNzb2NpYXRlX3BoeSkpIHsKKwkJcHJfZXJyKCJObyBQSFkgZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE1BQyFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2LT5maXhfbWFjX3NwZWVkID0gcGxhdF9kYXQtPmZpeF9tYWNfc3BlZWQ7CisJcHJpdi0+YnNwX3ByaXYgPSBwbGF0X2RhdC0+YnNwX3ByaXY7CisKKwlwcl9pbmZvKCJcdCVzIC0gKGRldi4gbmFtZTogJXMgLSBpZDogJWQsIElSUSAjJWRcbiIKKwkgICAgICAgIlx0SU8gYmFzZSBhZGRyOiAweCUwOHgpXG4iLCBuZGV2LT5uYW1lLCBwZGV2LT5uYW1lLAorCSAgICAgICBwZGV2LT5pZCwgbmRldi0+aXJxLCAodW5zaWduZWQgaW50KWFkZHIpOworCisJLyogTURJTyBidXMgUmVnaXN0cmF0aW9uICovCisJcHJfZGVidWcoIlx0TURJTyBidXMgKGlkOiAlZCkuLi4iLCBwcml2LT5idXNfaWQpOworCXJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygicmVnaXN0ZXJlZCFcbiIpOworCitvdXQ6CisJaWYgKHJldCA8IDApIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSk7CisJCWlmIChhZGRyICE9IE5VTEwpCisJCQlpb3VubWFwKGFkZHIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3RtbWFjX2R2cl9yZW1vdmUKKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IHRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBUWC9SWCBwcm9jZXNzZXMsIGRpc2FibGVzIHRoZSBNQUMgUlgvVFgKKyAqIGNoYW5nZXMgdGhlIGxpbmsgc3RhdHVzLCByZWxlYXNlcyB0aGUgRE1BIGRlc2NyaXB0b3IgcmluZ3MsCisgKiB1bnJlZ2lzdGVycyB0aGUgTURJTyBidXMgYW5kIHVubWFwcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlwcl9pbmZvKCIlczpcblx0cmVtb3ZpbmcgZHJpdmVyIiwgX19mdW5jX18pOworCisJc3RtbWFjX2RtYV9zdG9wX3J4KG5kZXYtPmJhc2VfYWRkcik7CisJc3RtbWFjX2RtYV9zdG9wX3R4KG5kZXYtPmJhc2VfYWRkcik7CisKKwlzdG1tYWNfbWFjX2Rpc2FibGVfcngobmRldi0+YmFzZV9hZGRyKTsKKwlzdG1tYWNfbWFjX2Rpc2FibGVfdHgobmRldi0+YmFzZV9hZGRyKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCisJc3RtbWFjX21kaW9fdW5yZWdpc3RlcihuZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCisJaW91bm1hcCgodm9pZCAqKW5kZXYtPmJhc2VfYWRkcik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkpOworCisJZnJlZV9uZXRkZXYobmRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzdG1tYWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGRpc19pYyA9IDA7CisKKwlpZiAoIWRldiB8fCAhbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJaWYgKHByaXYtPnBoeWRldikKKwkJCXBoeV9zdG9wKHByaXYtPnBoeWRldik7CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CisJCWRpc19pYyA9IDE7CisjZW5kaWYKKwkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKworCQkvKiBTdG9wIFRYL1JYIERNQSAqLworCQlzdG1tYWNfZG1hX3N0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCQlzdG1tYWNfZG1hX3N0b3BfcngoZGV2LT5iYXNlX2FkZHIpOworCQkvKiBDbGVhciB0aGUgUngvVHggZGVzY3JpcHRvcnMgKi8KKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aW5pdF9yeF9kZXNjKHByaXYtPmRtYV9yeCwKKwkJCQkJCSAgcHJpdi0+ZG1hX3J4X3NpemUsIGRpc19pYyk7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsCisJCQkJCQkgIHByaXYtPmRtYV90eF9zaXplKTsKKworCQlzdG1tYWNfbWFjX2Rpc2FibGVfdHgoZGV2LT5iYXNlX2FkZHIpOworCisJCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmKHBkZXYtPmRldikpKSB7CisJCQkvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqLworCQkJaWYgKHByaXYtPndvbGVuYWJsZWQgPT0gUE1UX1NVUFBPUlRFRCkKKwkJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wbXQoZGV2LT5iYXNlX2FkZHIsCisJCQkJCQkJIHByaXYtPndvbG9wdHMpOworCQl9IGVsc2UgeworCQkJc3RtbWFjX21hY19kaXNhYmxlX3J4KGRldi0+YmFzZV9hZGRyKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPnNodXRkb3duID0gMTsKKwkJLyogQWx0aG91Z2ggdGhpcyBjYW4gYXBwZWFyIHNsaWdodGx5IHJlZHVuZGFudCBpdCBhY3R1YWxseQorCQkgKiBtYWtlcyBmYXN0IHRoZSBzdGFuZGJ5IG9wZXJhdGlvbiBhbmQgZ3VhcmFudGVlcyB0aGUgZHJpdmVyCisJCSAqIHdvcmtpbmcgaWYgaGliZXJuYXRpb24gaXMgb24gbWVkaWEuICovCisJCXN0bW1hY19yZWxlYXNlKGRldik7CisJfQorCisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCWlmIChwcml2LT5zaHV0ZG93bikgeworCQkvKiBSZS1vcGVuIHRoZSBpbnRlcmZhY2UgYW5kIHJlLWluaXQgdGhlIE1BQy9ETUEKKwkJICAgYW5kIHRoZSByaW5ncy4gKi8KKwkJc3RtbWFjX29wZW4oZGV2KTsKKwkJZ290byBvdXRfcmVzdW1lOworCX0KKworCS8qIFBvd2VyIERvd24gYml0LCBpbnRvIHRoZSBQTSByZWdpc3RlciwgaXMgY2xlYXJlZAorCSAqIGF1dG9tYXRpY2FsbHkgYXMgc29vbiBhcyBhIG1hZ2ljIHBhY2tldCBvciBhIFdha2UtdXAgZnJhbWUKKwkgKiBpcyByZWNlaXZlZC4gQW55d2F5LCBpdCdzIGJldHRlciB0byBtYW51YWxseSBjbGVhcgorCSAqIHRoaXMgYml0IGJlY2F1c2UgaXQgY2FuIGdlbmVyYXRlIHByb2JsZW1zIHdoaWxlIHJlc3VtaW5nCisJICogZnJvbSBhbm90aGVyIGRldmljZXMgKGUuZy4gc2VyaWFsIGNvbnNvbGUpLiAqLworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmKHBkZXYtPmRldikpKQorCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQorCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cG10KGRldi0+YmFzZV9hZGRyLCAwKTsKKworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKworCS8qIEVuYWJsZSB0aGUgTUFDIGFuZCBETUEgKi8KKwlzdG1tYWNfbWFjX2VuYWJsZV9yeChpb2FkZHIpOworCXN0bW1hY19tYWNfZW5hYmxlX3R4KGlvYWRkcik7CisJc3RtbWFjX2RtYV9zdGFydF90eChpb2FkZHIpOworCXN0bW1hY19kbWFfc3RhcnRfcngoaW9hZGRyKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKKyNlbmRpZgorCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKKworCWlmIChwcml2LT5waHlkZXYpCisJCXBoeV9zdGFydChwcml2LT5waHlkZXYpOworCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworb3V0X3Jlc3VtZToKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RtbWFjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLAorCQkgICB9LAorCS5wcm9iZSA9IHN0bW1hY19kdnJfcHJvYmUsCisJLnJlbW92ZSA9IHN0bW1hY19kdnJfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc3RtbWFjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHN0bW1hY19yZXN1bWUsCisjZW5kaWYKKworfTsKKworLyoqCisgKiBzdG1tYWNfaW5pdF9tb2R1bGUgLSBFbnRyeSBwb2ludCBmb3IgdGhlIGRyaXZlcgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCBzdG1tYWNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3RtbWFjcGh5X2RyaXZlcikpIHsKKwkJcHJfZXJyKCJObyBQSFkgZGV2aWNlcyByZWdpc3RlcmVkIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3RtbWFjX2RyaXZlcik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzdG1tYWNfY2xlYW51cF9tb2R1bGUgLSBDbGVhbnVwIHJvdXRpbmUgZm9yIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjbGVhbnVwIHJvdXRpbmUgZm9yIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBzdG1tYWNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3RtbWFjcGh5X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnN0bW1hY19kcml2ZXIpOworfQorCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgc3RtbWFjX2NtZGxpbmVfb3B0KGNoYXIgKnN0cikKK3sKKwljaGFyICpvcHQ7CisKKwlpZiAoIXN0ciB8fCAhKnN0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisJd2hpbGUgKChvcHQgPSBzdHJzZXAoJnN0ciwgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoIXN0cm5jbXAob3B0LCAiZGVidWc6IiwgNikpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA2LCAwLCAodW5zaWduZWQgbG9uZyAqKSZkZWJ1Zyk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInBoeWFkZHI6IiwgOCkpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA4LCAwLCAodW5zaWduZWQgbG9uZyAqKSZwaHlhZGRyKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAiZG1hX3R4c2l6ZToiLCAxMSkpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyAxMSwgMCwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmZG1hX3R4c2l6ZSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImRtYV9yeHNpemU6IiwgMTEpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgMTEsIDAsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJmRtYV9yeHNpemUpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJidWZfc3o6IiwgNykpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA3LCAwLCAodW5zaWduZWQgbG9uZyAqKSZidWZfc3opOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ0YzoiLCAzKSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDMsIDAsICh1bnNpZ25lZCBsb25nICopJnRjKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAidHhfY29lOiIsIDcpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgNywgMCwgKHVuc2lnbmVkIGxvbmcgKikmdHhfY29lKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAid2F0Y2hkb2c6IiwgOSkpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA5LCAwLCAodW5zaWduZWQgbG9uZyAqKSZ3YXRjaGRvZyk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImZsb3dfY3RybDoiLCAxMCkpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyAxMCwgMCwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmZmxvd19jdHJsKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAicGF1c2U6IiwgNikpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA2LCAwLCAodW5zaWduZWQgbG9uZyAqKSZwYXVzZSk7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ0bXJhdGU6IiwgNykpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA3LCAwLCAodW5zaWduZWQgbG9uZyAqKSZ0bXJhdGUpOworI2VuZGlmCisJfQorCXJldHVybiAwOworfQorCitfX3NldHVwKCJzdG1tYWNldGg9Iiwgc3RtbWFjX2NtZGxpbmVfb3B0KTsKKyNlbmRpZgorCittb2R1bGVfaW5pdChzdG1tYWNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoc3RtbWFjX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVE1NQUMgMTAvMTAwLzEwMDAgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTg1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtMCwwICsxLDIxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgU1RNTUFDIEV0aGVybmV0IERyaXZlciAtLSBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbgorICBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgcmVnaXN0ZXJzCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IENhcmwgU2hhdyA8Y2FybC5zaGF3QHN0LmNvbT4KKyAgTWFpbnRhaW5lcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSAic3RtbWFjLmgiCisKKyNkZWZpbmUgTUlJX0JVU1kgMHgwMDAwMDAwMQorI2RlZmluZSBNSUlfV1JJVEUgMHgwMDAwMDAwMgorCisvKioKKyAqIHN0bW1hY19tZGlvX3JlYWQKKyAqIEBidXM6IHBvaW50cyB0byB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUKKyAqIEBwaHlhZGRyOiBNSUkgYWRkciByZWcgYml0cyAxNS0xMQorICogQHBoeXJlZzogTUlJIGFkZHIgcmVnIGJpdHMgMTAtNgorICogRGVzY3JpcHRpb246IGl0IHJlYWRzIGRhdGEgZnJvbSB0aGUgTUlJIHJlZ2lzdGVyIGZyb20gd2l0aGluIHRoZSBwaHkgZGV2aWNlLgorICogRm9yIHRoZSA3MTExIEdNQUMsIHdlIG11c3Qgc2V0IHRoZSBiaXQgMCBpbiB0aGUgTUlJIGFkZHJlc3MgcmVnaXN0ZXIgd2hpbGUKKyAqIGFjY2Vzc2luZyB0aGUgUEhZIHJlZ2lzdGVycy4KKyAqIEZvcnR1bmF0ZWx5LCBpdCBzZWVtcyB0aGlzIGhhcyBubyBkcmF3YmFjayBmb3IgdGhlIDcxMDkgTUFDLgorICovCitzdGF0aWMgaW50IHN0bW1hY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeWFkZHIsIGludCBwaHlyZWcpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBidXMtPnByaXY7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5hZGRyOworCXVuc2lnbmVkIGludCBtaWlfZGF0YSA9IHByaXYtPm1hY190eXBlLT5ody5taWkuZGF0YTsKKworCWludCBkYXRhOworCXUxNiByZWdWYWx1ZSA9ICgoKHBoeWFkZHIgPDwgMTEpICYgKDB4MDAwMEY4MDApKSB8CisJCQkoKHBoeXJlZyA8PCA2KSAmICgweDAwMDAwN0MwKSkpOworCXJlZ1ZhbHVlIHw9IE1JSV9CVVNZOwkvKiBpbiBjYXNlIG9mIEdNQUMgKi8KKworCWRvIHt9IHdoaWxlICgoKHJlYWRsKGlvYWRkciArIG1paV9hZGRyZXNzKSkgJiBNSUlfQlVTWSkgPT0gMSk7CisJd3JpdGVsKHJlZ1ZhbHVlLCBpb2FkZHIgKyBtaWlfYWRkcmVzcyk7CisJZG8ge30gd2hpbGUgKCgocmVhZGwoaW9hZGRyICsgbWlpX2FkZHJlc3MpKSAmIE1JSV9CVVNZKSA9PSAxKTsKKworCS8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgTUlJIGRhdGEgcmVnaXN0ZXIgKi8KKwlkYXRhID0gKGludClyZWFkbChpb2FkZHIgKyBtaWlfZGF0YSk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBzdG1tYWNfbWRpb193cml0ZQorICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZQorICogQHBoeWFkZHI6IE1JSSBhZGRyIHJlZyBiaXRzIDE1LTExCisgKiBAcGh5cmVnOiBNSUkgYWRkciByZWcgYml0cyAxMC02CisgKiBAcGh5ZGF0YTogcGh5IGRhdGEKKyAqIERlc2NyaXB0aW9uOiBpdCB3cml0ZXMgdGhlIGRhdGEgaW50byB0aGUgTUlJIHJlZ2lzdGVyIGZyb20gd2l0aGluIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeWFkZHIsIGludCBwaHlyZWcsCisJCQkgICAgIHUxNiBwaHlkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmRhdGE7CisKKwl1MTYgdmFsdWUgPQorCSAgICAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfCAoKHBoeXJlZyA8PCA2KSAmICgweDAwMDAwN0MwKSkpCisJICAgIHwgTUlJX1dSSVRFOworCisJdmFsdWUgfD0gTUlJX0JVU1k7CisKKwkvKiBXYWl0IHVudGlsIGFueSBleGlzdGluZyBNSUkgb3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCisJZG8ge30gd2hpbGUgKCgocmVhZGwoaW9hZGRyICsgbWlpX2FkZHJlc3MpKSAmIE1JSV9CVVNZKSA9PSAxKTsKKworCS8qIFNldCB0aGUgTUlJIGFkZHJlc3MgcmVnaXN0ZXIgdG8gd3JpdGUgKi8KKwl3cml0ZWwocGh5ZGF0YSwgaW9hZGRyICsgbWlpX2RhdGEpOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgbWlpX2FkZHJlc3MpOworCisJLyogV2FpdCB1bnRpbCBhbnkgZXhpc3RpbmcgTUlJIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLworCWRvIHt9IHdoaWxlICgoKHJlYWRsKGlvYWRkciArIG1paV9hZGRyZXNzKSkgJiBNSUlfQlVTWSkgPT0gMSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzdG1tYWNfbWRpb19yZXNldAorICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IHJlc2V0IHRoZSBNSUkgYnVzCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7CisKKwlpZiAocHJpdi0+cGh5X3Jlc2V0KSB7CisJCXByX2RlYnVnKCJzdG1tYWNfbWRpb19yZXNldDogY2FsbGluZyBwaHlfcmVzZXRcbiIpOworCQlwcml2LT5waHlfcmVzZXQocHJpdi0+YnNwX3ByaXYpOworCX0KKworCS8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBwcm9ibGVtcyB3aXRoIHRoZSBTVEUxMDFQIFBIWS4KKwkgKiBJdCBkb2Vzbid0IGNvbXBsZXRlIGl0cyByZXNldCB1bnRpbCBhdCBsZWFzdCBvbmUgY2xvY2sgY3ljbGUKKwkgKiBvbiBNREMsIHNvIHBlcmZvcm0gYSBkdW1teSBtZGlvIHJlYWQuCisJICovCisJd3JpdGVsKDAsIGlvYWRkciArIG1paV9hZGRyZXNzKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHN0bW1hY19tZGlvX3JlZ2lzdGVyCisgKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBpdCByZWdpc3RlcnMgdGhlIE1JSSBidXMKKyAqLworaW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOworCWludCAqaXJxbGlzdDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgYWRkciwgZm91bmQ7CisKKwluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmIChuZXdfYnVzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmIChpcnFsaXN0ID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBpcnFsaXN0X2FsbG9jX2ZhaWw7CisJfQorCisJLyogQXNzaWduIElSUSB0byBwaHkgYXQgYWRkcmVzcyBwaHlfYWRkciAqLworCWlmIChwcml2LT5waHlfYWRkciAhPSAtMSkKKwkJaXJxbGlzdFtwcml2LT5waHlfYWRkcl0gPSBwcml2LT5waHlfaXJxOworCisJbmV3X2J1cy0+bmFtZSA9ICJTVE1NQUMgTUlJIEJ1cyI7CisJbmV3X2J1cy0+cmVhZCA9ICZzdG1tYWNfbWRpb19yZWFkOworCW5ld19idXMtPndyaXRlID0gJnN0bW1hY19tZGlvX3dyaXRlOworCW5ld19idXMtPnJlc2V0ID0gJnN0bW1hY19tZGlvX3Jlc2V0OworCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHByaXYtPmJ1c19pZCk7CisJbmV3X2J1cy0+cHJpdiA9IG5kZXY7CisJbmV3X2J1cy0+aXJxID0gaXJxbGlzdDsKKwluZXdfYnVzLT5waHlfbWFzayA9IHByaXYtPnBoeV9tYXNrOworCW5ld19idXMtPnBhcmVudCA9IHByaXYtPmRldmljZTsKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOworCWlmIChlcnIgIT0gMCkgeworCQlwcl9lcnIoIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsIG5ld19idXMtPm5hbWUpOworCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOworCX0KKworCXByaXYtPm1paSA9IG5ld19idXM7CisKKwlmb3VuZCA9IDA7CisJZm9yIChhZGRyID0gMDsgYWRkciA8IDMyOyBhZGRyKyspIHsKKwkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IG5ld19idXMtPnBoeV9tYXBbYWRkcl07CisJCWlmIChwaHlkZXYpIHsKKwkJCWlmIChwcml2LT5waHlfYWRkciA9PSAtMSkgeworCQkJCXByaXYtPnBoeV9hZGRyID0gYWRkcjsKKwkJCQlwaHlkZXYtPmlycSA9IHByaXYtPnBoeV9pcnE7CisJCQkJaXJxbGlzdFthZGRyXSA9IHByaXYtPnBoeV9pcnE7CisJCQl9CisJCQlwcl9pbmZvKCIlczogUEhZIElEICUwOHggYXQgJWQgSVJRICVkICglcyklc1xuIiwKKwkJCSAgICAgICBuZGV2LT5uYW1lLCBwaHlkZXYtPnBoeV9pZCwgYWRkciwKKwkJCSAgICAgICBwaHlkZXYtPmlycSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKKwkJCSAgICAgICAoYWRkciA9PSBwcml2LT5waHlfYWRkcikgPyAiIGFjdGl2ZSIgOiAiIik7CisJCQlmb3VuZCA9IDE7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKQorCQlwcl93YXJuaW5nKCIlczogTm8gUEhZIGZvdW5kXG4iLCBuZGV2LT5uYW1lKTsKKworCXJldHVybiAwOworYnVzX3JlZ2lzdGVyX2ZhaWw6CisJa2ZyZWUoaXJxbGlzdCk7CitpcnFsaXN0X2FsbG9jX2ZhaWw6CisJa2ZyZWUobmV3X2J1cyk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzdG1tYWNfbWRpb191bnJlZ2lzdGVyCisgKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBpdCB1bnJlZ2lzdGVycyB0aGUgTUlJIGJ1cworICovCitpbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCW1kaW9idXNfdW5yZWdpc3Rlcihwcml2LT5taWkpOworCXByaXYtPm1paS0+cHJpdiA9IE5VTEw7CisJa2ZyZWUocHJpdi0+bWlpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MzhjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBleHRlcm5hbCB0aW1lciBzdXBwb3J0LgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlICJzdG1tYWNfdGltZXIuaCIKKworc3RhdGljIHZvaWQgc3RtbWFjX3RpbWVyX2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKKworCXN0bW1hY19zY2hlZHVsZShkZXYpOworCisJcmV0dXJuOworfQorCisjZGVmaW5lIFNUTU1BQ19USU1FUl9NU0codGltZXIsIGZyZXEpIFwKK3ByaW50ayhLRVJOX0lORk8gInN0bW1hY190aW1lcjogJXMgVGltZXIgT04gKGZyZXEgJWRIeilcbiIsIHRpbWVyLCBmcmVxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NUTU1BQ19SVENfVElNRVIpCisjaW5jbHVkZSA8bGludXgvcnRjLmg+CitzdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UgKnN0bW1hY19ydGM7CitzdGF0aWMgcnRjX3Rhc2tfdCBzdG1tYWNfdGFzazsKKworc3RhdGljIHZvaWQgc3RtbWFjX3J0Y19zdGFydCh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpCit7CisJcnRjX2lycV9zZXRfZnJlcShzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2ssIG5ld19mcmVxKTsKKwlydGNfaXJxX3NldF9zdGF0ZShzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2ssIDEpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX3J0Y19zdG9wKHZvaWQpCit7CisJcnRjX2lycV9zZXRfc3RhdGUoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCAwKTsKKwlyZXR1cm47Cit9CisKK2ludCBzdG1tYWNfb3Blbl9leHRfdGltZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHN0bW1hY190aW1lciAqdG0pCit7CisJc3RtbWFjX3Rhc2sucHJpdmF0ZV9kYXRhID0gZGV2OworCXN0bW1hY190YXNrLmZ1bmMgPSBzdG1tYWNfdGltZXJfaGFuZGxlcjsKKworCXN0bW1hY19ydGMgPSBydGNfY2xhc3Nfb3BlbihDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKTsKKwlpZiAoc3RtbWFjX3J0YyA9PSBOVUxMKSB7CisJCXByX2Vycm9yKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcnRjX2lycV9yZWdpc3RlcihzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2spOworCisJLyogUGVyaW9kaWMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKChydGNfaXJxX3NldF9mcmVxKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgdG0tPmZyZXEpIDwgMCkpIHsKKwkJcHJfZXJyb3IoInNldCBwZXJpb2RpYyBmYWlsZWRcbiIpOworCQlydGNfaXJxX3VucmVnaXN0ZXIoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrKTsKKwkJcnRjX2NsYXNzX2Nsb3NlKHN0bW1hY19ydGMpOworCQlyZXR1cm4gLTE7CisJfQorCisJU1RNTUFDX1RJTUVSX01TRyhDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFLCB0bS0+ZnJlcSk7CisKKwl0bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfcnRjX3N0YXJ0OworCXRtLT50aW1lcl9zdG9wID0gc3RtbWFjX3J0Y19zdG9wOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdG1tYWNfY2xvc2VfZXh0X3RpbWVyKHZvaWQpCit7CisJcnRjX2lycV9zZXRfc3RhdGUoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCAwKTsKKwlydGNfaXJxX3VucmVnaXN0ZXIoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrKTsKKwlydGNfY2xhc3NfY2xvc2Uoc3RtbWFjX3J0Yyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NUTU1BQ19UTVVfVElNRVIpCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjZGVmaW5lIFRNVV9DSEFOTkVMICJ0bXUyX2NsayIKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0aW1lcl9jbG9jazsKKworc3RhdGljIHZvaWQgc3RtbWFjX3RtdV9zdGFydCh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpCit7CisJY2xrX3NldF9yYXRlKHRpbWVyX2Nsb2NrLCBuZXdfZnJlcSk7CisJY2xrX2VuYWJsZSh0aW1lcl9jbG9jayk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfdG11X3N0b3Aodm9pZCkKK3sKKwljbGtfZGlzYWJsZSh0aW1lcl9jbG9jayk7CisJcmV0dXJuOworfQorCitpbnQgc3RtbWFjX29wZW5fZXh0X3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzdG1tYWNfdGltZXIgKnRtKQoreworCXRpbWVyX2Nsb2NrID0gY2xrX2dldChOVUxMLCBUTVVfQ0hBTk5FTCk7CisKKwlpZiAodGltZXJfY2xvY2sgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHRtdTJfcmVnaXN0ZXJfdXNlcihzdG1tYWNfdGltZXJfaGFuZGxlciwgKHZvaWQgKilkZXYpIDwgMCkgeworCQl0aW1lcl9jbG9jayA9IE5VTEw7CisJCXJldHVybiAtMTsKKwl9CisKKwlTVE1NQUNfVElNRVJfTVNHKCJUTVUyIiwgdG0tPmZyZXEpOworCXRtLT50aW1lcl9zdGFydCA9IHN0bW1hY190bXVfc3RhcnQ7CisJdG0tPnRpbWVyX3N0b3AgPSBzdG1tYWNfdG11X3N0b3A7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHN0bW1hY19jbG9zZV9leHRfdGltZXIodm9pZCkKK3sKKwljbGtfZGlzYWJsZSh0aW1lcl9jbG9jayk7CisJdG11Ml91bnJlZ2lzdGVyX3VzZXIoKTsKKwljbGtfcHV0KHRpbWVyX2Nsb2NrKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTVjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgU1RNTUFDIGV4dGVybmFsIHRpbWVyIEhlYWRlciBGaWxlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3Qgc3RtbWFjX3RpbWVyIHsKKwl2b2lkICgqdGltZXJfc3RhcnQpICh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpOworCXZvaWQgKCp0aW1lcl9zdG9wKSAodm9pZCk7CisJdW5zaWduZWQgaW50IGZyZXE7Cit9OworCisvKiBPcGVuIHRoZSBIVyB0aW1lciBkZXZpY2UgYW5kIHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcyAqLworaW50IHN0bW1hY19vcGVuX2V4dF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bSk7CisvKiBTdG9wIHRoZSB0aW1lciBhbmQgcmVsZWFzZSBpdCAqLworaW50IHN0bW1hY19jbG9zZV9leHRfdGltZXIodm9pZCk7CisvKiBGdW5jdGlvbiB1c2VkIGZvciBzY2hlZHVsaW5nIHRhc2sgd2l0aGluIHRoZSBzdG1tYWMgKi8KK3ZvaWQgc3RtbWFjX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjaWYgZGVmaW5lZChDT05GSUdfU1RNTUFDX1RNVV9USU1FUikKK2V4dGVybiBpbnQgdG11Ml9yZWdpc3Rlcl91c2VyKHZvaWQgKmZudCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCB0bXUyX3VucmVnaXN0ZXJfdXNlcih2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCAzNmNiMjQyLi43NWZhMzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMTE0NCw5ICsxMTQ0LDE2IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAkJCWNoYXIgKipwcnBoYXNlID0gcHJpbnRwaGFzZTsKIAkJCWNoYXIgKipwcmVycm9yID0gcHJpbnRlcnJvcjsKKwkJCWludCBwbnIgPSBlcnIgLyAxNiAtIDE7CisJCQlpbnQgZW5yID0gZXJyICUgMTYgLSAxOwogCQkJRFBSSU5USygiVFIgQWRhcHRlciBtaXNjIG9wZW4gZmFpbHVyZSwgZXJyb3IgY29kZSA9ICIpOwotCQkJcHJpbnRrKCIweCV4LCBQaGFzZTogJXMsIEVycm9yOiAlc1xuIiwKLQkJCQllcnIsIHBycGhhc2VbZXJyLzE2IC0xXSwgcHJlcnJvcltlcnIlMTYgLTFdKTsKKwkJCWlmIChwbnIgPCAwIHx8IHBuciA+PSBBUlJBWV9TSVpFKHByaW50cGhhc2UpIHx8CisJCQkJCWVuciA8IDAgfHwKKwkJCQkJZW5yID49IEFSUkFZX1NJWkUocHJpbnRlcnJvcikpCisJCQkJcHJpbnRrKCIweCV4LCBpbnZhbGlkIFBoYXNlL0Vycm9yLiIsIGVycik7CisJCQllbHNlCisJCQkJcHJpbnRrKCIweCV4LCBQaGFzZTogJXMsIEVycm9yOiAlc1xuIiwgZXJyLAorCQkJCQkJcHJwaGFzZVtwbnJdLCBwcmVycm9yW2Vucl0pOwogCQkJcHJpbnRrKCIgcmV0cnlpbmcgYWZ0ZXIgJWRzIGRlbGF5Li4uXG4iLAogCQkJCQlUUl9SRVRSWV9JTlRFUlZBTC9IWik7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwppbmRleCBjNDcyMzdjLi4zMmQ5MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJICAgICogRXJpY3Nzb24gTW9iaWxlIEJyb2FkYmFuZCBNb2R1bGUgKGFsbCB2YXJpYW50cykKICAJICAgICogTW90b3JvbGEgKERNMTAwIGFuZCBTQjQxMDApCiAgCSAgICAqIEJyb2FkY29tIENhYmxlIE1vZGVtIChyZWZlcmVuY2UgZGVzaWduKQotCSAgICAqIFRvc2hpYmEgKFBDWDExMDBVIGFuZCBGMzUwN2cpCisJICAgICogVG9zaGliYSAoUENYMTEwMFUgYW5kIEYzNTA3Zy9GMzYwN2d3KQogCSAgICAqIC4uLgogCiAJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCAiZXRoWCIsIHdoZXJlIFggZGVwZW5kcyBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDRhNmFmZjUuLjIxZTFiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTU0NCwyMCArNTQ0LDYwIEBACiAJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKIH0sIHsKLQkvKiBFcmljc3NvbiBGMzMwNyAqLworCS8qIEVyaWNzc29uIEYzNjA3Z3cgdmVyIDIgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIDB4MTkwNSwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBFcmljc3NvbiBGMzYwN2d3IHZlciAzICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwYmRiLCAweDE5MDYsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCiB9LCB7CisJLyogRXJpY3Nzb24gRjMzMDcgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIDB4MTkwYSwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBFcmljc3NvbiBGMzMwNyB2ZXIgMiAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGJkYiwgMHgxOTA5LCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLAorfSwgeworCS8qIEVyaWNzc29uIEMzNjA3dyAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGJkYiwgMHgxMDQ5LCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLAorfSwgewogCS8qIFRvc2hpYmEgRjM1MDdnICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMGIsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCiB9LCB7CisJLyogVG9zaGliYSBGMzYwN2d3ICovCisJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMGMsIFVTQl9DTEFTU19DT01NLAorCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCit9LCB7CisJLyogVG9zaGliYSBGMzYwN2d3IHZlciAyICovCisJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMTEsIFVTQl9DTEFTU19DT01NLAorCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCit9LCB7CiAJLyogRGVsbCBGMzUwN2cgKi8KIAlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE0NywgVVNCX0NMQVNTX0NPTU0sCiAJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBEZWxsIEYzNjA3Z3cgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE4MywgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBEZWxsIEYzNjA3Z3cgdmVyIDIgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE4NCwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDcyNDcwZjcuLmEyYjMwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTY0OSw2ICs2NDksMTAgQEAKIAlVU0JfREVWSUNFKDB4MGZlNiwgMHg4MTAxKSwJLyogRE05NjAxIFVTQiB0byBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgKi8KIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCisJeworCSBVU0JfREVWSUNFKDB4MGE0NiwgMHg5MDAwKSwJLyogRE05MDAwRSAqLworCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCisJIH0sCiAJe30sCQkJLy8gRU5ECiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwppbmRleCA2ZmRhYmE4Li5lZDRhNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTYyLDggKzYyLDExIEBACiBzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IHVzYl9kZXZfaWRbXSA9IHsKICNkZWZpbmUJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykJXAogCXsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSwKKyNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcCisJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykKICNpbmNsdWRlICJwZWdhc3VzLmgiCiAjdW5kZWYJUEVHQVNVU19ERVYKKyN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwogCXtOVUxMLCAwLCAwLCAwfSwKIAl7TlVMTCwgMCwgMCwgMH0KIH07CkBAIC03MSw4ICs3NCwxOCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7CiAjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFwKIAl7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sCisvKgorICogVGhlIEJlbGtpbiBGOFQwMTJ4eDEgYmx1ZXRvb3RoIGFkYXB0b3IgaGFzIHRoZSBzYW1lIHZlbmRvciBhbmQgcHJvZHVjdAorICogSURzIGFzIHRoZSBCZWxraW4gRjVENTA1MCwgc28gd2UgbmVlZCB0byB0ZWFjaCB0aGUgcGVnYXN1cyBkcml2ZXIgdG8KKyAqIGlnbm9yZSBhZGFwdG9ycyBiZWxvbmdpbmcgdG8gdGhlICJXaXJlbGVzcyIgY2xhc3MgMHhFMC4gRm9yIHRoaXMgb25lCisgKiBjYXNlIGFueXdheSwgc2VlaW5nIGFzIHRoZSBwZWdhc3VzIGlzIGZvciAiV2lyZWQiIGFkYXB0b3JzLgorICovCisjZGVmaW5lIFBFR0FTVVNfREVWX0NMQVNTKHBuLCB2aWQsIHBpZCwgZGNsYXNzLCBmbGFncykgXAorCXsubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyksIFwKKwkuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWQsIC5iRGV2aWNlQ2xhc3MgPSBkY2xhc3N9LAogI2luY2x1ZGUgInBlZ2FzdXMuaCIKICN1bmRlZglQRUdBU1VTX0RFVgorI3VuZGVmCVBFR0FTVVNfREVWX0NMQVNTCiAJe30sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAppbmRleCBmOTY4YzgzLi41ZDAyZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKQEAgLTIwMiw3ICsyMDIsMTEgQEAKIAkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIkFsbGllZCBUZWxlc3luIEludC4gQVQtVVNCMTAwIiwgVkVORE9SX0FMTElFRFRFTCwgMHhiMTAwLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLAorLyoKKyAqIERpc3Rpbmd1aXNoIGJldHdlZW4gdGhpcyBCZWxraW4gYWRhcHRvciBhbmQgdGhlIEJlbGtpbiBibHVldG9vdGggYWRhcHRvcnMKKyAqIHdpdGggdGhlIHNhbWUgcHJvZHVjdCBJRHMgYnkgY2hlY2tpbmcgdGhlIGRldmljZSBjbGFzcyB0b28uCisgKi8KK1BFR0FTVVNfREVWX0NMQVNTKCAiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLCAweDAwLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKIFBFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0ItMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4NiwKIAkJREVGQVVMVF9HUElPX1JFU0VUICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IDBjYWE4MDAuLmY1NmRlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMzYyLDEyICszNjIsMTIgQEAKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIGhhbHRfZmFpbF9hbmRfcmVsZWFzZTsKIAkJfQotCQlkZXYtPmhhcmRfbXR1ID0gdG1wOwotCQluZXQtPm10dSA9IGRldi0+aGFyZF9tdHUgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKIAkJZGV2X3dhcm4oJmludGYtPmRldiwKIAkJCSAiZGV2IGNhbid0IHRha2UgJXUgYnl0ZSBwYWNrZXRzIChtYXggJXUpLCAiCiAJCQkgImFkanVzdGluZyBNVFUgdG8gJXVcbiIsCi0JCQkgZGV2LT5oYXJkX210dSwgdG1wLCBuZXQtPm10dSk7CisJCQkgZGV2LT5oYXJkX210dSwgdG1wLCB0bXAgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbik7CisJCWRldi0+aGFyZF9tdHUgPSB0bXA7CisJCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCX0KIAogCS8qIFJFVklTSVQ6ICBwZXJpcGhlcmFsICJhbGlnbm1lbnQiIHJlcXVlc3QgaXMgaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCA4ZDAwOTc2Li5iOWUwMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CkBAIC00NTQsNyArNDUzLDcgQEAKIAkJdmktPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXZpLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJdG90X3NncyArPSBza2Jfdm5ldF9oZHIoc2tiKS0+bnVtX3NnOwotCQlrZnJlZV9za2Ioc2tiKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAJcmV0dXJuIHRvdF9zZ3M7CiB9CkBAIC01MTcsOCArNTE2LDcgQEAKIAkvKiBGcmVlIHVwIGFueSBwZW5kaW5nIG9sZCBidWZmZXJzIGJlZm9yZSBxdWV1ZWluZyBuZXcgb25lcy4gKi8KIAlmcmVlX29sZF94bWl0X3NrYnModmkpOwogCi0JLyogUHV0IG5ldyBvbmUgaW4gc2VuZCBxdWV1ZSBhbmQgZG8gdHJhbnNtaXQgKi8KLQlfX3NrYl9xdWV1ZV9oZWFkKCZ2aS0+c2VuZCwgc2tiKTsKKwkvKiBUcnkgdG8gdHJhbnNtaXQgKi8KIAljYXBhY2l0eSA9IHhtaXRfc2tiKHZpLCBza2IpOwogCiAJLyogVGhpcyBjYW4gaGFwcGVuIHdpdGggT09NIGFuZCBpbmRpcmVjdCBidWZmZXJzLiAqLwpAQCAtNTMyLDggKzUzMCwxNyBAQAogCQl9CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9Ci0KIAl2aS0+c3ZxLT52cV9vcHMtPmtpY2sodmktPnN2cSk7CisKKwkvKgorCSAqIFB1dCBuZXcgb25lIGluIHNlbmQgcXVldWUuICBZb3UnZCBleHBlY3Qgd2UnZCBuZWVkIHRoaXMgYmVmb3JlCisJICogeG1pdF9za2IgY2FsbHMgYWRkX2J1ZigpLCBzaW5jZSB0aGUgY2FsbGJhY2sgY2FuIGJlIHRyaWdnZXJlZAorCSAqIGltbWVkaWF0ZWx5IGFmdGVyIHRoYXQuICBCdXQgc2luY2UgdGhlIGNhbGxiYWNrIGp1c3QgdHJpZ2dlcnMKKwkgKiBhbm90aGVyIGNhbGwgYmFjayBoZXJlLCBub3JtYWwgbmV0d29yayB4bWl0IGxvY2tpbmcgcHJldmVudHMgdGhlCisJICogcmFjZS4KKwkgKi8KKwlfX3NrYl9xdWV1ZV9oZWFkKCZ2aS0+c2VuZCwgc2tiKTsKKwogCS8qIERvbid0IHdhaXQgdXAgZm9yIHRyYW5zbWl0dGVkIHNrYnMgdG8gYmUgZnJlZWQuICovCiAJc2tiX29ycGhhbihza2IpOwogCW5mX3Jlc2V0KHNrYik7CkBAIC05OTEsNyArOTk4LDcgQEAKIAlWSVJUSU9fTkVUX0ZfQ1RSTF9SWCwgVklSVElPX05FVF9GX0NUUkxfVkxBTiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fbmV0ID0geworc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19uZXRfZHJpdmVyID0gewogCS5mZWF0dXJlX3RhYmxlID0gZmVhdHVyZXMsCiAJLmZlYXR1cmVfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAogCS5kcml2ZXIubmFtZSA9CUtCVUlMRF9NT0ROQU1FLApAQCAtMTAwNCwxMiArMTAxMSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19uZXQpOworCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fbmV0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fbmV0KTsKKwl1bnJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19uZXRfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGluaXQpOwogbW9kdWxlX2V4aXQoZmluaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvdm14bmV0My9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODBmNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My9NYWtlZmlsZQpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBMaW51eCBkcml2ZXIgZm9yIFZNd2FyZSdzIHZteG5ldDMgZXRoZXJuZXQgTklDLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSBhbmQgbm8gbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorIyBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorIyBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisjIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisjCisjIE1haW50YWluZWQgYnk6IFNocmV5YXMgQmhhdGV3YXJhIDxwdi1kcml2ZXJzQHZtd2FyZS5jb20+CisjCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIE1ha2VmaWxlIGZvciB0aGUgVk13YXJlIHZteG5ldDMgZXRoZXJuZXQgTklDIGRyaXZlcgorIworCitvYmotJChDT05GSUdfVk1YTkVUMykgKz0gdm14bmV0My5vCisKK3ZteG5ldDMtb2JqcyA6PSB2bXhuZXQzX2Rydi5vIHZteG5ldDNfZXRodG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3VwdDFfZGVmcy5oIGIvZHJpdmVycy9uZXQvdm14bmV0My91cHQxX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEwOGZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My91cHQxX2RlZnMuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICogdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9VUFQxX0RFRlNfSAorI2RlZmluZSBfVVBUMV9ERUZTX0gKKworc3RydWN0IFVQVDFfVHhTdGF0cyB7CisJdTY0CQkJVFNPUGt0c1R4T0s7ICAvKiBUU08gcGt0cyBwb3N0LXNlZ21lbnRhdGlvbiAqLworCXU2NAkJCVRTT0J5dGVzVHhPSzsKKwl1NjQJCQl1Y2FzdFBrdHNUeE9LOworCXU2NAkJCXVjYXN0Qnl0ZXNUeE9LOworCXU2NAkJCW1jYXN0UGt0c1R4T0s7CisJdTY0CQkJbWNhc3RCeXRlc1R4T0s7CisJdTY0CQkJYmNhc3RQa3RzVHhPSzsKKwl1NjQJCQliY2FzdEJ5dGVzVHhPSzsKKwl1NjQJCQlwa3RzVHhFcnJvcjsKKwl1NjQJCQlwa3RzVHhEaXNjYXJkOworfTsKKworc3RydWN0IFVQVDFfUnhTdGF0cyB7CisJdTY0CQkJTFJPUGt0c1J4T0s7ICAgIC8qIExSTyBwa3RzICovCisJdTY0CQkJTFJPQnl0ZXNSeE9LOyAgIC8qIGJ5dGVzIGZyb20gTFJPIHBrdHMgKi8KKwkvKiB0aGUgZm9sbG93aW5nIGNvdW50ZXJzIGFyZSBmb3IgcGt0cyBmcm9tIHRoZSB3aXJlLCBpLmUuLCBwcmUtTFJPICovCisJdTY0CQkJdWNhc3RQa3RzUnhPSzsKKwl1NjQJCQl1Y2FzdEJ5dGVzUnhPSzsKKwl1NjQJCQltY2FzdFBrdHNSeE9LOworCXU2NAkJCW1jYXN0Qnl0ZXNSeE9LOworCXU2NAkJCWJjYXN0UGt0c1J4T0s7CisJdTY0CQkJYmNhc3RCeXRlc1J4T0s7CisJdTY0CQkJcGt0c1J4T3V0T2ZCdWY7CisJdTY0CQkJcGt0c1J4RXJyb3I7Cit9OworCisvKiBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBsZXZlbCAqLworZW51bSB7CisJVVBUMV9JTUxfTk9ORQkJPSAwLCAvKiBubyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAqLworCVVQVDFfSU1MX0hJR0hFU1QJPSA3LCAvKiBsZWFzdCBpbnRyIGdlbmVyYXRlZCAqLworCVVQVDFfSU1MX0FEQVBUSVZFCT0gOCwgLyogYWRwYXRpdmUgaW50ciBtb2RlcmF0aW9uICovCit9OworLyogdmFsdWVzIGZvciBVUFQxX1JTU0NvbmYuaGFzaEZ1bmMgKi8KK2VudW0geworCVVQVDFfUlNTX0hBU0hfVFlQRV9OT05FICAgICAgPSAweDAsCisJVVBUMV9SU1NfSEFTSF9UWVBFX0lQVjQgICAgICA9IDB4MDEsCisJVVBUMV9SU1NfSEFTSF9UWVBFX1RDUF9JUFY0ICA9IDB4MDIsCisJVVBUMV9SU1NfSEFTSF9UWVBFX0lQVjYgICAgICA9IDB4MDQsCisJVVBUMV9SU1NfSEFTSF9UWVBFX1RDUF9JUFY2ICA9IDB4MDgsCit9OworCitlbnVtIHsKKwlVUFQxX1JTU19IQVNIX0ZVTkNfTk9ORSAgICAgID0gMHgwLAorCVVQVDFfUlNTX0hBU0hfRlVOQ19UT0VQTElUWiAgPSAweDAxLAorfTsKKworI2RlZmluZSBVUFQxX1JTU19NQVhfS0VZX1NJWkUgICAgICAgIDQwCisjZGVmaW5lIFVQVDFfUlNTX01BWF9JTkRfVEFCTEVfU0laRSAgMTI4CisKK3N0cnVjdCBVUFQxX1JTU0NvbmYgeworCXUxNgkJCWhhc2hUeXBlOworCXUxNgkJCWhhc2hGdW5jOworCXUxNgkJCWhhc2hLZXlTaXplOworCXUxNgkJCWluZFRhYmxlU2l6ZTsKKwl1OAkJCWhhc2hLZXlbVVBUMV9SU1NfTUFYX0tFWV9TSVpFXTsKKwl1OAkJCWluZFRhYmxlW1VQVDFfUlNTX01BWF9JTkRfVEFCTEVfU0laRV07Cit9OworCisvKiBmZWF0dXJlcyAqLworZW51bSB7CisJVVBUMV9GX1JYQ1NVTQkJPSAweDAwMDEsICAgLyogcnggY3N1bSB2ZXJpZmljYXRpb24gKi8KKwlVUFQxX0ZfUlNTCQk9IDB4MDAwMiwKKwlVUFQxX0ZfUlhWTEFOCQk9IDB4MDAwNCwgICAvKiBWTEFOIHRhZyBzdHJpcHBpbmcgKi8KKwlVUFQxX0ZfTFJPCQk9IDB4MDAwOCwKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kZWZzLmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGVlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICogdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9WTVhORVQzX0RFRlNfSF8KKyNkZWZpbmUgX1ZNWE5FVDNfREVGU19IXworCisjaW5jbHVkZSAidXB0MV9kZWZzLmgiCisKKy8qIGFsbCByZWdpc3RlcnMgYXJlIDMyIGJpdCB3aWRlICovCisvKiBCQVIgMSAqLworZW51bSB7CisJVk1YTkVUM19SRUdfVlJSUwk9IDB4MCwJLyogVm14bmV0MyBSZXZpc2lvbiBSZXBvcnQgU2VsZWN0aW9uICovCisJVk1YTkVUM19SRUdfVVZSUwk9IDB4OCwJLyogVVBUIFZlcnNpb24gUmVwb3J0IFNlbGVjdGlvbiAqLworCVZNWE5FVDNfUkVHX0RTQUwJPSAweDEwLAkvKiBEcml2ZXIgU2hhcmVkIEFkZHJlc3MgTG93ICovCisJVk1YTkVUM19SRUdfRFNBSAk9IDB4MTgsCS8qIERyaXZlciBTaGFyZWQgQWRkcmVzcyBIaWdoICovCisJVk1YTkVUM19SRUdfQ01ECQk9IDB4MjAsCS8qIENvbW1hbmQgKi8KKwlWTVhORVQzX1JFR19NQUNMCT0gMHgyOCwJLyogTUFDIEFkZHJlc3MgTG93ICovCisJVk1YTkVUM19SRUdfTUFDSAk9IDB4MzAsCS8qIE1BQyBBZGRyZXNzIEhpZ2ggKi8KKwlWTVhORVQzX1JFR19JQ1IJCT0gMHgzOCwJLyogSW50ZXJydXB0IENhdXNlIFJlZ2lzdGVyICovCisJVk1YTkVUM19SRUdfRUNSCQk9IDB4NDAJLyogRXZlbnQgQ2F1c2UgUmVnaXN0ZXIgKi8KK307CisKKy8qIEJBUiAwICovCitlbnVtIHsKKwlWTVhORVQzX1JFR19JTVIJCT0gMHgwLAkgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKwlWTVhORVQzX1JFR19UWFBST0QJPSAweDYwMCwgLyogVHggUHJvZHVjZXIgSW5kZXggKi8KKwlWTVhORVQzX1JFR19SWFBST0QJPSAweDgwMCwgLyogUnggUHJvZHVjZXIgSW5kZXggZm9yIHJpbmcgMSAqLworCVZNWE5FVDNfUkVHX1JYUFJPRDIJPSAweEEwMAkgLyogUnggUHJvZHVjZXIgSW5kZXggZm9yIHJpbmcgMiAqLworfTsKKworI2RlZmluZSBWTVhORVQzX1BUX1JFR19TSVpFICAgICA0MDk2CS8qIEJBUiAwICovCisjZGVmaW5lIFZNWE5FVDNfVkRfUkVHX1NJWkUgICAgIDQwOTYJLyogQkFSIDEgKi8KKworI2RlZmluZSBWTVhORVQzX1JFR19BTElHTiAgICAgICA4CS8qIEFsbCByZWdpc3RlcnMgYXJlIDgtYnl0ZSBhbGlnbmVkLiAqLworI2RlZmluZSBWTVhORVQzX1JFR19BTElHTl9NQVNLICAweDcKKworLyogSS9PIE1hcHBlZCBhY2Nlc3MgdG8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFZNWE5FVDNfSU9fVFlQRV9QVCAgICAgICAgICAgICAgMAorI2RlZmluZSBWTVhORVQzX0lPX1RZUEVfVkQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVk1YTkVUM19JT19BRERSKHR5cGUsIHJlZykgICAgICAoKCh0eXBlKSA8PCAyNCkgfCAoKHJlZykgJiAweEZGRkZGRikpCisjZGVmaW5lIFZNWE5FVDNfSU9fVFlQRShhZGRyKSAgICAgICAgICAgKChhZGRyKSA+PiAyNCkKKyNkZWZpbmUgVk1YTkVUM19JT19SRUcoYWRkcikgICAgICAgICAgICAoKGFkZHIpICYgMHhGRkZGRkYpCisKK2VudW0geworCVZNWE5FVDNfQ01EX0ZJUlNUX1NFVCA9IDB4Q0FGRTAwMDAsCisJVk1YTkVUM19DTURfQUNUSVZBVEVfREVWID0gVk1YTkVUM19DTURfRklSU1RfU0VULAorCVZNWE5FVDNfQ01EX1FVSUVTQ0VfREVWLAorCVZNWE5FVDNfQ01EX1JFU0VUX0RFViwKKwlWTVhORVQzX0NNRF9VUERBVEVfUlhfTU9ERSwKKwlWTVhORVQzX0NNRF9VUERBVEVfTUFDX0ZJTFRFUlMsCisJVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUywKKwlWTVhORVQzX0NNRF9VUERBVEVfUlNTSURULAorCVZNWE5FVDNfQ01EX1VQREFURV9JTUwsCisJVk1YTkVUM19DTURfVVBEQVRFX1BNQ0ZHLAorCVZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFLAorCVZNWE5FVDNfQ01EX0xPQURfUExVR0lOLAorCisJVk1YTkVUM19DTURfRklSU1RfR0VUID0gMHhGMDBEMDAwMCwKKwlWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTID0gVk1YTkVUM19DTURfRklSU1RfR0VULAorCVZNWE5FVDNfQ01EX0dFVF9TVEFUUywKKwlWTVhORVQzX0NNRF9HRVRfTElOSywKKwlWTVhORVQzX0NNRF9HRVRfUEVSTV9NQUNfTE8sCisJVk1YTkVUM19DTURfR0VUX1BFUk1fTUFDX0hJLAorCVZNWE5FVDNfQ01EX0dFVF9ESURfTE8sCisJVk1YTkVUM19DTURfR0VUX0RJRF9ISSwKKwlWTVhORVQzX0NNRF9HRVRfREVWX0VYVFJBX0lORk8sCisJVk1YTkVUM19DTURfR0VUX0NPTkZfSU5UUgorfTsKKworc3RydWN0IFZteG5ldDNfVHhEZXNjIHsKKwl1NjQJCWFkZHI7CisKKwl1MzIJCWxlbjoxNDsKKwl1MzIJCWdlbjoxOyAgICAgIC8qIGdlbmVyYXRpb24gYml0ICovCisJdTMyCQlyc3ZkOjE7CisJdTMyCQlkdHlwZToxOyAgICAvKiBkZXNjcmlwdG9yIHR5cGUgKi8KKwl1MzIJCWV4dDE6MTsKKwl1MzIJCW1zc2NvZjoxNDsgIC8qIE1TUywgY2hlY2tzdW0gb2Zmc2V0LCBmbGFncyAqLworCisJdTMyCQlobGVuOjEwOyAgICAvKiBoZWFkZXIgbGVuICovCisJdTMyCQlvbToyOyAgICAgICAvKiBvZmZsb2FkIG1vZGUgKi8KKwl1MzIJCWVvcDoxOyAgICAgIC8qIEVuZCBPZiBQYWNrZXQgKi8KKwl1MzIJCWNxOjE7ICAgICAgIC8qIGNvbXBsZXRpb24gcmVxdWVzdCAqLworCXUzMgkJZXh0MjoxOworCXUzMgkJdGk6MTsgICAgICAgLyogVkxBTiBUYWcgSW5zZXJ0aW9uICovCisJdTMyCQl0Y2k6MTY7ICAgICAvKiBUYWcgdG8gSW5zZXJ0ICovCit9OworCisvKiBUeERlc2MuT00gdmFsdWVzICovCisjZGVmaW5lIFZNWE5FVDNfT01fTk9ORQkJMAorI2RlZmluZSBWTVhORVQzX09NX0NTVU0JCTIKKyNkZWZpbmUgVk1YTkVUM19PTV9UU08JCTMKKworLyogZmllbGRzIGluIFR4RGVzYyB3ZSBhY2Nlc3Mgdy9vIHVzaW5nIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgVk1YTkVUM19UWERfRU9QX1NISUZUCTEyCisjZGVmaW5lIFZNWE5FVDNfVFhEX0NRX1NISUZUCTEzCisjZGVmaW5lIFZNWE5FVDNfVFhEX0dFTl9TSElGVAkxNAorCisjZGVmaW5lIFZNWE5FVDNfVFhEX0NRCQkoMSA8PCBWTVhORVQzX1RYRF9DUV9TSElGVCkKKyNkZWZpbmUgVk1YTkVUM19UWERfRU9QCQkoMSA8PCBWTVhORVQzX1RYRF9FT1BfU0hJRlQpCisjZGVmaW5lIFZNWE5FVDNfVFhEX0dFTgkJKDEgPDwgVk1YTkVUM19UWERfR0VOX1NISUZUKQorCisjZGVmaW5lIFZNWE5FVDNfSERSX0NPUFlfU0laRSAgIDEyOAorCisKK3N0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MgeworCXU4CQlkYXRhW1ZNWE5FVDNfSERSX0NPUFlfU0laRV07Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MgeworCXUzMgkJdHhkSWR4OjEyOyAgICAvKiBJbmRleCBvZiB0aGUgRU9QIFR4RGVzYyAqLworCXUzMgkJZXh0MToyMDsKKworCXUzMgkJZXh0MjsKKwl1MzIJCWV4dDM7CisKKwl1MzIJCXJzdmQ6MjQ7CisJdTMyCQl0eXBlOjc7ICAgICAgIC8qIGNvbXBsZXRpb24gdHlwZSAqLworCXUzMgkJZ2VuOjE7ICAgICAgICAvKiBnZW5lcmF0aW9uIGJpdCAqLworfTsKKworCitzdHJ1Y3QgVm14bmV0M19SeERlc2MgeworCXU2NAkJYWRkcjsKKworCXUzMgkJbGVuOjE0OworCXUzMgkJYnR5cGU6MTsgICAgICAvKiBCdWZmZXIgVHlwZSAqLworCXUzMgkJZHR5cGU6MTsgICAgICAvKiBEZXNjcmlwdG9yIHR5cGUgKi8KKwl1MzIJCXJzdmQ6MTU7CisJdTMyCQlnZW46MTsgICAgICAgIC8qIEdlbmVyYXRpb24gYml0ICovCisKKwl1MzIJCWV4dDE7Cit9OworCisvKiB2YWx1ZXMgb2YgUlhELkJUWVBFICovCisjZGVmaW5lIFZNWE5FVDNfUlhEX0JUWVBFX0hFQUQgICAwICAgIC8qIGhlYWQgb25seSAqLworI2RlZmluZSBWTVhORVQzX1JYRF9CVFlQRV9CT0RZICAgMSAgICAvKiBib2R5IG9ubHkgKi8KKworLyogZmllbGRzIGluIFJ4RGVzYyB3ZSBhY2Nlc3Mgdy9vIHVzaW5nIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgVk1YTkVUM19SWERfQlRZUEVfU0hJRlQgIDE0CisjZGVmaW5lIFZNWE5FVDNfUlhEX0dFTl9TSElGVCAgICAzMQorCisKK3N0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MgeworCXUzMgkJcnhkSWR4OjEyOyAgICAvKiBJbmRleCBvZiB0aGUgUnhEZXNjICovCisJdTMyCQlleHQxOjI7CisJdTMyCQllb3A6MTsgICAgICAgIC8qIEVuZCBvZiBQYWNrZXQgKi8KKwl1MzIJCXNvcDoxOyAgICAgICAgLyogU3RhcnQgb2YgUGFja2V0ICovCisJdTMyCQlycUlEOjEwOyAgICAgIC8qIHJ4IHF1ZXVlL3JpbmcgSUQgKi8KKwl1MzIJCXJzc1R5cGU6NDsgICAgLyogUlNTIGhhc2ggdHlwZSB1c2VkICovCisJdTMyCQljbmM6MTsgICAgICAgIC8qIENoZWNrc3VtIE5vdCBDYWxjdWxhdGVkICovCisJdTMyCQlleHQyOjE7CisKKwl1MzIJCXJzc0hhc2g7ICAgICAgLyogUlNTIGhhc2ggdmFsdWUgKi8KKworCXUzMgkJbGVuOjE0OyAgICAgICAvKiBkYXRhIGxlbmd0aCAqLworCXUzMgkJZXJyOjE7ICAgICAgICAvKiBFcnJvciAqLworCXUzMgkJdHM6MTsgICAgICAgICAvKiBUYWcgaXMgc3RyaXBwZWQgKi8KKwl1MzIJCXRjaToxNjsgICAgICAgLyogVGFnIHN0cmlwcGVkICovCisKKwl1MzIJCWNzdW06MTY7CisJdTMyCQl0dWM6MTsgICAgICAgIC8qIFRDUC9VRFAgQ2hlY2tzdW0gQ29ycmVjdCAqLworCXUzMgkJdWRwOjE7ICAgICAgICAvKiBVRFAgcGFja2V0ICovCisJdTMyCQl0Y3A6MTsgICAgICAgIC8qIFRDUCBwYWNrZXQgKi8KKwl1MzIJCWlwYzoxOyAgICAgICAgLyogSVAgQ2hlY2tzdW0gQ29ycmVjdCAqLworCXUzMgkJdjY6MTsgICAgICAgICAvKiBJUHY2ICovCisJdTMyCQl2NDoxOyAgICAgICAgIC8qIElQdjQgKi8KKwl1MzIJCWZyZzoxOyAgICAgICAgLyogSVAgRnJhZ21lbnQgKi8KKwl1MzIJCWZjczoxOyAgICAgICAgLyogRnJhbWUgQ1JDIGNvcnJlY3QgKi8KKwl1MzIJCXR5cGU6NzsgICAgICAgLyogY29tcGxldGlvbiB0eXBlICovCisJdTMyCQlnZW46MTsgICAgICAgIC8qIGdlbmVyYXRpb24gYml0ICovCit9OworCisvKiBmaWVsZHMgaW4gUnhDb21wRGVzYyB3ZSBhY2Nlc3MgdmlhIFZteG5ldDNfR2VuZXJpY0Rlc2MuZHdvcmRbM10gKi8KKyNkZWZpbmUgVk1YTkVUM19SQ0RfVFVDX1NISUZUCTE2CisjZGVmaW5lIFZNWE5FVDNfUkNEX0lQQ19TSElGVAkxOQorCisvKiBmaWVsZHMgaW4gUnhDb21wRGVzYyB3ZSBhY2Nlc3MgdmlhIFZteG5ldDNfR2VuZXJpY0Rlc2MucXdvcmRbMV0gKi8KKyNkZWZpbmUgVk1YTkVUM19SQ0RfVFlQRV9TSElGVAk1NgorI2RlZmluZSBWTVhORVQzX1JDRF9HRU5fU0hJRlQJNjMKKworLyogY3N1bSBPSyBmb3IgVENQL1VEUCBwa3RzIG92ZXIgSVAgKi8KKyNkZWZpbmUgVk1YTkVUM19SQ0RfQ1NVTV9PSyAoMSA8PCBWTVhORVQzX1JDRF9UVUNfU0hJRlQgfCBcCisJCQkgICAgIDEgPDwgVk1YTkVUM19SQ0RfSVBDX1NISUZUKQorCisvKiB2YWx1ZSBvZiBSeENvbXBEZXNjLnJzc1R5cGUgKi8KK2VudW0geworCVZNWE5FVDNfUkNEX1JTU19UWVBFX05PTkUgICAgID0gMCwKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9JUFY0ICAgICA9IDEsCisJVk1YTkVUM19SQ0RfUlNTX1RZUEVfVENQSVBWNCAgPSAyLAorCVZNWE5FVDNfUkNEX1JTU19UWVBFX0lQVjYgICAgID0gMywKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9UQ1BJUFY2ICA9IDQsCit9OworCisKKy8qIGEgdW5pb24gZm9yIGFjY2Vzc2luZyBhbGwgY21kL2NvbXBsZXRpb24gZGVzY3JpcHRvcnMgKi8KK3VuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgeworCXU2NAkJCQlxd29yZFsyXTsKKwl1MzIJCQkJZHdvcmRbNF07CisJdTE2CQkJCXdvcmRbOF07CisJc3RydWN0IFZteG5ldDNfVHhEZXNjCQl0eGQ7CisJc3RydWN0IFZteG5ldDNfUnhEZXNjCQlyeGQ7CisJc3RydWN0IFZteG5ldDNfVHhDb21wRGVzYwl0Y2Q7CisJc3RydWN0IFZteG5ldDNfUnhDb21wRGVzYwlyY2Q7Cit9OworCisjZGVmaW5lIFZNWE5FVDNfSU5JVF9HRU4gICAgICAgMQorCisvKiBNYXggc2l6ZSBvZiBhIHNpbmdsZSB0eCBidWZmZXIgKi8KKyNkZWZpbmUgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUgICgxIDw8IDE0KQorCisvKiAjIG9mIHR4IGRlc2MgbmVlZGVkIGZvciBhIHR4IGJ1ZmZlciBzaXplICovCisjZGVmaW5lIFZNWE5FVDNfVFhEX05FRURFRChzaXplKSAoKChzaXplKSArIFZNWE5FVDNfTUFYX1RYX0JVRl9TSVpFIC0gMSkgLyBcCisJCQkJICBWTVhORVQzX01BWF9UWF9CVUZfU0laRSkKKworLyogbWF4ICMgb2YgdHggZGVzY3MgZm9yIGEgbm9uLXRzbyBwa3QgKi8KKyNkZWZpbmUgVk1YTkVUM19NQVhfVFhEX1BFUl9QS1QgMTYKKworLyogTWF4IHNpemUgb2YgYSBzaW5nbGUgcnggYnVmZmVyICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX1JYX0JVRl9TSVpFICAoKDEgPDwgMTQpIC0gMSkKKy8qIE1pbmltdW0gc2l6ZSBvZiBhIHR5cGUgMCBidWZmZXIgKi8KKyNkZWZpbmUgVk1YTkVUM19NSU5fVDBfQlVGX1NJWkUgIDEyOAorI2RlZmluZSBWTVhORVQzX01BWF9DU1VNX09GRlNFVCAgMTAyNAorCisvKiBSaW5nIGJhc2UgYWRkcmVzcyBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgVk1YTkVUM19SSU5HX0JBX0FMSUdOICAgNTEyCisjZGVmaW5lIFZNWE5FVDNfUklOR19CQV9NQVNLICAgIChWTVhORVQzX1JJTkdfQkFfQUxJR04gLSAxKQorCisvKiBSaW5nIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyICovCisjZGVmaW5lIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOIDMyCisjZGVmaW5lIFZNWE5FVDNfUklOR19TSVpFX01BU0sgIChWTVhORVQzX1JJTkdfU0laRV9BTElHTiAtIDEpCisKKy8qIE1heCByaW5nIHNpemUgKi8KKyNkZWZpbmUgVk1YTkVUM19UWF9SSU5HX01BWF9TSVpFICAgNDA5NgorI2RlZmluZSBWTVhORVQzX1RDX1JJTkdfTUFYX1NJWkUgICA0MDk2CisjZGVmaW5lIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAgIDQwOTYKKyNkZWZpbmUgVk1YTkVUM19SQ19SSU5HX01BWF9TSVpFICAgODE5MgorCisvKiBhIGxpc3Qgb2YgcmVhc29ucyBmb3IgcXVldWUgc3RvcCAqLworCitlbnVtIHsKKyBWTVhORVQzX0VSUl9OT0VPUCAgICAgICAgPSAweDgwMDAwMDAwLCAgLyogY2Fubm90IGZpbmQgdGhlIEVPUCBkZXNjIG9mIGEgcGt0ICovCisgVk1YTkVUM19FUlJfVFhEX1JFVVNFICAgID0gMHg4MDAwMDAwMSwgIC8qIHJldXNlIFR4RGVzYyBiZWZvcmUgdHggY29tcGxldGlvbiAqLworIFZNWE5FVDNfRVJSX0JJR19QS1QgICAgICA9IDB4ODAwMDAwMDIsICAvKiB0b28gbWFueSBUeERlc2MgZm9yIGEgcGt0ICovCisgVk1YTkVUM19FUlJfREVTQ19OT1RfU1BUID0gMHg4MDAwMDAwMywgIC8qIGRlc2NyaXB0b3IgdHlwZSBub3Qgc3VwcG9ydGVkICovCisgVk1YTkVUM19FUlJfU01BTExfQlVGICAgID0gMHg4MDAwMDAwNCwgIC8qIHR5cGUgMCBidWZmZXIgdG9vIHNtYWxsICovCisgVk1YTkVUM19FUlJfU1RSRVNTICAgICAgID0gMHg4MDAwMDAwNSwgIC8qIHN0cmVzcyBvcHRpb24gZmlyaW5nIGluIHZta2VybmVsICovCisgVk1YTkVUM19FUlJfU1dJVENIICAgICAgID0gMHg4MDAwMDAwNiwgIC8qIG1vZGUgc3dpdGNoIGZhaWx1cmUgKi8KKyBWTVhORVQzX0VSUl9UWERfSU5WQUxJRCAgPSAweDgwMDAwMDA3LCAgLyogaW52YWxpZCBUeERlc2MgKi8KK307CisKKy8qIGNvbXBsZXRpb24gZGVzY3JpcHRvciB0eXBlcyAqLworI2RlZmluZSBWTVhORVQzX0NEVFlQRV9UWENPTVAgICAgICAwICAgIC8qIFR4IENvbXBsZXRpb24gRGVzY3JpcHRvciAqLworI2RlZmluZSBWTVhORVQzX0NEVFlQRV9SWENPTVAgICAgICAzICAgIC8qIFJ4IENvbXBsZXRpb24gRGVzY3JpcHRvciAqLworCitlbnVtIHsKKwlWTVhORVQzX0dPU19CSVRTX1VOSyAgICA9IDAsICAgLyogdW5rbm93biAqLworCVZNWE5FVDNfR09TX0JJVFNfMzIgICAgID0gMSwKKwlWTVhORVQzX0dPU19CSVRTXzY0ICAgICA9IDIsCit9OworCisjZGVmaW5lIFZNWE5FVDNfR09TX1RZUEVfTElOVVgJMQorCisKK3N0cnVjdCBWbXhuZXQzX0dPU0luZm8geworCXUzMgkJCQlnb3NCaXRzOjI7CS8qIDMyLWJpdCBvciA2NC1iaXQ/ICovCisJdTMyCQkJCWdvc1R5cGU6NDsgICAvKiB3aGljaCBndWVzdCAqLworCXUzMgkJCQlnb3NWZXI6MTY7ICAgLyogZ29zIHZlcnNpb24gKi8KKwl1MzIJCQkJZ29zTWlzYzoxMDsgIC8qIG90aGVyIGluZm8gYWJvdXQgZ29zICovCit9OworCisKK3N0cnVjdCBWbXhuZXQzX0RyaXZlckluZm8geworCXUzMgkJCQl2ZXJzaW9uOworCXN0cnVjdCBWbXhuZXQzX0dPU0luZm8JCWdvczsKKwl1MzIJCQkJdm14bmV0M1JldlNwdDsKKwl1MzIJCQkJdXB0VmVyU3B0OworfTsKKworCisjZGVmaW5lIFZNWE5FVDNfUkVWMV9NQUdJQyAgMHhiYWJlZmVlMQorCisvKgorICogUXVldWVEZXNjUEEgbXVzdCBiZSAxMjggYnl0ZXMgYWxpZ25lZC4gSXQgcG9pbnRzIHRvIGFuIGFycmF5IG9mCisgKiBWbXhuZXQzX1R4UXVldWVEZXNjIGZvbGxvd2VkIGJ5IGFuIGFycmF5IG9mIFZteG5ldDNfUnhRdWV1ZURlc2MuCisgKiBUaGUgbnVtYmVyIG9mIFZteG5ldDNfVHhRdWV1ZURlc2MvVm14bmV0M19SeFF1ZXVlRGVzYyBhcmUgc3BlY2lmaWVkIGJ5CisgKiBWbXhuZXQzX01pc2NDb25mLm51bVR4UXVldWVzL251bVJ4UXVldWVzLCByZXNwZWN0aXZlbHkuCisgKi8KKyNkZWZpbmUgVk1YTkVUM19RVUVVRV9ERVNDX0FMSUdOICAxMjgKKworCitzdHJ1Y3QgVm14bmV0M19NaXNjQ29uZiB7CisJc3RydWN0IFZteG5ldDNfRHJpdmVySW5mbyBkcml2ZXJJbmZvOworCXU2NAkJdXB0RmVhdHVyZXM7CisJdTY0CQlkZFBBOyAgICAgICAgIC8qIGRyaXZlciBkYXRhIFBBICovCisJdTY0CQlxdWV1ZURlc2NQQTsgIC8qIHF1ZXVlIGRlc2NyaXB0b3IgdGFibGUgUEEgKi8KKwl1MzIJCWRkTGVuOyAgICAgICAgLyogZHJpdmVyIGRhdGEgbGVuICovCisJdTMyCQlxdWV1ZURlc2NMZW47IC8qIHF1ZXVlIGRlc2MuIHRhYmxlIGxlbiBpbiBieXRlcyAqLworCXUzMgkJbXR1OworCXUxNgkJbWF4TnVtUnhTRzsKKwl1OAkJbnVtVHhRdWV1ZXM7CisJdTgJCW51bVJ4UXVldWVzOworCXUzMgkJcmVzZXJ2ZWRbNF07Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1R4UXVldWVDb25mIHsKKwl1NjQJCXR4UmluZ0Jhc2VQQTsKKwl1NjQJCWRhdGFSaW5nQmFzZVBBOworCXU2NAkJY29tcFJpbmdCYXNlUEE7CisJdTY0CQlkZFBBOyAgICAgICAgIC8qIGRyaXZlciBkYXRhICovCisJdTY0CQlyZXNlcnZlZDsKKwl1MzIJCXR4UmluZ1NpemU7ICAgLyogIyBvZiB0eCBkZXNjICovCisJdTMyCQlkYXRhUmluZ1NpemU7IC8qICMgb2YgZGF0YSBkZXNjICovCisJdTMyCQljb21wUmluZ1NpemU7IC8qICMgb2YgY29tcCBkZXNjICovCisJdTMyCQlkZExlbjsgICAgICAgIC8qIHNpemUgb2YgZHJpdmVyIGRhdGEgKi8KKwl1OAkJaW50cklkeDsKKwl1OAkJX3BhZFs3XTsKK307CisKKworc3RydWN0IFZteG5ldDNfUnhRdWV1ZUNvbmYgeworCXU2NAkJcnhSaW5nQmFzZVBBWzJdOworCXU2NAkJY29tcFJpbmdCYXNlUEE7CisJdTY0CQlkZFBBOyAgICAgICAgICAgIC8qIGRyaXZlciBkYXRhICovCisJdTY0CQlyZXNlcnZlZDsKKwl1MzIJCXJ4UmluZ1NpemVbMl07ICAgLyogIyBvZiByeCBkZXNjICovCisJdTMyCQljb21wUmluZ1NpemU7ICAgIC8qICMgb2YgcnggY29tcCBkZXNjICovCisJdTMyCQlkZExlbjsgICAgICAgICAgIC8qIHNpemUgb2YgZHJpdmVyIGRhdGEgKi8KKwl1OAkJaW50cklkeDsKKwl1OAkJX3BhZFs3XTsKK307CisKKworZW51bSB2bXhuZXQzX2ludHJfbWFza19tb2RlIHsKKwlWTVhORVQzX0lNTV9BVVRPICAgPSAwLAorCVZNWE5FVDNfSU1NX0FDVElWRSA9IDEsCisJVk1YTkVUM19JTU1fTEFaWSAgID0gMgorfTsKKworZW51bSB2bXhuZXQzX2ludHJfdHlwZSB7CisJVk1YTkVUM19JVF9BVVRPID0gMCwKKwlWTVhORVQzX0lUX0lOVFggPSAxLAorCVZNWE5FVDNfSVRfTVNJICA9IDIsCisJVk1YTkVUM19JVF9NU0lYID0gMworfTsKKworI2RlZmluZSBWTVhORVQzX01BWF9UWF9RVUVVRVMgIDgKKyNkZWZpbmUgVk1YTkVUM19NQVhfUlhfUVVFVUVTICAxNgorLyogYWRkaXRpb24gMSBmb3IgZXZlbnRzICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX0lOVFJTICAgICAgMjUKKworCitzdHJ1Y3QgVm14bmV0M19JbnRyQ29uZiB7CisJYm9vbAkJYXV0b01hc2s7CisJdTgJCW51bUludHJzOyAgICAgIC8qICMgb2YgaW50ZXJydXB0cyAqLworCXU4CQlldmVudEludHJJZHg7CisJdTgJCW1vZExldmVsc1tWTVhORVQzX01BWF9JTlRSU107CS8qIG1vZGVyYXRpb24gbGV2ZWwgZm9yCisJCQkJCQkJICogZWFjaCBpbnRyICovCisJdTMyCQlyZXNlcnZlZFszXTsKK307CisKKy8qIG9uZSBiaXQgcGVyIFZMQU4gSUQsIHRoZSBzaXplIGlzIGluIHRoZSB1bml0cyBvZiB1MzIJKi8KKyNkZWZpbmUgVk1YTkVUM19WRlRfU0laRSAgKDQwOTYgLyAoc2l6ZW9mKHUzMikgKiA4KSkKKworCitzdHJ1Y3QgVm14bmV0M19RdWV1ZVN0YXR1cyB7CisJYm9vbAkJc3RvcHBlZDsKKwl1OAkJX3BhZFszXTsKKwl1MzIJCWVycm9yOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ3RybCB7CisJdTMyCQl0eE51bURlZmVycmVkOworCXUzMgkJdHhUaHJlc2hvbGQ7CisJdTY0CQlyZXNlcnZlZDsKK307CisKKworc3RydWN0IFZteG5ldDNfUnhRdWV1ZUN0cmwgeworCWJvb2wJCXVwZGF0ZVJ4UHJvZDsKKwl1OAkJX3BhZFs3XTsKKwl1NjQJCXJlc2VydmVkOworfTsKKworZW51bSB7CisJVk1YTkVUM19SWE1fVUNBU1QgICAgID0gMHgwMSwgIC8qIHVuaWNhc3Qgb25seSAqLworCVZNWE5FVDNfUlhNX01DQVNUICAgICA9IDB4MDIsICAvKiBtdWx0aWNhc3QgcGFzc2luZyB0aGUgZmlsdGVycyAqLworCVZNWE5FVDNfUlhNX0JDQVNUICAgICA9IDB4MDQsICAvKiBicm9hZGNhc3Qgb25seSAqLworCVZNWE5FVDNfUlhNX0FMTF9NVUxUSSA9IDB4MDgsICAvKiBhbGwgbXVsdGljYXN0ICovCisJVk1YTkVUM19SWE1fUFJPTUlTQyAgID0gMHgxMCAgLyogcHJvbWlzY3VvdXMgKi8KK307CisKK3N0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZiB7CisJdTMyCQlyeE1vZGU7ICAgICAgIC8qIFZNWE5FVDNfUlhNX3h4eCAqLworCXUxNgkJbWZUYWJsZUxlbjsgICAvKiBzaXplIG9mIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHRhYmxlICovCisJdTE2CQlfcGFkMTsKKwl1NjQJCW1mVGFibGVQQTsgICAgLyogUEEgb2YgdGhlIG11bHRpY2FzdCBmaWx0ZXJzIHRhYmxlICovCisJdTMyCQl2ZlRhYmxlW1ZNWE5FVDNfVkZUX1NJWkVdOyAvKiB2bGFuIGZpbHRlciAqLworfTsKKworCisjZGVmaW5lIFZNWE5FVDNfUE1fTUFYX0ZJTFRFUlMgICAgICAgIDYKKyNkZWZpbmUgVk1YTkVUM19QTV9NQVhfUEFUVEVSTl9TSVpFICAgMTI4CisjZGVmaW5lIFZNWE5FVDNfUE1fTUFYX01BU0tfU0laRSAgICAgIChWTVhORVQzX1BNX01BWF9QQVRURVJOX1NJWkUgLyA4KQorCisjZGVmaW5lIFZNWE5FVDNfUE1fV0FLRVVQX01BR0lDICAgICAgIDB4MDEgIC8qIHdha2UgdXAgb24gbWFnaWMgcGt0cyAqLworI2RlZmluZSBWTVhORVQzX1BNX1dBS0VVUF9GSUxURVIgICAgICAweDAyICAvKiB3YWtlIHVwIG9uIHBrdHMgbWF0Y2hpbmcKKwkJCQkJICAgICAqIGZpbHRlcnMgKi8KKworCitzdHJ1Y3QgVm14bmV0M19QTV9Qa3RGaWx0ZXIgeworCXU4CQltYXNrU2l6ZTsKKwl1OAkJcGF0dGVyblNpemU7CisJdTgJCW1hc2tbVk1YTkVUM19QTV9NQVhfTUFTS19TSVpFXTsKKwl1OAkJcGF0dGVybltWTVhORVQzX1BNX01BWF9QQVRURVJOX1NJWkVdOworCXU4CQlwYWRbNl07Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1BNQ29uZiB7CisJdTE2CQl3YWtlVXBFdmVudHM7ICAvKiBWTVhORVQzX1BNX1dBS0VVUF94eHggKi8KKwl1OAkJbnVtRmlsdGVyczsKKwl1OAkJcGFkWzVdOworCXN0cnVjdCBWbXhuZXQzX1BNX1BrdEZpbHRlciBmaWx0ZXJzW1ZNWE5FVDNfUE1fTUFYX0ZJTFRFUlNdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19WYXJpYWJsZUxlbkNvbmZEZXNjIHsKKwl1MzIJCWNvbmZWZXI7CisJdTMyCQljb25mTGVuOworCXU2NAkJY29uZlBBOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYyB7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZUN0cmwJCWN0cmw7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZUNvbmYJCWNvbmY7CisKKwkvKiBEcml2ZXIgcmVhZCBhZnRlciBhIEdFVCBjb21tYW5kICovCisJc3RydWN0IFZteG5ldDNfUXVldWVTdGF0dXMJCXN0YXR1czsKKwlzdHJ1Y3QgVVBUMV9UeFN0YXRzCQkJc3RhdHM7CisJdTgJCQkJCV9wYWRbODhdOyAvKiAxMjggYWxpZ25lZCAqLworfTsKKworCitzdHJ1Y3QgVm14bmV0M19SeFF1ZXVlRGVzYyB7CisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZUN0cmwJCWN0cmw7CisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZUNvbmYJCWNvbmY7CisJLyogRHJpdmVyIHJlYWQgYWZ0ZXIgYSBHRVQgY29tbWFkICovCisJc3RydWN0IFZteG5ldDNfUXVldWVTdGF0dXMJCXN0YXR1czsKKwlzdHJ1Y3QgVVBUMV9SeFN0YXRzCQkJc3RhdHM7CisJdTgJCQkJICAgICAgX19wYWRbODhdOyAvKiAxMjggYWxpZ25lZCAqLworfTsKKworCitzdHJ1Y3QgVm14bmV0M19EU0RldlJlYWQgeworCS8qIHJlYWQtb25seSByZWdpb24gZm9yIGRldmljZSwgcmVhZCBieSBkZXYgaW4gcmVzcG9uc2UgdG8gYSBTRVQgY21kICovCisJc3RydWN0IFZteG5ldDNfTWlzY0NvbmYJCQltaXNjOworCXN0cnVjdCBWbXhuZXQzX0ludHJDb25mCQkJaW50ckNvbmY7CisJc3RydWN0IFZteG5ldDNfUnhGaWx0ZXJDb25mCQlyeEZpbHRlckNvbmY7CisJc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYwlyc3NDb25mRGVzYzsKKwlzdHJ1Y3QgVm14bmV0M19WYXJpYWJsZUxlbkNvbmZEZXNjCXBtQ29uZkRlc2M7CisJc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYwlwbHVnaW5Db25mRGVzYzsKK307CisKKy8qIEFsbCBzdHJ1Y3R1cmVzIGluIERyaXZlclNoYXJlZCBhcmUgcGFkZGVkIHRvIG11bHRpcGxlcyBvZiA4IGJ5dGVzICovCitzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQgeworCXUzMgkJCQltYWdpYzsKKwkvKiBtYWtlIGRldlJlYWQgc3RhcnQgYXQgNjRiaXQgYm91bmRhcmllcyAqLworCXUzMgkJCQkJcGFkOworCXN0cnVjdCBWbXhuZXQzX0RTRGV2UmVhZAkJZGV2UmVhZDsKKwl1MzIJCQkJCWVjcjsKKwl1MzIJCQkJCXJlc2VydmVkWzVdOworfTsKKworCisjZGVmaW5lIFZNWE5FVDNfRUNSX1JRRVJSICAgICAgICgxIDw8IDApCisjZGVmaW5lIFZNWE5FVDNfRUNSX1RRRVJSICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFZNWE5FVDNfRUNSX0xJTksgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFZNWE5FVDNfRUNSX0RJQyAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIFZNWE5FVDNfRUNSX0RFQlVHICAgICAgICgxIDw8IDQpCisKKy8qIGZsaXAgdGhlIGdlbiBiaXQgb2YgYSByaW5nICovCisjZGVmaW5lIFZNWE5FVDNfRkxJUF9SSU5HX0dFTihnZW4pICgoZ2VuKSA9IChnZW4pIF4gMHgxKQorCisvKiBvbmx5IHVzZSB0aGlzIGlmIG1vdmluZyB0aGUgaWR4IHdvbid0IGFmZmVjdCB0aGUgZ2VuIGJpdCAqLworI2RlZmluZSBWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKGlkeCwgcmluZ19zaXplKSBcCisJZG8ge1wKKwkJKGlkeCkrKztcCisJCWlmICh1bmxpa2VseSgoaWR4KSA9PSAocmluZ19zaXplKSkpIHtcCisJCQkoaWR4KSA9IDA7XAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKSBcCisJKHZmVGFibGVbdmlkID4+IDVdIHw9ICgxIDw8ICh2aWQgJiAzMSkpKQorI2RlZmluZSBWTVhORVQzX0NMRUFSX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKSBcCisJKHZmVGFibGVbdmlkID4+IDVdICY9IH4oMSA8PCAodmlkICYgMzEpKSkKKworI2RlZmluZSBWTVhORVQzX1ZGVEFCTEVfRU5UUllfSVNfU0VUKHZmVGFibGUsIHZpZCkgXAorCSgodmZUYWJsZVt2aWQgPj4gNV0gJiAoMSA8PCAodmlkICYgMzEpKSkgIT0gMCkKKworI2RlZmluZSBWTVhORVQzX01BWF9NVFUgICAgIDkwMDAKKyNkZWZpbmUgVk1YTkVUM19NSU5fTVRVICAgICA2MAorCisjZGVmaW5lIFZNWE5FVDNfTElOS19VUCAgICAgICAgICgxMDAwMCA8PCAxNiB8IDEpICAgIC8qIDEwIEdicHMsIHVwICovCisjZGVmaW5lIFZNWE5FVDNfTElOS19ET1dOICAgICAgIDAKKworI2VuZGlmIC8qIF9WTVhORVQzX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDQzNTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0wLDAgKzEsMjU3NCBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICogdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAidm14bmV0M19pbnQuaCIKKworY2hhciB2bXhuZXQzX2RyaXZlcl9uYW1lW10gPSAidm14bmV0MyI7CisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX0RFU0MgIlZNd2FyZSB2bXhuZXQzIHZpcnR1YWwgTklDIGRyaXZlciIKKworCisvKgorICogUENJIERldmljZSBJRCBUYWJsZQorICogTGFzdCBlbnRyeSBtdXN0IGJlIGFsbCAwcworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm14bmV0M19wY2lpZF90YWJsZVtdID0geworCXtQQ0lfVkRFVklDRShWTVdBUkUsIFBDSV9ERVZJQ0VfSURfVk1XQVJFX1ZNWE5FVDMpfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2bXhuZXQzX3BjaWlkX3RhYmxlKTsKKworc3RhdGljIGF0b21pY190IGRldmljZXNfZm91bmQ7CisKKworLyoKKyAqICAgIEVuYWJsZS9EaXNhYmxlIHRoZSBnaXZlbiBpbnRyCisgKi8KK3N0YXRpYyB2b2lkCit2bXhuZXQzX2VuYWJsZV9pbnRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludHJfaWR4KQoreworCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfSU1SICsgaW50cl9pZHggKiA4LCAwKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19kaXNhYmxlX2ludHIoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50cl9pZHgpCit7CisJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19JTVIgKyBpbnRyX2lkeCAqIDgsIDEpOworfQorCisKKy8qCisgKiAgICBFbmFibGUvRGlzYWJsZSBhbGwgaW50cnMgdXNlZCBieSB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkCit2bXhuZXQzX2VuYWJsZV9hbGxfaW50cnMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5pbnRyLm51bV9pbnRyczsgaSsrKQorCQl2bXhuZXQzX2VuYWJsZV9pbnRyKGFkYXB0ZXIsIGkpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2Rpc2FibGVfYWxsX2ludHJzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJdm14bmV0M19kaXNhYmxlX2ludHIoYWRhcHRlciwgaSk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfYWNrX2V2ZW50cyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1MzIgZXZlbnRzKQoreworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRUNSLCBldmVudHMpOworfQorCisKK3N0YXRpYyBib29sCit2bXhuZXQzX3RxX3N0b3BwZWQoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPm5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfc3RhcnQoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXRxLT5zdG9wcGVkID0gZmFsc2U7CisJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M190cV93YWtlKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl0cS0+c3RvcHBlZCA9IGZhbHNlOworCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M190cV9zdG9wKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl0cS0+c3RvcHBlZCA9IHRydWU7CisJdHEtPm51bV9zdG9wKys7CisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworfQorCisKKy8qCisgKiBDaGVjayB0aGUgbGluayBzdGF0ZS4gVGhpcyBtYXkgc3RhcnQgb3Igc3RvcCB0aGUgdHggcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCit2bXhuZXQzX2NoZWNrX2xpbmsoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgcmV0OworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX0dFVF9MSU5LKTsKKwlyZXQgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gcmV0ID4+IDE2OworCWlmIChyZXQgJiAxKSB7IC8qIExpbmsgaXMgdXAuICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOSUMgTGluayBpcyBVcCAlZCBNYnBzXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCisJCQluZXRpZl9jYXJyaWVyX29uKGFkYXB0ZXItPm5ldGRldik7CisKKwkJdm14bmV0M190cV9zdGFydCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOSUMgTGluayBpcyBEb3duXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPm5ldGRldik7CisKKwkJdm14bmV0M190cV9zdG9wKCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGV2ZW50cyA9IGFkYXB0ZXItPnNoYXJlZC0+ZWNyOworCWlmICghZXZlbnRzKQorCQlyZXR1cm47CisKKwl2bXhuZXQzX2Fja19ldmVudHMoYWRhcHRlciwgZXZlbnRzKTsKKworCS8qIENoZWNrIGlmIGxpbmsgc3RhdGUgaGFzIGNoYW5nZWQgKi8KKwlpZiAoZXZlbnRzICYgVk1YTkVUM19FQ1JfTElOSykKKwkJdm14bmV0M19jaGVja19saW5rKGFkYXB0ZXIpOworCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb24geG1pdC9yZWN2IHF1ZXVlcyAqLworCWlmIChldmVudHMgJiAoVk1YTkVUM19FQ1JfVFFFUlIgfCBWTVhORVQzX0VDUl9SUUVSUikpIHsKKwkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJICAgICAgIFZNWE5FVDNfQ01EX0dFVF9RVUVVRV9TVEFUVVMpOworCisJCWlmIChhZGFwdGVyLT50cWRfc3RhcnQtPnN0YXR1cy5zdG9wcGVkKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cSBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCSAgICAgICBhZGFwdGVyLT50cWRfc3RhcnQtPnN0YXR1cy5lcnJvcik7CisJCX0KKwkJaWYgKGFkYXB0ZXItPnJxZF9zdGFydC0+c3RhdHVzLnN0b3BwZWQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJxIGVycm9yIDB4JXhcbiIsCisJCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJICAgICAgIGFkYXB0ZXItPnJxZF9zdGFydC0+c3RhdHVzLmVycm9yKTsKKwkJfQorCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndvcmspOworCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M191bm1hcF90eF9idWYoc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gKnRiaSwKKwkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAodGJpLT5tYXBfdHlwZSA9PSBWTVhORVQzX01BUF9TSU5HTEUpCisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgdGJpLT5kbWFfYWRkciwgdGJpLT5sZW4sCisJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCWVsc2UgaWYgKHRiaS0+bWFwX3R5cGUgPT0gVk1YTkVUM19NQVBfUEFHRSkKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgdGJpLT5kbWFfYWRkciwgdGJpLT5sZW4sCisJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJZWxzZQorCQlCVUdfT04odGJpLT5tYXBfdHlwZSAhPSBWTVhORVQzX01BUF9OT05FKTsKKworCXRiaS0+bWFwX3R5cGUgPSBWTVhORVQzX01BUF9OT05FOyAvKiB0byBoZWxwIGRlYnVnZ2luZyAqLworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfdW5tYXBfcGt0KHUzMiBlb3BfaWR4LCBzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZW50cmllcyA9IDA7CisKKwkvKiBubyBvdXQgb2Ygb3JkZXIgY29tcGxldGlvbiAqLworCUJVR19PTih0cS0+YnVmX2luZm9bZW9wX2lkeF0uc29wX2lkeCAhPSB0cS0+dHhfcmluZy5uZXh0MmNvbXApOworCUJVR19PTih0cS0+dHhfcmluZy5iYXNlW2VvcF9pZHhdLnR4ZC5lb3AgIT0gMSk7CisKKwlza2IgPSB0cS0+YnVmX2luZm9bZW9wX2lkeF0uc2tiOworCUJVR19PTihza2IgPT0gTlVMTCk7CisJdHEtPmJ1Zl9pbmZvW2VvcF9pZHhdLnNrYiA9IE5VTEw7CisKKwlWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKGVvcF9pZHgsIHRxLT50eF9yaW5nLnNpemUpOworCisJd2hpbGUgKHRxLT50eF9yaW5nLm5leHQyY29tcCAhPSBlb3BfaWR4KSB7CisJCXZteG5ldDNfdW5tYXBfdHhfYnVmKHRxLT5idWZfaW5mbyArIHRxLT50eF9yaW5nLm5leHQyY29tcCwKKwkJCQkgICAgIHBkZXYpOworCisJCS8qIHVwZGF0ZSBuZXh0MmNvbXAgdy9vIHR4X2xvY2suIFNpbmNlIHdlIGFyZSBtYXJraW5nIG1vcmUsCisJCSAqIGluc3RlYWQgb2YgbGVzcywgdHggcmluZyBlbnRyaWVzIGF2YWlsLCB0aGUgd29yc3QgY2FzZSBpcworCQkgKiB0aGF0IHRoZSB0eCByb3V0aW5lIGluY29ycmVjdGx5IHJlLXF1ZXVlcyBhIHBrdCBkdWUgdG8KKwkJICogaW5zdWZmaWNpZW50IHR4IHJpbmcgZW50cmllcy4KKwkJICovCisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyY29tcCgmdHEtPnR4X3JpbmcpOworCQllbnRyaWVzKys7CisJfQorCisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gZW50cmllczsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3RxX3R4X2NvbXBsZXRlKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNvbXBsZXRlZCA9IDA7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisKKwlnZGVzYyA9IHRxLT5jb21wX3JpbmcuYmFzZSArIHRxLT5jb21wX3JpbmcubmV4dDJwcm9jOworCXdoaWxlIChnZGVzYy0+dGNkLmdlbiA9PSB0cS0+Y29tcF9yaW5nLmdlbikgeworCQljb21wbGV0ZWQgKz0gdm14bmV0M191bm1hcF9wa3QoZ2Rlc2MtPnRjZC50eGRJZHgsIHRxLAorCQkJCQkgICAgICAgYWRhcHRlci0+cGRldiwgYWRhcHRlcik7CisKKwkJdm14bmV0M19jb21wX3JpbmdfYWR2X25leHQycHJvYygmdHEtPmNvbXBfcmluZyk7CisJCWdkZXNjID0gdHEtPmNvbXBfcmluZy5iYXNlICsgdHEtPmNvbXBfcmluZy5uZXh0MnByb2M7CisJfQorCisJaWYgKGNvbXBsZXRlZCkgeworCQlzcGluX2xvY2soJnRxLT50eF9sb2NrKTsKKwkJaWYgKHVubGlrZWx5KHZteG5ldDNfdHFfc3RvcHBlZCh0cSwgYWRhcHRlcikgJiYKKwkJCSAgICAgdm14bmV0M19jbWRfcmluZ19kZXNjX2F2YWlsKCZ0cS0+dHhfcmluZykgPgorCQkJICAgICBWTVhORVQzX1dBS0VfUVVFVUVfVEhSRVNIT0xEKHRxKSAmJgorCQkJICAgICBuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpKSB7CisJCQl2bXhuZXQzX3RxX3dha2UodHEsIGFkYXB0ZXIpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0cS0+dHhfbG9jayk7CisJfQorCXJldHVybiBjb21wbGV0ZWQ7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfY2xlYW51cChzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwl3aGlsZSAodHEtPnR4X3JpbmcubmV4dDJjb21wICE9IHRxLT50eF9yaW5nLm5leHQyZmlsbCkgeworCQlzdHJ1Y3Qgdm14bmV0M190eF9idWZfaW5mbyAqdGJpOworCQl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZGVzYzsKKworCQl0YmkgPSB0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmNvbXA7CisJCWdkZXNjID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyY29tcDsKKworCQl2bXhuZXQzX3VubWFwX3R4X2J1Zih0YmksIGFkYXB0ZXItPnBkZXYpOworCQlpZiAodGJpLT5za2IpIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KHRiaS0+c2tiKTsKKwkJCXRiaS0+c2tiID0gTlVMTDsKKwkJfQorCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmNvbXAoJnRxLT50eF9yaW5nKTsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2ssIHZlcmlmeSBhbGwgYnVmZmVycyBhcmUgaW5kZWVkIHVubWFwcGVkIGFuZCBmcmVlZCAqLworCWZvciAoaSA9IDA7IGkgPCB0cS0+dHhfcmluZy5zaXplOyBpKyspIHsKKwkJQlVHX09OKHRxLT5idWZfaW5mb1tpXS5za2IgIT0gTlVMTCB8fAorCQkgICAgICAgdHEtPmJ1Zl9pbmZvW2ldLm1hcF90eXBlICE9IFZNWE5FVDNfTUFQX05PTkUpOworCX0KKworCXRxLT50eF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJdHEtPnR4X3JpbmcubmV4dDJmaWxsID0gdHEtPnR4X3JpbmcubmV4dDJjb21wID0gMDsKKworCXRxLT5jb21wX3JpbmcuZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKwl0cS0+Y29tcF9yaW5nLm5leHQycHJvYyA9IDA7Cit9CisKKwordm9pZAordm14bmV0M190cV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAodHEtPnR4X3JpbmcuYmFzZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHRxLT50eF9yaW5nLnNpemUgKgorCQkJCSAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEZXNjKSwKKwkJCQkgICAgdHEtPnR4X3JpbmcuYmFzZSwgdHEtPnR4X3JpbmcuYmFzZVBBKTsKKwkJdHEtPnR4X3JpbmcuYmFzZSA9IE5VTEw7CisJfQorCWlmICh0cS0+ZGF0YV9yaW5nLmJhc2UpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCB0cS0+ZGF0YV9yaW5nLnNpemUgKgorCQkJCSAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEYXRhRGVzYyksCisJCQkJICAgIHRxLT5kYXRhX3JpbmcuYmFzZSwgdHEtPmRhdGFfcmluZy5iYXNlUEEpOworCQl0cS0+ZGF0YV9yaW5nLmJhc2UgPSBOVUxMOworCX0KKwlpZiAodHEtPmNvbXBfcmluZy5iYXNlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgdHEtPmNvbXBfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MpLAorCQkJCSAgICB0cS0+Y29tcF9yaW5nLmJhc2UsIHRxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwkJdHEtPmNvbXBfcmluZy5iYXNlID0gTlVMTDsKKwl9CisJa2ZyZWUodHEtPmJ1Zl9pbmZvKTsKKwl0cS0+YnVmX2luZm8gPSBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3RxX2luaXQoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJLyogcmVzZXQgdGhlIHR4IHJpbmcgY29udGVudHMgdG8gMCBhbmQgcmVzZXQgdGhlIHR4IHJpbmcgc3RhdGVzICovCisJbWVtc2V0KHRxLT50eF9yaW5nLmJhc2UsIDAsIHRxLT50eF9yaW5nLnNpemUgKgorCSAgICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEZXNjKSk7CisJdHEtPnR4X3JpbmcubmV4dDJmaWxsID0gdHEtPnR4X3JpbmcubmV4dDJjb21wID0gMDsKKwl0cS0+dHhfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCisJbWVtc2V0KHRxLT5kYXRhX3JpbmcuYmFzZSwgMCwgdHEtPmRhdGFfcmluZy5zaXplICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpKTsKKworCS8qIHJlc2V0IHRoZSB0eCBjb21wIHJpbmcgY29udGVudHMgdG8gMCBhbmQgcmVzZXQgY29tcCByaW5nIHN0YXRlcyAqLworCW1lbXNldCh0cS0+Y29tcF9yaW5nLmJhc2UsIDAsIHRxLT5jb21wX3Jpbmcuc2l6ZSAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeENvbXBEZXNjKSk7CisJdHEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworCXRxLT5jb21wX3JpbmcuZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKworCS8qIHJlc2V0IHRoZSBib29ra2VlcGluZyBkYXRhICovCisJbWVtc2V0KHRxLT5idWZfaW5mbywgMCwgc2l6ZW9mKHRxLT5idWZfaW5mb1swXSkgKiB0cS0+dHhfcmluZy5zaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHEtPnR4X3Jpbmcuc2l6ZTsgaSsrKQorCQl0cS0+YnVmX2luZm9baV0ubWFwX3R5cGUgPSBWTVhORVQzX01BUF9OT05FOworCisJLyogc3RhdHMgYXJlIG5vdCByZXNldCAqLworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfdHFfY3JlYXRlKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCUJVR19PTih0cS0+dHhfcmluZy5iYXNlIHx8IHRxLT5kYXRhX3JpbmcuYmFzZSB8fAorCSAgICAgICB0cS0+Y29tcF9yaW5nLmJhc2UgfHwgdHEtPmJ1Zl9pbmZvKTsKKworCXRxLT50eF9yaW5nLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCB0cS0+dHhfcmluZy5zaXplCisJCQkgICAqIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeERlc2MpLAorCQkJICAgJnRxLT50eF9yaW5nLmJhc2VQQSk7CisJaWYgKCF0cS0+dHhfcmluZy5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCByaW5nXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJdHEtPmRhdGFfcmluZy5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCSAgICAgdHEtPmRhdGFfcmluZy5zaXplICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpLAorCQkJICAgICAmdHEtPmRhdGFfcmluZy5iYXNlUEEpOworCWlmICghdHEtPmRhdGFfcmluZy5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBkYXRhIHJpbmdcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwl0cS0+Y29tcF9yaW5nLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJICAgICB0cS0+Y29tcF9yaW5nLnNpemUgKgorCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhDb21wRGVzYyksCisJCQkgICAgICZ0cS0+Y29tcF9yaW5nLmJhc2VQQSk7CisJaWYgKCF0cS0+Y29tcF9yaW5nLmJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGNvbXAgcmluZ1xuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCXRxLT5idWZfaW5mbyA9IGtjYWxsb2ModHEtPnR4X3Jpbmcuc2l6ZSwgc2l6ZW9mKHRxLT5idWZfaW5mb1swXSksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cS0+YnVmX2luZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGJ1ZmluZm9cbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXZteG5ldDNfdHFfZGVzdHJveSh0cSwgYWRhcHRlcik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKworLyoKKyAqICAgIHN0YXJ0aW5nIGZyb20gcmluZy0+bmV4dDJmaWxsLCBhbGxvY2F0ZSByeCBidWZmZXJzIGZvciB0aGUgZ2l2ZW4gcmluZworICogICAgb2YgdGhlIHJ4IHF1ZXVlIGFuZCB1cGRhdGUgdGhlIHJ4IGRlc2MuIHN0b3AgYWZ0ZXIgQG51bV90b19hbGxvYyBidWZmZXJzCisgKiAgICBhcmUgYWxsb2NhdGVkIG9yIGFsbG9jYXRpb24gZmFpbHMKKyAqLworCitzdGF0aWMgaW50Cit2bXhuZXQzX3JxX2FsbG9jX3J4X2J1ZihzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsIHUzMiByaW5nX2lkeCwKKwkJCWludCBudW1fdG9fYWxsb2MsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IG51bV9hbGxvY2F0ZWQgPSAwOworCXN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICpyYmlfYmFzZSA9IHJxLT5idWZfaW5mb1tyaW5nX2lkeF07CisJc3RydWN0IHZteG5ldDNfY21kX3JpbmcgKnJpbmcgPSAmcnEtPnJ4X3JpbmdbcmluZ19pZHhdOworCXUzMiB2YWw7CisKKwl3aGlsZSAobnVtX2FsbG9jYXRlZCA8IG51bV90b19hbGxvYykgeworCQlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpOworCQl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZDsKKworCQlyYmkgPSByYmlfYmFzZSArIHJpbmctPm5leHQyZmlsbDsKKwkJZ2QgPSByaW5nLT5iYXNlICsgcmluZy0+bmV4dDJmaWxsOworCisJCWlmIChyYmktPmJ1Zl90eXBlID09IFZNWE5FVDNfUlhfQlVGX1NLQikgeworCQkJaWYgKHJiaS0+c2tiID09IE5VTEwpIHsKKwkJCQlyYmktPnNrYiA9IGRldl9hbGxvY19za2IocmJpLT5sZW4gKworCQkJCQkJCSBORVRfSVBfQUxJR04pOworCQkJCWlmICh1bmxpa2VseShyYmktPnNrYiA9PSBOVUxMKSkgeworCQkJCQlycS0+c3RhdHMucnhfYnVmX2FsbG9jX2ZhaWx1cmUrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXJiaS0+c2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwkJCQlza2JfcmVzZXJ2ZShyYmktPnNrYiwgTkVUX0lQX0FMSUdOKTsKKwkJCQlyYmktPmRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJCXJiaS0+c2tiLT5kYXRhLCByYmktPmxlbiwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHJ4IGJ1ZmZlciBza2lwcGVkIGJ5IHRoZSBkZXZpY2UgKi8KKwkJCX0KKwkJCXZhbCA9IFZNWE5FVDNfUlhEX0JUWVBFX0hFQUQgPDwgVk1YTkVUM19SWERfQlRZUEVfU0hJRlQ7CisJCX0gZWxzZSB7CisJCQlCVUdfT04ocmJpLT5idWZfdHlwZSAhPSBWTVhORVQzX1JYX0JVRl9QQUdFIHx8CisJCQkgICAgICAgcmJpLT5sZW4gICE9IFBBR0VfU0laRSk7CisKKwkJCWlmIChyYmktPnBhZ2UgPT0gTlVMTCkgeworCQkJCXJiaS0+cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7CisJCQkJaWYgKHVubGlrZWx5KHJiaS0+cGFnZSA9PSBOVUxMKSkgeworCQkJCQlycS0+c3RhdHMucnhfYnVmX2FsbG9jX2ZhaWx1cmUrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXJiaS0+ZG1hX2FkZHIgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKKwkJCQkJCXJiaS0+cGFnZSwgMCwgUEFHRV9TSVpFLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogcnggYnVmZmVycyBza2lwcGVkIGJ5IHRoZSBkZXZpY2UgKi8KKwkJCX0KKwkJCXZhbCA9IFZNWE5FVDNfUlhEX0JUWVBFX0JPRFkgPDwgVk1YTkVUM19SWERfQlRZUEVfU0hJRlQ7CisJCX0KKworCQlCVUdfT04ocmJpLT5kbWFfYWRkciA9PSAwKTsKKwkJZ2QtPnJ4ZC5hZGRyID0gcmJpLT5kbWFfYWRkcjsKKwkJZ2QtPmR3b3JkWzJdID0gKHJpbmctPmdlbiA8PCBWTVhORVQzX1JYRF9HRU5fU0hJRlQpIHwgdmFsIHwKKwkJCQlyYmktPmxlbjsKKworCQludW1fYWxsb2NhdGVkKys7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbChyaW5nKTsKKwl9CisJcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSArPSBudW1fYWxsb2NhdGVkOworCisJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCSJhbGxvY19yeF9idWY6ICVkIGFsbG9jYXRlZCwgbmV4dDJmaWxsICV1LCBuZXh0MmNvbXAgIgorCQkiJXUsIHVuY29tbWl0ZWQgJXVcbiIsIG51bV9hbGxvY2F0ZWQsIHJpbmctPm5leHQyZmlsbCwKKwkJcmluZy0+bmV4dDJjb21wLCBycS0+dW5jb21taXR0ZWRbcmluZ19pZHhdKTsKKworCS8qIHNvIHRoYXQgdGhlIGRldmljZSBjYW4gZGlzdGluZ3Vpc2ggYSBmdWxsIHJpbmcgYW5kIGFuIGVtcHR5IHJpbmcgKi8KKwlCVUdfT04obnVtX2FsbG9jYXRlZCAhPSAwICYmIHJpbmctPm5leHQyZmlsbCA9PSByaW5nLT5uZXh0MmNvbXApOworCisJcmV0dXJuIG51bV9hbGxvY2F0ZWQ7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfYXBwZW5kX2ZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFZteG5ldDNfUnhDb21wRGVzYyAqcmNkLAorCQkgICAgc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8gKnJiaSkKK3sKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFncyArCisJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisKKwlCVUdfT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+PSBNQVhfU0tCX0ZSQUdTKTsKKworCWZyYWctPnBhZ2UgPSByYmktPnBhZ2U7CisJZnJhZy0+cGFnZV9vZmZzZXQgPSAwOworCWZyYWctPnNpemUgPSByY2QtPmxlbjsKKwlza2ItPmRhdGFfbGVuICs9IGZyYWctPnNpemU7CisJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX21hcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZteG5ldDNfdHhfY3R4ICpjdHgsCisJCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGR3MiwgbGVuOworCXVuc2lnbmVkIGxvbmcgYnVmX29mZnNldDsKKwlpbnQgaTsKKwl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZGVzYzsKKwlzdHJ1Y3Qgdm14bmV0M190eF9idWZfaW5mbyAqdGJpID0gTlVMTDsKKworCUJVR19PTihjdHgtPmNvcHlfc2l6ZSA+IHNrYl9oZWFkbGVuKHNrYikpOworCisJLyogdXNlIHRoZSBwcmV2aW91cyBnZW4gYml0IGZvciB0aGUgU09QIGRlc2MgKi8KKwlkdzIgPSAodHEtPnR4X3JpbmcuZ2VuIF4gMHgxKSA8PCBWTVhORVQzX1RYRF9HRU5fU0hJRlQ7CisKKwljdHgtPnNvcF90eGQgPSB0cS0+dHhfcmluZy5iYXNlICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCWdkZXNjID0gY3R4LT5zb3BfdHhkOyAvKiBib3RoIGxvb3BzIGJlbG93IGNhbiBiZSBza2lwcGVkICovCisKKwkvKiBubyBuZWVkIHRvIG1hcCB0aGUgYnVmZmVyIGlmIGhlYWRlcnMgYXJlIGNvcGllZCAqLworCWlmIChjdHgtPmNvcHlfc2l6ZSkgeworCQljdHgtPnNvcF90eGQtPnR4ZC5hZGRyID0gdHEtPmRhdGFfcmluZy5iYXNlUEEgKworCQkJCQl0cS0+dHhfcmluZy5uZXh0MmZpbGwgKgorCQkJCQlzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEYXRhRGVzYyk7CisJCWN0eC0+c29wX3R4ZC0+ZHdvcmRbMl0gPSBkdzIgfCBjdHgtPmNvcHlfc2l6ZTsKKwkJY3R4LT5zb3BfdHhkLT5kd29yZFszXSA9IDA7CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCQl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfTk9ORTsKKworCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJ0eGRbJXVdOiAweCVMeCAweCV4IDB4JXhcbiIsCisJCQl0cS0+dHhfcmluZy5uZXh0MmZpbGwsIGN0eC0+c29wX3R4ZC0+dHhkLmFkZHIsCisJCQljdHgtPnNvcF90eGQtPmR3b3JkWzJdLCBjdHgtPnNvcF90eGQtPmR3b3JkWzNdKTsKKwkJdm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJmaWxsKCZ0cS0+dHhfcmluZyk7CisKKwkJLyogdXNlIHRoZSByaWdodCBnZW4gZm9yIG5vbi1TT1AgZGVzYyAqLworCQlkdzIgPSB0cS0+dHhfcmluZy5nZW4gPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCX0KKworCS8qIGxpbmVhciBwYXJ0IGNhbiB1c2UgbXVsdGlwbGUgdHggZGVzYyBpZiBpdCdzIGJpZyAqLworCWxlbiA9IHNrYl9oZWFkbGVuKHNrYikgLSBjdHgtPmNvcHlfc2l6ZTsKKwlidWZfb2Zmc2V0ID0gY3R4LT5jb3B5X3NpemU7CisJd2hpbGUgKGxlbikgeworCQl1MzIgYnVmX3NpemU7CisKKwkJYnVmX3NpemUgPSBsZW4gPiBWTVhORVQzX01BWF9UWF9CVUZfU0laRSA/CisJCQkgICBWTVhORVQzX01BWF9UWF9CVUZfU0laRSA6IGxlbjsKKworCQl0YmkgPSB0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCXRiaS0+bWFwX3R5cGUgPSBWTVhORVQzX01BUF9TSU5HTEU7CisJCXRiaS0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCXNrYi0+ZGF0YSArIGJ1Zl9vZmZzZXQsIGJ1Zl9zaXplLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXRiaS0+bGVuID0gYnVmX3NpemU7IC8qIHRoaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IDJeMTQgdG8gMCAqLworCisJCWdkZXNjID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwkJQlVHX09OKGdkZXNjLT50eGQuZ2VuID09IHRxLT50eF9yaW5nLmdlbik7CisKKwkJZ2Rlc2MtPnR4ZC5hZGRyID0gdGJpLT5kbWFfYWRkcjsKKwkJZ2Rlc2MtPmR3b3JkWzJdID0gZHcyIHwgYnVmX3NpemU7CisJCWdkZXNjLT5kd29yZFszXSA9IDA7CisKKwkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkidHhkWyV1XTogMHglTHggMHgleCAweCV4XG4iLAorCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsLCBnZGVzYy0+dHhkLmFkZHIsCisJCQlnZGVzYy0+ZHdvcmRbMl0sIGdkZXNjLT5kd29yZFszXSk7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbCgmdHEtPnR4X3JpbmcpOworCQlkdzIgPSB0cS0+dHhfcmluZy5nZW4gPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCisJCWxlbiAtPSBidWZfc2l6ZTsKKwkJYnVmX29mZnNldCArPSBidWZfc2l6ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKworCQl0YmkgPSB0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCXRiaS0+bWFwX3R5cGUgPSBWTVhORVQzX01BUF9QQUdFOworCQl0YmktPmRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGZyYWctPnBhZ2UsCisJCQkJCSAgICAgZnJhZy0+cGFnZV9vZmZzZXQsIGZyYWctPnNpemUsCisJCQkJCSAgICAgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJdGJpLT5sZW4gPSBmcmFnLT5zaXplOworCisJCWdkZXNjID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwkJQlVHX09OKGdkZXNjLT50eGQuZ2VuID09IHRxLT50eF9yaW5nLmdlbik7CisKKwkJZ2Rlc2MtPnR4ZC5hZGRyID0gdGJpLT5kbWFfYWRkcjsKKwkJZ2Rlc2MtPmR3b3JkWzJdID0gZHcyIHwgZnJhZy0+c2l6ZTsKKwkJZ2Rlc2MtPmR3b3JkWzNdID0gMDsKKworCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJ0eGRbJXVdOiAweCVsbHUgJXUgJXVcbiIsCisJCQl0cS0+dHhfcmluZy5uZXh0MmZpbGwsIGdkZXNjLT50eGQuYWRkciwKKwkJCWdkZXNjLT5kd29yZFsyXSwgZ2Rlc2MtPmR3b3JkWzNdKTsKKwkJdm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJmaWxsKCZ0cS0+dHhfcmluZyk7CisJCWR3MiA9IHRxLT50eF9yaW5nLmdlbiA8PCBWTVhORVQzX1RYRF9HRU5fU0hJRlQ7CisJfQorCisJY3R4LT5lb3BfdHhkID0gZ2Rlc2M7CisKKwkvKiBzZXQgdGhlIGxhc3QgYnVmX2luZm8gZm9yIHRoZSBwa3QgKi8KKwl0YmktPnNrYiA9IHNrYjsKKwl0YmktPnNvcF9pZHggPSBjdHgtPnNvcF90eGQgLSB0cS0+dHhfcmluZy5iYXNlOworfQorCisKKy8qCisgKiAgICBwYXJzZSBhbmQgY29weSByZWxldmFudCBwcm90b2NvbCBoZWFkZXJzOgorICogICAgICBGb3IgYSB0c28gcGt0LCByZWxldmFudCBoZWFkZXJzIGFyZSBMMi8zLzQgaW5jbHVkaW5nIG9wdGlvbnMKKyAqICAgICAgRm9yIGEgcGt0IHJlcXVlc3RpbmcgY3N1bSBvZmZsb2FkaW5nLCB0aGV5IGFyZSBMMi8zIGFuZCBtYXkgaW5jbHVkZSBMNAorICogICAgICBpZiBpdCdzIGEgVENQL1VEUCBwa3QKKyAqCisgKiBSZXR1cm5zOgorICogICAgLTE6ICBlcnJvciBoYXBwZW5zIGR1cmluZyBwYXJzaW5nCisgKiAgICAgMDogIHByb3RvY29sIGhlYWRlcnMgcGFyc2VkLCBidXQgdG9vIGJpZyB0byBiZSBjb3BpZWQKKyAqICAgICAxOiAgcHJvdG9jb2wgaGVhZGVycyBwYXJzZWQgYW5kIGNvcGllZAorICoKKyAqIE90aGVyIGVmZmVjdHM6CisgKiAgICAxLiByZWxhdGVkICpjdHggZmllbGRzIGFyZSB1cGRhdGVkLgorICogICAgMi4gY3R4LT5jb3B5X3NpemUgaXMgIyBvZiBieXRlcyBjb3BpZWQKKyAqICAgIDMuIHRoZSBwb3J0aW9uIGNvcGllZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBsaW5lYXIgcGFydAorICoKKyAqLworc3RhdGljIGludAordm14bmV0M19wYXJzZV9hbmRfY29weV9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkJICAgc3RydWN0IHZteG5ldDNfdHhfY3R4ICpjdHgsCisJCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MgKnRkZDsKKworCWlmIChjdHgtPm1zcykgeworCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJCWN0eC0+bDRfaGRyX3NpemUgPSAoKHN0cnVjdCB0Y3BoZHIgKikKKwkJCQkgICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS0+ZG9mZiAqIDQ7CisJCWN0eC0+Y29weV9zaXplID0gY3R4LT5ldGhfaXBfaGRyX3NpemUgKyBjdHgtPmw0X2hkcl9zaXplOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBwdWxsX3NpemU7CisKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCWN0eC0+ZXRoX2lwX2hkcl9zaXplID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKworCQkJaWYgKGN0eC0+aXB2NCkgeworCQkJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKQorCQkJCQkJICAgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOworCQkJCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCQkJCXB1bGxfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsKKwkJCQkJCSAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisKKwkJCQkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwKKwkJCQkJCQkJcHVsbF9zaXplKSkpIHsKKwkJCQkJCWdvdG8gZXJyOworCQkJCQl9CisJCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAoKHN0cnVjdCB0Y3BoZHIgKikKKwkJCQkJICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPmRvZmYgKiA0OworCQkJCX0gZWxzZSBpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgeworCQkJCQljdHgtPmw0X2hkcl9zaXplID0KKwkJCQkJCQlzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBmb3Igc2ltcGxpY2l0eSwgZG9uJ3QgY29weSBMNCBoZWFkZXJzICovCisJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7CisJCQl9CisJCQljdHgtPmNvcHlfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsKKwkJCQkJIGN0eC0+bDRfaGRyX3NpemU7CisJCX0gZWxzZSB7CisJCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IDA7CisJCQljdHgtPmw0X2hkcl9zaXplID0gMDsKKwkJCS8qIGNvcHkgYXMgbXVjaCBhcyBhbGxvd2VkICovCisJCQljdHgtPmNvcHlfc2l6ZSA9IG1pbigodW5zaWduZWQgaW50KVZNWE5FVDNfSERSX0NPUFlfU0laRQorCQkJCQkgICAgICwgc2tiX2hlYWRsZW4oc2tiKSk7CisJCX0KKworCQkvKiBtYWtlIHN1cmUgaGVhZGVycyBhcmUgYWNjZXNzaWJsZSBkaXJlY3RseSAqLworCQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBjdHgtPmNvcHlfc2l6ZSkpKQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKHVubGlrZWx5KGN0eC0+Y29weV9zaXplID4gVk1YTkVUM19IRFJfQ09QWV9TSVpFKSkgeworCQl0cS0+c3RhdHMub3ZlcnNpemVkX2hkcisrOworCQljdHgtPmNvcHlfc2l6ZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCXRkZCA9IHRxLT5kYXRhX3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKworCW1lbWNweSh0ZGQtPmRhdGEsIHNrYi0+ZGF0YSwgY3R4LT5jb3B5X3NpemUpOworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkiY29weSAldSBieXRlcyB0byBkYXRhUmluZ1sldV1cbiIsCisJCWN0eC0+Y29weV9zaXplLCB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCXJldHVybiAxOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3ByZXBhcmVfdHNvKHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBzdHJ1Y3Qgdm14bmV0M190eF9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCWlmIChjdHgtPmlwdjQpIHsKKwkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CisJCWlwaC0+Y2hlY2sgPSAwOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCAwLAorCQkJCQkJIElQUFJPVE9fVENQLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CisJCXRjcGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIsIDAsCisJCQkJCSAgICAgICBJUFBST1RPX1RDUCwgMCk7CisJfQorfQorCisKKy8qCisgKiBUcmFuc21pdHMgYSBwa3QgdGhydSBhIGdpdmVuIHRxCisgKiBSZXR1cm5zOgorICogICAgTkVUREVWX1RYX09LOiAgICAgIGRlc2NyaXB0b3JzIGFyZSBzZXR1cCBzdWNjZXNzZnVsbHkKKyAqICAgIE5FVERFVl9UWF9PSzogICAgICBlcnJvciBvY2N1cmVkLCB0aGUgcGt0IGlzIGRyb3BwZWQKKyAqICAgIE5FVERFVl9UWF9CVVNZOiAgICB0eCByaW5nIGlzIGZ1bGwsIHF1ZXVlIGlzIHN0b3BwZWQKKyAqCisgKiBTaWRlLWVmZmVjdHM6CisgKiAgICAxLiB0eCByaW5nIG1heSBiZSBjaGFuZ2VkCisgKiAgICAyLiB0cSBzdGF0cyBtYXkgYmUgdXBkYXRlZCBhY2NvcmRpbmdseQorICogICAgMy4gc2hhcmVkLT50eE51bURlZmVycmVkIG1heSBiZSB1cGRhdGVkCisgKi8KKworc3RhdGljIGludAordm14bmV0M190cV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmV0OworCXUzMiBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2bXhuZXQzX3R4X2N0eCBjdHg7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisKKwkvKiBjb25zZXJ2YXRpdmVseSBlc3RpbWF0ZSAjIG9mIGRlc2NyaXB0b3JzIHRvIHVzZSAqLworCWNvdW50ID0gVk1YTkVUM19UWERfTkVFREVEKHNrYl9oZWFkbGVuKHNrYikpICsKKwkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CisKKwljdHguaXB2NCA9IChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfbnRvaHMoRVRIX1BfSVApKTsKKworCWN0eC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWlmIChjdHgubXNzKSB7CisJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CisJCQlpZiAodW5saWtlbHkocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsCisJCQkJCQkgICAgICBHRlBfQVRPTUlDKSAhPSAwKSkgeworCQkJCXRxLT5zdGF0cy5kcm9wX3RzbysrOworCQkJCWdvdG8gZHJvcF9wa3Q7CisJCQl9CisJCQl0cS0+c3RhdHMuY29weV9za2JfaGVhZGVyKys7CisJCX0KKwkJdm14bmV0M19wcmVwYXJlX3Rzbyhza2IsICZjdHgpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShjb3VudCA+IFZNWE5FVDNfTUFYX1RYRF9QRVJfUEtUKSkgeworCisJCQkvKiBub24tdHNvIHBrdHMgbXVzdCBub3QgdXNlIG1vcmUgdGhhbgorCQkJICogVk1YTkVUM19NQVhfVFhEX1BFUl9QS1QgZW50cmllcworCQkJICovCisJCQlpZiAoc2tiX2xpbmVhcml6ZShza2IpICE9IDApIHsKKwkJCQl0cS0+c3RhdHMuZHJvcF90b29fbWFueV9mcmFncysrOworCQkJCWdvdG8gZHJvcF9wa3Q7CisJCQl9CisJCQl0cS0+c3RhdHMubGluZWFyaXplZCsrOworCisJCQkvKiByZWNhbGN1bGF0ZSB0aGUgIyBvZiBkZXNjcmlwdG9ycyB0byB1c2UgKi8KKwkJCWNvdW50ID0gVk1YTkVUM19UWERfTkVFREVEKHNrYl9oZWFkbGVuKHNrYikpICsgMTsKKwkJfQorCX0KKworCXJldCA9IHZteG5ldDNfcGFyc2VfYW5kX2NvcHlfaGRyKHNrYiwgdHEsICZjdHgsIGFkYXB0ZXIpOworCWlmIChyZXQgPj0gMCkgeworCQlCVUdfT04ocmV0IDw9IDAgJiYgY3R4LmNvcHlfc2l6ZSAhPSAwKTsKKwkJLyogaGRycyBwYXJzZWQsIGNoZWNrIGFnYWluc3Qgb3RoZXIgbGltaXRzICovCisJCWlmIChjdHgubXNzKSB7CisJCQlpZiAodW5saWtlbHkoY3R4LmV0aF9pcF9oZHJfc2l6ZSArIGN0eC5sNF9oZHJfc2l6ZSA+CisJCQkJICAgICBWTVhORVQzX01BWF9UWF9CVUZfU0laRSkpIHsKKwkJCQlnb3RvIGhkcl90b29fYmlnOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCQlpZiAodW5saWtlbHkoY3R4LmV0aF9pcF9oZHJfc2l6ZSArCisJCQkJCSAgICAgc2tiLT5jc3VtX29mZnNldCA+CisJCQkJCSAgICAgVk1YTkVUM19NQVhfQ1NVTV9PRkZTRVQpKSB7CisJCQkJCWdvdG8gaGRyX3Rvb19iaWc7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJdHEtPnN0YXRzLmRyb3BfaGRyX2luc3BlY3RfZXJyKys7CisJCWdvdG8gZHJvcF9wa3Q7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRxLT50eF9sb2NrLCBmbGFncyk7CisKKwlpZiAoY291bnQgPiB2bXhuZXQzX2NtZF9yaW5nX2Rlc2NfYXZhaWwoJnRxLT50eF9yaW5nKSkgeworCQl0cS0+c3RhdHMudHhfcmluZ19mdWxsKys7CisJCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJInR4IHF1ZXVlIHN0b3BwZWQgb24gJXMsIG5leHQyY29tcCAldSIKKwkJCSIgbmV4dDJmaWxsICV1XG4iLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQl0cS0+dHhfcmluZy5uZXh0MmNvbXAsIHRxLT50eF9yaW5nLm5leHQyZmlsbCk7CisKKwkJdm14bmV0M190cV9zdG9wKHRxLCBhZGFwdGVyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHEtPnR4X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCS8qIGZpbGwgdHggZGVzY3MgcmVsYXRlZCB0byBhZGRyICYgbGVuICovCisJdm14bmV0M19tYXBfcGt0KHNrYiwgJmN0eCwgdHEsIGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXIpOworCisJLyogc2V0dXAgdGhlIEVPUCBkZXNjICovCisJY3R4LmVvcF90eGQtPmR3b3JkWzNdID0gVk1YTkVUM19UWERfQ1EgfCBWTVhORVQzX1RYRF9FT1A7CisKKwkvKiBzZXR1cCB0aGUgU09QIGRlc2MgKi8KKwlnZGVzYyA9IGN0eC5zb3BfdHhkOworCWlmIChjdHgubXNzKSB7CisJCWdkZXNjLT50eGQuaGxlbiA9IGN0eC5ldGhfaXBfaGRyX3NpemUgKyBjdHgubDRfaGRyX3NpemU7CisJCWdkZXNjLT50eGQub20gPSBWTVhORVQzX09NX1RTTzsKKwkJZ2Rlc2MtPnR4ZC5tc3Njb2YgPSBjdHgubXNzOworCQl0cS0+c2hhcmVkLT50eE51bURlZmVycmVkICs9IChza2ItPmxlbiAtIGdkZXNjLT50eGQuaGxlbiArCisJCQkJCSAgICAgY3R4Lm1zcyAtIDEpIC8gY3R4Lm1zczsKKwl9IGVsc2UgeworCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJZ2Rlc2MtPnR4ZC5obGVuID0gY3R4LmV0aF9pcF9oZHJfc2l6ZTsKKwkJCWdkZXNjLT50eGQub20gPSBWTVhORVQzX09NX0NTVU07CisJCQlnZGVzYy0+dHhkLm1zc2NvZiA9IGN0eC5ldGhfaXBfaGRyX3NpemUgKworCQkJCQkgICAgc2tiLT5jc3VtX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCWdkZXNjLT50eGQub20gPSAwOworCQkJZ2Rlc2MtPnR4ZC5tc3Njb2YgPSAwOworCQl9CisJCXRxLT5zaGFyZWQtPnR4TnVtRGVmZXJyZWQrKzsKKwl9CisKKwlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCWdkZXNjLT50eGQudGkgPSAxOworCQlnZGVzYy0+dHhkLnRjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCX0KKworCXdtYigpOworCisJLyogZmluYWxseSBmbGlwcyB0aGUgR0VOIGJpdCBvZiB0aGUgU09QIGRlc2MgKi8KKwlnZGVzYy0+ZHdvcmRbMl0gXj0gVk1YTkVUM19UWERfR0VOOworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkidHhkWyV1XTogU09QIDB4JUx4IDB4JXggMHgleFxuIiwKKwkJKHUzMikoKHVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKiljdHguc29wX3R4ZCAtCisJCXRxLT50eF9yaW5nLmJhc2UpLCBnZGVzYy0+dHhkLmFkZHIsIGdkZXNjLT5kd29yZFsyXSwKKwkJZ2Rlc2MtPmR3b3JkWzNdKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRxLT50eF9sb2NrLCBmbGFncyk7CisKKwlpZiAodHEtPnNoYXJlZC0+dHhOdW1EZWZlcnJlZCA+PSB0cS0+c2hhcmVkLT50eFRocmVzaG9sZCkgeworCQl0cS0+c2hhcmVkLT50eE51bURlZmVycmVkID0gMDsKKwkJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19UWFBST0QsCisJCQkJICAgICAgIHRxLT50eF9yaW5nLm5leHQyZmlsbCk7CisJfQorCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworaGRyX3Rvb19iaWc6CisJdHEtPnN0YXRzLmRyb3Bfb3ZlcnNpemVkX2hkcisrOworZHJvcF9wa3Q6CisJdHEtPnN0YXRzLmRyb3BfdG90YWwrKzsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCitzdGF0aWMgbmV0ZGV2X3R4X3QKK3ZteG5ldDNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSA9ICZhZGFwdGVyLT50eF9xdWV1ZTsKKworCXJldHVybiB2bXhuZXQzX3RxX3htaXQoc2tiLCB0cSwgYWRhcHRlciwgbmV0ZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19yeF9jc3VtKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBza19idWZmICpza2IsCisJCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjKQoreworCWlmICghZ2Rlc2MtPnJjZC5jbmMgJiYgYWRhcHRlci0+cnhjc3VtKSB7CisJCS8qIHR5cGljYWwgY2FzZTogVENQL1VEUCBvdmVyIElQIGFuZCBib3RoIGNzdW1zIGFyZSBjb3JyZWN0ICovCisJCWlmICgoZ2Rlc2MtPmR3b3JkWzNdICYgVk1YTkVUM19SQ0RfQ1NVTV9PSykgPT0KKwkJCQkJCQlWTVhORVQzX1JDRF9DU1VNX09LKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJQlVHX09OKCEoZ2Rlc2MtPnJjZC50Y3AgfHwgZ2Rlc2MtPnJjZC51ZHApKTsKKwkJCUJVR19PTighKGdkZXNjLT5yY2QudjQgIHx8IGdkZXNjLT5yY2QudjYpKTsKKwkJCUJVR19PTihnZGVzYy0+cmNkLmZyZyk7CisJCX0gZWxzZSB7CisJCQlpZiAoZ2Rlc2MtPnJjZC5jc3VtKSB7CisJCQkJc2tiLT5jc3VtID0gaHRvbnMoZ2Rlc2MtPnJjZC5jc3VtKTsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CisJCQl9IGVsc2UgeworCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfcnhfZXJyb3Ioc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjICpyY2QsCisJCSBzdHJ1Y3Qgdm14bmV0M19yeF9jdHggKmN0eCwgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcnEtPnN0YXRzLmRyb3BfZXJyKys7CisJaWYgKCFyY2QtPmZjcykKKwkJcnEtPnN0YXRzLmRyb3BfZmNzKys7CisKKwlycS0+c3RhdHMuZHJvcF90b3RhbCsrOworCisJLyoKKwkgKiBXZSBkbyBub3QgdW5tYXAgYW5kIGNoYWluIHRoZSByeCBidWZmZXIgdG8gdGhlIHNrYi4KKwkgKiBXZSBiYXNpY2FsbHkgcHJldGVuZCB0aGlzIGJ1ZmZlciBpcyBub3QgdXNlZCBhbmQgd2lsbCBiZSByZWN5Y2xlZAorCSAqIGJ5IHZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKCkKKwkgKi8KKworCS8qCisJICogY3R4LT5za2IgbWF5IGJlIE5VTEwgaWYgdGhpcyBpcyB0aGUgZmlyc3QgYW5kIHRoZSBvbmx5IG9uZQorCSAqIGRlc2MgZm9yIHRoZSBwa3QKKwkgKi8KKwlpZiAoY3R4LT5za2IpCisJCWRldl9rZnJlZV9za2JfaXJxKGN0eC0+c2tiKTsKKworCWN0eC0+c2tiID0gTlVMTDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJICAgICAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBxdW90YSkKK3sKKwlzdGF0aWMgdTMyIHJ4cHJvZF9yZWdbMl0gPSB7Vk1YTkVUM19SRUdfUlhQUk9ELCBWTVhORVQzX1JFR19SWFBST0QyfTsKKwl1MzIgbnVtX3J4ZCA9IDA7CisJc3RydWN0IFZteG5ldDNfUnhDb21wRGVzYyAqcmNkOworCXN0cnVjdCB2bXhuZXQzX3J4X2N0eCAqY3R4ID0gJnJxLT5yeF9jdHg7CisKKwlyY2QgPSAmcnEtPmNvbXBfcmluZy5iYXNlW3JxLT5jb21wX3JpbmcubmV4dDJwcm9jXS5yY2Q7CisJd2hpbGUgKHJjZC0+Z2VuID09IHJxLT5jb21wX3JpbmcuZ2VuKSB7CisJCXN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICpyYmk7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCBudW1fdG9fYWxsb2M7CisJCXN0cnVjdCBWbXhuZXQzX1J4RGVzYyAqcnhkOworCQl1MzIgaWR4LCByaW5nX2lkeDsKKworCQlpZiAobnVtX3J4ZCA+PSBxdW90YSkgeworCQkJLyogd2UgbWF5IHN0b3AgZXZlbiBiZWZvcmUgd2Ugc2VlIHRoZSBFT1AgZGVzYyBvZgorCQkJICogdGhlIGN1cnJlbnQgcGt0CisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCW51bV9yeGQrKzsKKworCQlpZHggPSByY2QtPnJ4ZElkeDsKKwkJcmluZ19pZHggPSByY2QtPnJxSUQgPT0gcnEtPnFpZCA/IDAgOiAxOworCisJCXJ4ZCA9ICZycS0+cnhfcmluZ1tyaW5nX2lkeF0uYmFzZVtpZHhdLnJ4ZDsKKwkJcmJpID0gcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XSArIGlkeDsKKworCQlCVUdfT04ocnhkLT5hZGRyICE9IHJiaS0+ZG1hX2FkZHIgfHwgcnhkLT5sZW4gIT0gcmJpLT5sZW4pOworCisJCWlmICh1bmxpa2VseShyY2QtPmVvcCAmJiByY2QtPmVycikpIHsKKwkJCXZteG5ldDNfcnhfZXJyb3IocnEsIHJjZCwgY3R4LCBhZGFwdGVyKTsKKwkJCWdvdG8gcmNkX2RvbmU7CisJCX0KKworCQlpZiAocmNkLT5zb3ApIHsgLyogZmlyc3QgYnVmIG9mIHRoZSBwa3QgKi8KKwkJCUJVR19PTihyeGQtPmJ0eXBlICE9IFZNWE5FVDNfUlhEX0JUWVBFX0hFQUQgfHwKKwkJCSAgICAgICByY2QtPnJxSUQgIT0gcnEtPnFpZCk7CisKKwkJCUJVR19PTihyYmktPmJ1Zl90eXBlICE9IFZNWE5FVDNfUlhfQlVGX1NLQik7CisJCQlCVUdfT04oY3R4LT5za2IgIT0gTlVMTCB8fCByYmktPnNrYiA9PSBOVUxMKTsKKworCQkJaWYgKHVubGlrZWx5KHJjZC0+bGVuID09IDApKSB7CisJCQkJLyogUHJldGVuZCB0aGUgcnggYnVmZmVyIGlzIHNraXBwZWQuICovCisJCQkJQlVHX09OKCEocmNkLT5zb3AgJiYgcmNkLT5lb3ApKTsKKwkJCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkJInJ4UmluZ1sldV1bJXVdIDAgbGVuZ3RoXG4iLAorCQkJCQlyaW5nX2lkeCwgaWR4KTsKKwkJCQlnb3RvIHJjZF9kb25lOworCQkJfQorCisJCQljdHgtPnNrYiA9IHJiaS0+c2tiOworCQkJcmJpLT5za2IgPSBOVUxMOworCisJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIHJiaS0+ZG1hX2FkZHIsIHJiaS0+bGVuLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJc2tiX3B1dChjdHgtPnNrYiwgcmNkLT5sZW4pOworCQl9IGVsc2UgeworCQkJQlVHX09OKGN0eC0+c2tiID09IE5VTEwpOworCQkJLyogbm9uIFNPUCBidWZmZXIgbXVzdCBiZSB0eXBlIDEgaW4gbW9zdCBjYXNlcyAqLworCQkJaWYgKHJiaS0+YnVmX3R5cGUgPT0gVk1YTkVUM19SWF9CVUZfUEFHRSkgeworCQkJCUJVR19PTihyeGQtPmJ0eXBlICE9IFZNWE5FVDNfUlhEX0JUWVBFX0JPRFkpOworCisJCQkJaWYgKHJjZC0+bGVuKSB7CisJCQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgICAgcmJpLT5kbWFfYWRkciwgcmJpLT5sZW4sCisJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJCQl2bXhuZXQzX2FwcGVuZF9mcmFnKGN0eC0+c2tiLCByY2QsIHJiaSk7CisJCQkJCXJiaS0+cGFnZSA9IE5VTEw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBvbmx5IHRpbWUgYSBub24tU09QIGJ1ZmZlciBpcyB0eXBlIDAgaXMKKwkJCQkgKiB3aGVuIGl0J3MgRU9QIGFuZCBlcnJvciBmbGFnIGlzIHJhaXNlZCwgd2hpY2gKKwkJCQkgKiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCisJCQkJICovCisJCQkJQlVHX09OKHRydWUpOworCQkJfQorCQl9CisKKwkJc2tiID0gY3R4LT5za2I7CisJCWlmIChyY2QtPmVvcCkgeworCQkJc2tiLT5sZW4gKz0gc2tiLT5kYXRhX2xlbjsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gc2tiLT5kYXRhX2xlbjsKKworCQkJdm14bmV0M19yeF9jc3VtKGFkYXB0ZXIsIHNrYiwKKwkJCQkJKHVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKilyY2QpOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQkJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsYW5fZ3JwICYmIHJjZC0+dHMpKSB7CisJCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwKKwkJCQkJCWFkYXB0ZXItPnZsYW5fZ3JwLCByY2QtPnRjaSk7CisJCQl9IGVsc2UgeworCQkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJCQl9CisKKwkJCWFkYXB0ZXItPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQljdHgtPnNrYiA9IE5VTEw7CisJCX0KKworcmNkX2RvbmU6CisJCS8qIGRldmljZSBtYXkgc2tpcCBzb21lIHJ4IGRlc2NzICovCisJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmNvbXAgPSBpZHg7CisJCVZNWE5FVDNfSU5DX1JJTkdfSURYX09OTFkocnEtPnJ4X3JpbmdbcmluZ19pZHhdLm5leHQyY29tcCwKKwkJCQkJICBycS0+cnhfcmluZ1tyaW5nX2lkeF0uc2l6ZSk7CisKKwkJLyogcmVmaWxsIHJ4IGJ1ZmZlcnMgZnJlcXVlbnRseSB0byBhdm9pZCBzdGFydmluZyB0aGUgaC93ICovCisJCW51bV90b19hbGxvYyA9IHZteG5ldDNfY21kX3JpbmdfZGVzY19hdmFpbChycS0+cnhfcmluZyArCisJCQkJCQkJICAgcmluZ19pZHgpOworCQlpZiAodW5saWtlbHkobnVtX3RvX2FsbG9jID4gVk1YTkVUM19SWF9BTExPQ19USFJFU0hPTEQocnEsCisJCQkJCQkJcmluZ19pZHgsIGFkYXB0ZXIpKSkgeworCQkJdm14bmV0M19ycV9hbGxvY19yeF9idWYocnEsIHJpbmdfaWR4LCBudW1fdG9fYWxsb2MsCisJCQkJCQlhZGFwdGVyKTsKKworCQkJLyogaWYgbmVlZGVkLCB1cGRhdGUgdGhlIHJlZ2lzdGVyICovCisJCQlpZiAodW5saWtlbHkocnEtPnNoYXJlZC0+dXBkYXRlUnhQcm9kKSkgeworCQkJCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwKKwkJCQkJcnhwcm9kX3JlZ1tyaW5nX2lkeF0gKyBycS0+cWlkICogOCwKKwkJCQkJcnEtPnJ4X3JpbmdbcmluZ19pZHhdLm5leHQyZmlsbCk7CisJCQkJcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSA9IDA7CisJCQl9CisJCX0KKworCQl2bXhuZXQzX2NvbXBfcmluZ19hZHZfbmV4dDJwcm9jKCZycS0+Y29tcF9yaW5nKTsKKwkJcmNkID0gJnJxLT5jb21wX3JpbmcuYmFzZVtycS0+Y29tcF9yaW5nLm5leHQycHJvY10ucmNkOworCX0KKworCXJldHVybiBudW1fcnhkOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3JxX2NsZWFudXAoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBpLCByaW5nX2lkeDsKKwlzdHJ1Y3QgVm14bmV0M19SeERlc2MgKnJ4ZDsKKworCWZvciAocmluZ19pZHggPSAwOyByaW5nX2lkeCA8IDI7IHJpbmdfaWR4KyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHJxLT5yeF9yaW5nW3JpbmdfaWR4XS5zaXplOyBpKyspIHsKKwkJCXJ4ZCA9ICZycS0+cnhfcmluZ1tyaW5nX2lkeF0uYmFzZVtpXS5yeGQ7CisKKwkJCWlmIChyeGQtPmJ0eXBlID09IFZNWE5FVDNfUlhEX0JUWVBFX0hFQUQgJiYKKwkJCQkJcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5za2IpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIHJ4ZC0+YWRkciwKKwkJCQkJCSByeGQtPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHJxLT5idWZfaW5mb1tyaW5nX2lkeF1baV0uc2tiKTsKKwkJCQlycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnNrYiA9IE5VTEw7CisJCQl9IGVsc2UgaWYgKHJ4ZC0+YnR5cGUgPT0gVk1YTkVUM19SWERfQlRZUEVfQk9EWSAmJgorCQkJCQlycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnBhZ2UpIHsKKwkJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCByeGQtPmFkZHIsCisJCQkJCSAgICAgICByeGQtPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlwdXRfcGFnZShycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnBhZ2UpOworCQkJCXJxLT5idWZfaW5mb1tyaW5nX2lkeF1baV0ucGFnZSA9IE5VTEw7CisJCQl9CisJCX0KKworCQlycS0+cnhfcmluZ1tyaW5nX2lkeF0uZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKwkJcnEtPnJ4X3JpbmdbcmluZ19pZHhdLm5leHQyZmlsbCA9CisJCQkJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmNvbXAgPSAwOworCQlycS0+dW5jb21taXR0ZWRbcmluZ19pZHhdID0gMDsKKwl9CisKKwlycS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJcnEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworfQorCisKK3ZvaWQgdm14bmV0M19ycV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJaW50IGo7CisKKwkvKiBhbGwgcnggYnVmZmVycyBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGZyZWVkICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAocnEtPmJ1Zl9pbmZvW2ldKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgcnEtPnJ4X3JpbmdbaV0uc2l6ZTsgaisrKQorCQkJCUJVR19PTihycS0+YnVmX2luZm9baV1bal0ucGFnZSAhPSBOVUxMKTsKKwkJfQorCX0KKworCisJa2ZyZWUocnEtPmJ1Zl9pbmZvWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKHJxLT5yeF9yaW5nW2ldLmJhc2UpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcnEtPnJ4X3JpbmdbaV0uc2l6ZQorCQkJCQkgICAgKiBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhEZXNjKSwKKwkJCQkJICAgIHJxLT5yeF9yaW5nW2ldLmJhc2UsCisJCQkJCSAgICBycS0+cnhfcmluZ1tpXS5iYXNlUEEpOworCQkJcnEtPnJ4X3JpbmdbaV0uYmFzZSA9IE5VTEw7CisJCX0KKwkJcnEtPmJ1Zl9pbmZvW2ldID0gTlVMTDsKKwl9CisKKwlpZiAocnEtPmNvbXBfcmluZy5iYXNlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcnEtPmNvbXBfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MpLAorCQkJCSAgICBycS0+Y29tcF9yaW5nLmJhc2UsIHJxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwkJcnEtPmNvbXBfcmluZy5iYXNlID0gTlVMTDsKKwl9Cit9CisKKworc3RhdGljIGludAordm14bmV0M19ycV9pbml0KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJc3RydWN0IHZteG5ldDNfYWRhcHRlciAgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIGJ1Zl9pbmZvICovCisJZm9yIChpID0gMDsgaSA8IHJxLT5yeF9yaW5nWzBdLnNpemU7IGkrKykgeworCisJCS8qIDFzdCBidWYgZm9yIGEgcGt0IGlzIHNrYnVmZiAqLworCQlpZiAoaSAlIGFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ID09IDApIHsKKwkJCXJxLT5idWZfaW5mb1swXVtpXS5idWZfdHlwZSA9IFZNWE5FVDNfUlhfQlVGX1NLQjsKKwkJCXJxLT5idWZfaW5mb1swXVtpXS5sZW4gPSBhZGFwdGVyLT5za2JfYnVmX3NpemU7CisJCX0gZWxzZSB7IC8qIHN1YnNlcXVlbnQgYnVmcyBmb3IgYSBwa3QgaXMgZnJhZyAqLworCQkJcnEtPmJ1Zl9pbmZvWzBdW2ldLmJ1Zl90eXBlID0gVk1YTkVUM19SWF9CVUZfUEFHRTsKKwkJCXJxLT5idWZfaW5mb1swXVtpXS5sZW4gPSBQQUdFX1NJWkU7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHJxLT5yeF9yaW5nWzFdLnNpemU7IGkrKykgeworCQlycS0+YnVmX2luZm9bMV1baV0uYnVmX3R5cGUgPSBWTVhORVQzX1JYX0JVRl9QQUdFOworCQlycS0+YnVmX2luZm9bMV1baV0ubGVuID0gUEFHRV9TSVpFOworCX0KKworCS8qIHJlc2V0IGludGVybmFsIHN0YXRlIGFuZCBhbGxvY2F0ZSBidWZmZXJzIGZvciBib3RoIHJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlycS0+cnhfcmluZ1tpXS5uZXh0MmZpbGwgPSBycS0+cnhfcmluZ1tpXS5uZXh0MmNvbXAgPSAwOworCQlycS0+dW5jb21taXR0ZWRbaV0gPSAwOworCisJCW1lbXNldChycS0+cnhfcmluZ1tpXS5iYXNlLCAwLCBycS0+cnhfcmluZ1tpXS5zaXplICoKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeERlc2MpKTsKKwkJcnEtPnJ4X3JpbmdbaV0uZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKwl9CisJaWYgKHZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKHJxLCAwLCBycS0+cnhfcmluZ1swXS5zaXplIC0gMSwKKwkJCQkgICAgYWRhcHRlcikgPT0gMCkgeworCQkvKiBhdCBsZWFzdCBoYXMgMSByeCBidWZmZXIgZm9yIHRoZSAxc3QgcmluZyAqLworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdm14bmV0M19ycV9hbGxvY19yeF9idWYocnEsIDEsIHJxLT5yeF9yaW5nWzFdLnNpemUgLSAxLCBhZGFwdGVyKTsKKworCS8qIHJlc2V0IHRoZSBjb21wIHJpbmcgKi8KKwlycS0+Y29tcF9yaW5nLm5leHQycHJvYyA9IDA7CisJbWVtc2V0KHJxLT5jb21wX3JpbmcuYmFzZSwgMCwgcnEtPmNvbXBfcmluZy5zaXplICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MpKTsKKwlycS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisKKwkvKiByZXNldCByeGN0eCAqLworCXJxLT5yeF9jdHguc2tiID0gTlVMTDsKKworCS8qIHN0YXRzIGFyZSBub3QgcmVzZXQgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3JxX2NyZWF0ZShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc2l6ZV90IHN6OworCXN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICpiaTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKworCQlzeiA9IHJxLT5yeF9yaW5nW2ldLnNpemUgKiBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhEZXNjKTsKKwkJcnEtPnJ4X3JpbmdbaV0uYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHN6LAorCQkJCQkJCSZycS0+cnhfcmluZ1tpXS5iYXNlUEEpOworCQlpZiAoIXJxLT5yeF9yaW5nW2ldLmJhc2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByeCByaW5nICVkXG4iLAorCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaSk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXN6ID0gcnEtPmNvbXBfcmluZy5zaXplICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MpOworCXJxLT5jb21wX3JpbmcuYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHN6LAorCQkJCQkJICAmcnEtPmNvbXBfcmluZy5iYXNlUEEpOworCWlmICghcnEtPmNvbXBfcmluZy5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByeCBjb21wIHJpbmdcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlzeiA9IHNpemVvZihzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbykgKiAocnEtPnJ4X3JpbmdbMF0uc2l6ZSArCisJCQkJCQkgICBycS0+cnhfcmluZ1sxXS5zaXplKTsKKwliaSA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghYmkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHJ4IGJ1ZmluZm9cbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisJbWVtc2V0KGJpLCAwLCBzeik7CisJcnEtPmJ1Zl9pbmZvWzBdID0gYmk7CisJcnEtPmJ1Zl9pbmZvWzFdID0gYmkgKyBycS0+cnhfcmluZ1swXS5zaXplOworCisJcmV0dXJuIDA7CisKK2VycjoKKwl2bXhuZXQzX3JxX2Rlc3Ryb3kocnEsIGFkYXB0ZXIpOworCXJldHVybiAtRU5PTUVNOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZG9fcG9sbChzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBpbnQgYnVkZ2V0KQoreworCWlmICh1bmxpa2VseShhZGFwdGVyLT5zaGFyZWQtPmVjcikpCisJCXZteG5ldDNfcHJvY2Vzc19ldmVudHMoYWRhcHRlcik7CisKKwl2bXhuZXQzX3RxX3R4X2NvbXBsZXRlKCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisJcmV0dXJuIHZteG5ldDNfcnFfcnhfY29tcGxldGUoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyLCBidWRnZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLAorCQkJCQkgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsIG5hcGkpOworCWludCByeGRfZG9uZTsKKworCXJ4ZF9kb25lID0gdm14bmV0M19kb19wb2xsKGFkYXB0ZXIsIGJ1ZGdldCk7CisKKwlpZiAocnhkX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJdm14bmV0M19lbmFibGVfaW50cihhZGFwdGVyLCAwKTsKKwl9CisJcmV0dXJuIHJ4ZF9kb25lOworfQorCisKKy8qIEludGVycnVwdCBoYW5kbGVyIGZvciB2bXhuZXQzICAqLworc3RhdGljIGlycXJldHVybl90Cit2bXhuZXQzX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAodW5saWtlbHkoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfSU5UWCkpIHsKKwkJdTMyIGljciA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19JQ1IpOworCQlpZiAodW5saWtlbHkoaWNyID09IDApKQorCQkJLyogbm90IG91cnMgKi8KKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKworCS8qIGRpc2FibGUgaW50ciBpZiBuZWVkZWQgKi8KKwlpZiAoYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPT0gVk1YTkVUM19JTU1fQUNUSVZFKQorCQl2bXhuZXQzX2Rpc2FibGVfaW50cihhZGFwdGVyLCAwKTsKKworCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKworCisvKiBuZXRwb2xsIGNhbGxiYWNrLiAqLworc3RhdGljIHZvaWQKK3ZteG5ldDNfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBpcnE7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9NU0lYKQorCQlpcnEgPSBhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1swXS52ZWN0b3I7CisJZWxzZQorI2VuZGlmCisJCWlycSA9IGFkYXB0ZXItPnBkZXYtPmlycTsKKworCWRpc2FibGVfaXJxKGlycSk7CisJdm14bmV0M19pbnRyKGlycSwgbmV0ZGV2KTsKKwllbmFibGVfaXJxKGlycSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludAordm14bmV0M19yZXF1ZXN0X2lycXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkgeworCQkvKiB3ZSBvbmx5IHVzZSAxIE1TSS1YIHZlY3RvciAqLworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1swXS52ZWN0b3IsCisJCQkJICB2bXhuZXQzX2ludHIsIDAsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldik7CisJfSBlbHNlCisjZW5kaWYKKwlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgdm14bmV0M19pbnRyLCAwLAorCQkJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOworCX0gZWxzZSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgdm14bmV0M19pbnRyLAorCQkJCSAgSVJRRl9TSEFSRUQsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldik7CisJfQorCisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJXMgKGludHIgdHlwZTolZCksIGVycm9yIgorCQkgICAgICAgIjolZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5pbnRyLnR5cGUsIGVycik7CisKKworCWlmICghZXJyKSB7CisJCWludCBpOworCQkvKiBpbml0IG91ciBpbnRyIHNldHRpbmdzICovCisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5pbnRyLm51bV9pbnRyczsgaSsrKQorCQkJYWRhcHRlci0+aW50ci5tb2RfbGV2ZWxzW2ldID0gVVBUMV9JTUxfQURBUFRJVkU7CisKKwkJLyogbmV4dCBzZXR1cCBpbnRyIGluZGV4IGZvciBhbGwgaW50ciBzb3VyY2VzICovCisJCWFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5pbnRyX2lkeCA9IDA7CisJCWFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5pbnRyX2lkeCA9IDA7CisJCWFkYXB0ZXItPmludHIuZXZlbnRfaW50cl9pZHggPSAwOworCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRyIHR5cGUgJXUsIG1vZGUgJXUsICV1IHZlY3RvcnMgIgorCQkgICAgICAgImFsbG9jYXRlZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5pbnRyLnR5cGUsCisJCSAgICAgICBhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSwgYWRhcHRlci0+aW50ci5udW1faW50cnMpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZnJlZV9pcnFzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0FVVE8gfHwKKwkgICAgICAgYWRhcHRlci0+aW50ci5udW1faW50cnMgPD0gMCk7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmludHIudHlwZSkgeworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJY2FzZSBWTVhORVQzX0lUX01TSVg6CisJeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJCWZyZWVfaXJxKGFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKKwkJCQkgYWRhcHRlci0+bmV0ZGV2KTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJY2FzZSBWTVhORVQzX0lUX01TSToKKwkJZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBhZGFwdGVyLT5uZXRkZXYpOworCQlicmVhazsKKwljYXNlIFZNWE5FVDNfSVRfSU5UWDoKKwkJZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBhZGFwdGVyLT5uZXRkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04odHJ1ZSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQgKnNoYXJlZCA9IGFkYXB0ZXItPnNoYXJlZDsKKwl1MzIgKnZmVGFibGUgPSBhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mLnZmVGFibGU7CisKKwlpZiAoZ3JwKSB7CisJCS8qIGFkZCB2bGFuIHJ4IHN0cmlwcGluZy4gKi8KKwkJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpIHsKKwkJCWludCBpOworCQkJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKKwkJCWFkYXB0ZXItPnZsYW5fZ3JwID0gZ3JwOworCisJCQkvKiB1cGRhdGUgRkVBVFVSRVMgdG8gZGV2aWNlICovCisJCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9SWFZMQU47CisJCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKKwkJCS8qCisJCQkgKiAgQ2xlYXIgZW50aXJlIHZmVGFibGU7IHRoZW4gZW5hYmxlIHVudGFnZ2VkIHBrdHMuCisJCQkgKiAgTm90ZTogc2V0dGluZyBvbmUgZW50cnkgaW4gdmZUYWJsZSB0byBub24temVybyB0dXJucworCQkJICogIG9uIFZMQU4gcnggZmlsdGVyaW5nLgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgVk1YTkVUM19WRlRfU0laRTsgaSsrKQorCQkJCXZmVGFibGVbaV0gPSAwOworCisJCQlWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIDApOworCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHZsYW5fcnhfcmVnaXN0ZXIgd2hlbiBkZXZpY2UgaGFzICIKKwkJCSAgICAgICAibm8gTkVUSUZfRl9IV19WTEFOX1JYXG4iLCBuZXRkZXYtPm5hbWUpOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmVtb3ZlIHZsYW4gcnggc3RyaXBwaW5nLiAqLworCQlzdHJ1Y3QgVm14bmV0M19EU0RldlJlYWQgKmRldlJlYWQgPSAmc2hhcmVkLT5kZXZSZWFkOworCQlhZGFwdGVyLT52bGFuX2dycCA9IE5VTEw7CisKKwkJaWYgKGRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgJiBVUFQxX0ZfUlhWTEFOKSB7CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IFZNWE5FVDNfVkZUX1NJWkU7IGkrKykgeworCQkJCS8qIGNsZWFyIGVudGlyZSB2ZlRhYmxlOyB0aGlzIGFsc28gZGlzYWJsZXMKKwkJCQkgKiBWTEFOIHJ4IGZpbHRlcmluZworCQkJCSAqLworCQkJCXZmVGFibGVbaV0gPSAwOworCQkJfQorCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKKworCQkJLyogdXBkYXRlIEZFQVRVUkVTIHRvIGRldmljZSAqLworCQkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyAmPSB+VVBUMV9GX1JYVkxBTjsKKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3Jlc3RvcmVfdmxhbihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT52bGFuX2dycCkgeworCQl1MTYgdmlkOworCQl1MzIgKnZmVGFibGUgPSBhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mLnZmVGFibGU7CisJCWJvb2wgYWN0aXZlVmxhbiA9IGZhbHNlOworCisJCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IHZpZCsrKSB7CisJCQlpZiAodmxhbl9ncm91cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQpKSB7CisJCQkJVk1YTkVUM19TRVRfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCB2aWQpOworCQkJCWFjdGl2ZVZsYW4gPSB0cnVlOworCQkJfQorCQl9CisJCWlmIChhY3RpdmVWbGFuKSB7CisJCQkvKiBjb250aW51ZSB0byBhbGxvdyB1bnRhZ2dlZCBwa3RzICovCisJCQlWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIDApOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiAqdmZUYWJsZSA9IGFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmYudmZUYWJsZTsKKworCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M192bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCisJVk1YTkVUM19DTEVBUl9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCk7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7Cit9CisKKworc3RhdGljIHU4ICoKK3ZteG5ldDNfY29weV9tYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXU4ICpidWYgPSBOVUxMOworCXUzMiBzeiA9IG5ldGRldi0+bWNfY291bnQgKiBFVEhfQUxFTjsKKworCS8qIHN0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZi5tZlRhYmxlTGVuIGlzIHUxNi4gKi8KKwlpZiAoc3ogPD0gMHhmZmZmKSB7CisJCS8qIFdlIG1heSBiZSBjYWxsZWQgd2l0aCBCSCBkaXNhYmxlZCAqLworCQlidWYgPSBrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJ1ZikgeworCQkJaW50IGk7CisJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gbmV0ZGV2LT5tY19saXN0OworCisJCQlmb3IgKGkgPSAwOyBpIDwgbmV0ZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCQkJQlVHX09OKCFtYyk7CisJCQkJbWVtY3B5KGJ1ZiArIGkgKiBFVEhfQUxFTiwgbWMtPmRtaV9hZGRyLAorCQkJCSAgICAgICBFVEhfQUxFTik7CisJCQkJbWMgPSBtYy0+bmV4dDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gYnVmOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3NldF9tYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZiAqcnhDb25mID0KKwkJCQkJJmFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmY7CisJdTggKm5ld190YWJsZSA9IE5VTEw7CisJdTMyIG5ld19tb2RlID0gVk1YTkVUM19SWE1fVUNBU1Q7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9QUk9NSVNDOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9CQ0FTVDsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9BTExfTVVMVEk7CisJZWxzZQorCQlpZiAobmV0ZGV2LT5tY19jb3VudCA+IDApIHsKKwkJCW5ld190YWJsZSA9IHZteG5ldDNfY29weV9tYyhuZXRkZXYpOworCQkJaWYgKG5ld190YWJsZSkgeworCQkJCW5ld19tb2RlIHw9IFZNWE5FVDNfUlhNX01DQVNUOworCQkJCXJ4Q29uZi0+bWZUYWJsZUxlbiA9IG5ldGRldi0+bWNfY291bnQgKgorCQkJCQkJICAgICBFVEhfQUxFTjsKKwkJCQlyeENvbmYtPm1mVGFibGVQQSA9IHZpcnRfdG9fcGh5cyhuZXdfdGFibGUpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIGNvcHkgbWNhc3QgbGlzdCIKKwkJCQkgICAgICAgIiwgc2V0dGluZyBBTExfTVVMVElcbiIsIG5ldGRldi0+bmFtZSk7CisJCQkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQUxMX01VTFRJOworCQkJfQorCQl9CisKKworCWlmICghKG5ld19tb2RlICYgVk1YTkVUM19SWE1fTUNBU1QpKSB7CisJCXJ4Q29uZi0+bWZUYWJsZUxlbiA9IDA7CisJCXJ4Q29uZi0+bWZUYWJsZVBBID0gMDsKKwl9CisKKwlpZiAobmV3X21vZGUgIT0gcnhDb25mLT5yeE1vZGUpIHsKKwkJcnhDb25mLT5yeE1vZGUgPSBuZXdfbW9kZTsKKwkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9SWF9NT0RFKTsKKwl9CisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfTUFDX0ZJTFRFUlMpOworCisJa2ZyZWUobmV3X3RhYmxlKTsKK30KKworCisvKgorICogICBTZXQgdXAgZHJpdmVyX3NoYXJlZCBiYXNlZCBvbiBzZXR0aW5ncyBpbiBhZGFwdGVyLgorICovCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3NldHVwX2RyaXZlcl9zaGFyZWQoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQgKnNoYXJlZCA9IGFkYXB0ZXItPnNoYXJlZDsKKwlzdHJ1Y3QgVm14bmV0M19EU0RldlJlYWQgKmRldlJlYWQgPSAmc2hhcmVkLT5kZXZSZWFkOworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDb25mICp0cWM7CisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZUNvbmYgKnJxYzsKKwlpbnQgaTsKKworCW1lbXNldChzaGFyZWQsIDAsIHNpemVvZigqc2hhcmVkKSk7CisKKwkvKiBkcml2ZXIgc2V0dGluZ3MgKi8KKwlzaGFyZWQtPm1hZ2ljID0gVk1YTkVUM19SRVYxX01BR0lDOworCWRldlJlYWQtPm1pc2MuZHJpdmVySW5mby52ZXJzaW9uID0gVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU07CisJZGV2UmVhZC0+bWlzYy5kcml2ZXJJbmZvLmdvcy5nb3NCaXRzID0gKHNpemVvZih2b2lkICopID09IDQgPworCQkJCVZNWE5FVDNfR09TX0JJVFNfMzIgOiBWTVhORVQzX0dPU19CSVRTXzY0KTsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8uZ29zLmdvc1R5cGUgPSBWTVhORVQzX0dPU19UWVBFX0xJTlVYOworCWRldlJlYWQtPm1pc2MuZHJpdmVySW5mby52bXhuZXQzUmV2U3B0ID0gMTsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8udXB0VmVyU3B0ID0gMTsKKworCWRldlJlYWQtPm1pc2MuZGRQQSA9IHZpcnRfdG9fcGh5cyhhZGFwdGVyKTsKKwlkZXZSZWFkLT5taXNjLmRkTGVuID0gc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIpOworCisJLyogc2V0IHVwIGZlYXR1cmUgZmxhZ3MgKi8KKwlpZiAoYWRhcHRlci0+cnhjc3VtKQorCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9SWENTVU07CisKKwlpZiAoYWRhcHRlci0+bHJvKSB7CisJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgfD0gVVBUMV9GX0xSTzsKKwkJZGV2UmVhZC0+bWlzYy5tYXhOdW1SeFNHID0gMSArIE1BWF9TS0JfRlJBR1M7CisJfQorCWlmICgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKKwkJCSYmIGFkYXB0ZXItPnZsYW5fZ3JwKSB7CisJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgfD0gVVBUMV9GX1JYVkxBTjsKKwl9CisKKwlkZXZSZWFkLT5taXNjLm10dSA9IGFkYXB0ZXItPm5ldGRldi0+bXR1OworCWRldlJlYWQtPm1pc2MucXVldWVEZXNjUEEgPSBhZGFwdGVyLT5xdWV1ZV9kZXNjX3BhOworCWRldlJlYWQtPm1pc2MucXVldWVEZXNjTGVuID0gc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpOworCisJLyogdHggcXVldWUgc2V0dGluZ3MgKi8KKwlCVUdfT04oYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5iYXNlID09IE5VTEwpOworCisJZGV2UmVhZC0+bWlzYy5udW1UeFF1ZXVlcyA9IDE7CisJdHFjID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+Y29uZjsKKwl0cWMtPnR4UmluZ0Jhc2VQQSAgID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5iYXNlUEE7CisJdHFjLT5kYXRhUmluZ0Jhc2VQQSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmRhdGFfcmluZy5iYXNlUEE7CisJdHFjLT5jb21wUmluZ0Jhc2VQQSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5iYXNlUEE7CisJdHFjLT5kZFBBICAgICAgICAgICA9IHZpcnRfdG9fcGh5cyhhZGFwdGVyLT50eF9xdWV1ZS5idWZfaW5mbyk7CisJdHFjLT50eFJpbmdTaXplICAgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3Jpbmcuc2l6ZTsKKwl0cWMtPmRhdGFSaW5nU2l6ZSAgID0gYWRhcHRlci0+dHhfcXVldWUuZGF0YV9yaW5nLnNpemU7CisJdHFjLT5jb21wUmluZ1NpemUgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5zaXplOworCXRxYy0+ZGRMZW4gICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8pICoKKwkJCSAgICAgIHRxYy0+dHhSaW5nU2l6ZTsKKwl0cWMtPmludHJJZHggICAgICAgID0gYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLmludHJfaWR4OworCisJLyogcnggcXVldWUgc2V0dGluZ3MgKi8KKwlkZXZSZWFkLT5taXNjLm51bVJ4UXVldWVzID0gMTsKKwlycWMgPSAmYWRhcHRlci0+cnFkX3N0YXJ0LT5jb25mOworCXJxYy0+cnhSaW5nQmFzZVBBWzBdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5iYXNlUEE7CisJcnFjLT5yeFJpbmdCYXNlUEFbMV0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLmJhc2VQQTsKKwlycWMtPmNvbXBSaW5nQmFzZVBBICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5iYXNlUEE7CisJcnFjLT5kZFBBICAgICAgICAgICAgPSB2aXJ0X3RvX3BoeXMoYWRhcHRlci0+cnhfcXVldWUuYnVmX2luZm8pOworCXJxYy0+cnhSaW5nU2l6ZVswXSAgID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplOworCXJxYy0+cnhSaW5nU2l6ZVsxXSAgID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplOworCXJxYy0+Y29tcFJpbmdTaXplICAgID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemU7CisJcnFjLT5kZExlbiAgICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8pICoKKwkJCSAgICAgICAocnFjLT5yeFJpbmdTaXplWzBdICsgcnFjLT5yeFJpbmdTaXplWzFdKTsKKwlycWMtPmludHJJZHggICAgICAgICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5pbnRyX2lkeDsKKworCS8qIGludHIgc2V0dGluZ3MgKi8KKwlkZXZSZWFkLT5pbnRyQ29uZi5hdXRvTWFzayA9IGFkYXB0ZXItPmludHIubWFza19tb2RlID09CisJCQkJICAgICBWTVhORVQzX0lNTV9BVVRPOworCWRldlJlYWQtPmludHJDb25mLm51bUludHJzID0gYWRhcHRlci0+aW50ci5udW1faW50cnM7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCisJCWRldlJlYWQtPmludHJDb25mLm1vZExldmVsc1tpXSA9IGFkYXB0ZXItPmludHIubW9kX2xldmVsc1tpXTsKKworCWRldlJlYWQtPmludHJDb25mLmV2ZW50SW50cklkeCA9IGFkYXB0ZXItPmludHIuZXZlbnRfaW50cl9pZHg7CisKKwkvKiByeCBmaWx0ZXIgc2V0dGluZ3MgKi8KKwlkZXZSZWFkLT5yeEZpbHRlckNvbmYucnhNb2RlID0gMDsKKwl2bXhuZXQzX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKwkvKiB0aGUgcmVzdCBhcmUgYWxyZWFkeSB6ZXJvZWQgKi8KK30KKworCitpbnQKK3ZteG5ldDNfYWN0aXZhdGVfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKwl1MzIgcmV0OworCisJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCSIlczogc2tiX2J1Zl9zaXplICVkLCByeF9idWZfcGVyX3BrdCAlZCwgcmluZyBzaXplcyIKKwkJIiAldSAldSAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5za2JfYnVmX3NpemUsCisJCWFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0LCBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemUsCisJCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSwKKwkJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplKTsKKworCXZteG5ldDNfdHFfaW5pdCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCWVyciA9IHZteG5ldDNfcnFfaW5pdCgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaW5pdCByeCBxdWV1ZSBmb3IgJXM6IGVycm9yICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIHJxX2VycjsKKwl9CisKKwllcnIgPSB2bXhuZXQzX3JlcXVlc3RfaXJxcyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldHVwIGlycSBmb3IgJXM6IGVycm9yICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGlycV9lcnI7CisJfQorCisJdm14bmV0M19zZXR1cF9kcml2ZXJfc2hhcmVkKGFkYXB0ZXIpOworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19EU0FMLAorCQkJICAgICAgIFZNWE5FVDNfR0VUX0FERFJfTE8oYWRhcHRlci0+c2hhcmVkX3BhKSk7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19EU0FILAorCQkJICAgICAgIFZNWE5FVDNfR0VUX0FERFJfSEkoYWRhcHRlci0+c2hhcmVkX3BhKSk7CisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9BQ1RJVkFURV9ERVYpOworCXJldCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQpOworCisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFjdGl2YXRlIGRldiAlczogZXJyb3IgJXVcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gYWN0aXZhdGVfZXJyOworCX0KKwlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1JYUFJPRCwKKwkJCSAgICAgICBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLm5leHQyZmlsbCk7CisJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19SWFBST0QyLAorCQkJICAgICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0ubmV4dDJmaWxsKTsKKworCS8qIEFwcGx5IHRoZSByeCBmaWx0ZXIgc2V0dGlucyBsYXN0LiAqLworCXZteG5ldDNfc2V0X21jKGFkYXB0ZXItPm5ldGRldik7CisKKwkvKgorCSAqIENoZWNrIGxpbmsgc3RhdGUgd2hlbiBmaXJzdCBhY3RpdmF0aW5nIGRldmljZS4gSXQgd2lsbCBzdGFydCB0aGUKKwkgKiB0eCBxdWV1ZSBpZiB0aGUgbGluayBpcyB1cC4KKwkgKi8KKwl2bXhuZXQzX2NoZWNrX2xpbmsoYWRhcHRlcik7CisKKwluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJdm14bmV0M19lbmFibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gMDsKKworYWN0aXZhdGVfZXJyOgorCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBTCwgMCk7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19EU0FILCAwKTsKKwl2bXhuZXQzX2ZyZWVfaXJxcyhhZGFwdGVyKTsKK2lycV9lcnI6CitycV9lcnI6CisJLyogZnJlZSB1cCBidWZmZXJzIHdlIGFsbG9jYXRlZCAqLworCXZteG5ldDNfcnFfY2xlYW51cCgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKKwordm9pZAordm14bmV0M19yZXNldF9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfUkVTRVRfREVWKTsKK30KKworCitpbnQKK3ZteG5ldDNfcXVpZXNjZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1FVSUVTQ0VfREVWKTsKKwl2bXhuZXQzX2Rpc2FibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCisJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKKwluZXRpZl90eF9kaXNhYmxlKGFkYXB0ZXItPm5ldGRldik7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CisJbmV0aWZfY2Fycmllcl9vZmYoYWRhcHRlci0+bmV0ZGV2KTsKKworCXZteG5ldDNfdHFfY2xlYW51cCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfcnFfY2xlYW51cCgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9pcnFzKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3dyaXRlX21hY19hZGRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCit7CisJdTMyIHRtcDsKKworCXRtcCA9ICoodTMyICopbWFjOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfTUFDTCwgdG1wKTsKKworCXRtcCA9IChtYWNbNV0gPDwgOCkgfCBtYWNbNF07CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19NQUNILCB0bXApOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwl2bXhuZXQzX3dyaXRlX21hY19hZGRyKGFkYXB0ZXIsIGFkZHItPnNhX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT0gaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgcm91dGluZXMgPT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfYWxsb2NfcGNpX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBib29sICpkbWE2NCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBlbmFibGUgYWRhcHRlciAlczogZXJyb3IgJWRcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSA9PSAwKSB7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2sgZmFpbGVkICIKKwkJCSAgICAgICAiZm9yIGFkYXB0ZXIgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycl9zZXRfbWFzazsKKwkJfQorCQkqZG1hNjQgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGNpX3NldF9kbWFfbWFzayBmYWlsZWQgZm9yIGFkYXB0ZXIgIgorCQkJICAgICAgICIlc1xuIiwJcGNpX25hbWUocGRldikpOworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gZXJyX3NldF9tYXNrOworCQl9CisJCSpkbWE2NCA9IGZhbHNlOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgKDEgPDwgMikgLSAxLAorCQkJCQkgICB2bXhuZXQzX2RyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uIGZvciBhZGFwdGVyICVzOiAiCisJCSAgICAgICAiZXJyb3IgJWRcbiIsIHBjaV9uYW1lKHBkZXYpLCBlcnIpOworCQlnb3RvIGVycl9zZXRfbWFzazsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWFkYXB0ZXItPmh3X2FkZHIwID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJaWYgKCFhZGFwdGVyLT5od19hZGRyMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBtYXAgYmFyMCBmb3IgYWRhcHRlciAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKKwlhZGFwdGVyLT5od19hZGRyMSA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghYWRhcHRlci0+aHdfYWRkcjEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIGJhcjEgZm9yIGFkYXB0ZXIgJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2JhcjE7CisJfQorCXJldHVybiAwOworCitlcnJfYmFyMToKKwlpb3VubWFwKGFkYXB0ZXItPmh3X2FkZHIwKTsKK2Vycl9pb3JlbWFwOgorCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgKDEgPDwgMikgLSAxKTsKK2Vycl9zZXRfbWFzazoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19mcmVlX3BjaV9yZXNvdXJjZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlCVUdfT04oIWFkYXB0ZXItPnBkZXYpOworCisJaW91bm1hcChhZGFwdGVyLT5od19hZGRyMCk7CisJaW91bm1hcChhZGFwdGVyLT5od19hZGRyMSk7CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhhZGFwdGVyLT5wZGV2LCAoMSA8PCAyKSAtIDEpOworCXBjaV9kaXNhYmxlX2RldmljZShhZGFwdGVyLT5wZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19hZGp1c3RfcnhfcmluZ19zaXplKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc2l6ZV90IHN6OworCisJaWYgKGFkYXB0ZXItPm5ldGRldi0+bXR1IDw9IFZNWE5FVDNfTUFYX1NLQl9CVUZfU0laRSAtCisJCQkJICAgIFZNWE5FVDNfTUFYX0VUSF9IRFJfU0laRSkgeworCQlhZGFwdGVyLT5za2JfYnVmX3NpemUgPSBhZGFwdGVyLT5uZXRkZXYtPm10dSArCisJCQkJCVZNWE5FVDNfTUFYX0VUSF9IRFJfU0laRTsKKwkJaWYgKGFkYXB0ZXItPnNrYl9idWZfc2l6ZSA8IFZNWE5FVDNfTUlOX1QwX0JVRl9TSVpFKQorCQkJYWRhcHRlci0+c2tiX2J1Zl9zaXplID0gVk1YTkVUM19NSU5fVDBfQlVGX1NJWkU7CisKKwkJYWRhcHRlci0+cnhfYnVmX3Blcl9wa3QgPSAxOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPnNrYl9idWZfc2l6ZSA9IFZNWE5FVDNfTUFYX1NLQl9CVUZfU0laRTsKKwkJc3ogPSBhZGFwdGVyLT5uZXRkZXYtPm10dSAtIFZNWE5FVDNfTUFYX1NLQl9CVUZfU0laRSArCisJCQkJCSAgICBWTVhORVQzX01BWF9FVEhfSERSX1NJWkU7CisJCWFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ID0gMSArIChzeiArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOworCX0KKworCS8qCisJICogZm9yIHNpbXBsaWNpdHksIGZvcmNlIHRoZSByaW5nMCBzaXplIHRvIGJlIGEgbXVsdGlwbGUgb2YKKwkgKiByeF9idWZfcGVyX3BrdCAqIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOCisJICovCisJc3ogPSBhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCAqIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOOworCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSA9IChhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgKworCQkJCQkgICAgIHN6IC0gMSkgLyBzeiAqIHN6OworCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSA9IG1pbl90KHUzMiwKKwkJCQkJICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSwKKwkJCQkJICAgIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvIHN6ICogc3opOworfQorCisKK2ludAordm14bmV0M19jcmVhdGVfcXVldWVzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB0eF9yaW5nX3NpemUsCisJCSAgICAgIHUzMiByeF9yaW5nX3NpemUsIHUzMiByeF9yaW5nMl9zaXplKQoreworCWludCBlcnI7CisKKwlhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemUgICA9IHR4X3Jpbmdfc2l6ZTsKKwlhZGFwdGVyLT50eF9xdWV1ZS5kYXRhX3Jpbmcuc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKKwlhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKKwlhZGFwdGVyLT50eF9xdWV1ZS5zaGFyZWQgPSAmYWRhcHRlci0+dHFkX3N0YXJ0LT5jdHJsOworCWFkYXB0ZXItPnR4X3F1ZXVlLnN0b3BwZWQgPSB0cnVlOworCWVyciA9IHZteG5ldDNfdHFfY3JlYXRlKCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSA9IHJ4X3Jpbmdfc2l6ZTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLnNpemUgPSByeF9yaW5nMl9zaXplOworCXZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShhZGFwdGVyKTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSAgPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgKworCQkJCQkgICAgYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplOworCWFkYXB0ZXItPnJ4X3F1ZXVlLnFpZCAgPSAwOworCWFkYXB0ZXItPnJ4X3F1ZXVlLnFpZDIgPSAxOworCWFkYXB0ZXItPnJ4X3F1ZXVlLnNoYXJlZCA9ICZhZGFwdGVyLT5ycWRfc3RhcnQtPmN0cmw7CisJZXJyID0gdm14bmV0M19ycV9jcmVhdGUoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisJaW50IGVycjsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlLnR4X2xvY2spOworCisJZXJyID0gdm14bmV0M19jcmVhdGVfcXVldWVzKGFkYXB0ZXIsIFZNWE5FVDNfREVGX1RYX1JJTkdfU0laRSwKKwkJCQkgICAgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFLAorCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCWlmIChlcnIpCisJCWdvdG8gcXVldWVfZXJyOworCisJZXJyID0gdm14bmV0M19hY3RpdmF0ZV9kZXYoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBhY3RpdmF0ZV9lcnI7CisKKwlyZXR1cm4gMDsKKworYWN0aXZhdGVfZXJyOgorCXZteG5ldDNfcnFfZGVzdHJveSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfdHFfZGVzdHJveSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworcXVldWVfZXJyOgorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyoKKwkgKiBSZXNldF93b3JrIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIHJlc2V0dGluZyB0aGUgZGV2aWNlLCB3YWl0IGZvciBpdHMKKwkgKiBjb21wbGV0aW9uLgorCSAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJdm14bmV0M19xdWllc2NlX2RldihhZGFwdGVyKTsKKworCXZteG5ldDNfcnFfZGVzdHJveSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfdHFfZGVzdHJveSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCisJY2xlYXJfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZAordm14bmV0M19mb3JjZV9jbG9zZShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCS8qCisJICogd2UgbXVzdCBjbGVhciBWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsIG90aGVyd2lzZQorCSAqIHZteG5ldDNfY2xvc2UoKSB3aWxsIGRlYWRsb2NrLgorCSAqLworCUJVR19PTih0ZXN0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpOworCisJLyogd2UgbmVlZCB0byBlbmFibGUgTkFQSSwgb3RoZXJ3aXNlIGRldl9jbG9zZSB3aWxsIGRlYWRsb2NrICovCisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworCWRldl9jbG9zZShhZGFwdGVyLT5uZXRkZXYpOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChuZXdfbXR1IDwgVk1YTkVUM19NSU5fTVRVIHx8IG5ld19tdHUgPiBWTVhORVQzX01BWF9NVFUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ld19tdHUgPiAxNTAwICYmICFhZGFwdGVyLT5qdW1ib19mcmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwkvKgorCSAqIFJlc2V0X3dvcmsgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIHdhaXQgZm9yIGl0cworCSAqIGNvbXBsZXRpb24uCisJICovCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQltc2xlZXAoMSk7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXZteG5ldDNfcXVpZXNjZV9kZXYoYWRhcHRlcik7CisJCXZteG5ldDNfcmVzZXRfZGV2KGFkYXB0ZXIpOworCisJCS8qIHdlIG5lZWQgdG8gcmUtY3JlYXRlIHRoZSByeCBxdWV1ZSBiYXNlZCBvbiB0aGUgbmV3IG10dSAqLworCQl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwkJdm14bmV0M19hZGp1c3RfcnhfcmluZ19zaXplKGFkYXB0ZXIpOworCQlhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSAgPQorCQkJCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgKworCQkJCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLnNpemU7CisJCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZS1jcmVhdGUgcnggcXVldWUsIgorCQkJCSIgZXJyb3IgJWQuIENsb3NpbmcgaXQuXG4iLCBuZXRkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IHZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmUtYWN0aXZhdGUsIGVycm9yICVkLiAiCisJCQkJIkNsb3NpbmcgaXRcbiIsIG5ldGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJY2xlYXJfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZiAoZXJyKQorCQl2bXhuZXQzX2ZvcmNlX2Nsb3NlKGFkYXB0ZXIpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19kZWNsYXJlX2ZlYXR1cmVzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZG1hNjQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKKwkJTkVUSUZfRl9IV19DU1VNIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8CisJCU5FVElGX0ZfVFNPIHwKKwkJTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9MUk87CisKKwlwcmludGsoS0VSTl9JTkZPICJmZWF0dXJlczogc2cgY3N1bSB2bGFuIGpmIHRzbyB0c29JUHY2IGxybyIpOworCisJYWRhcHRlci0+cnhjc3VtID0gdHJ1ZTsKKwlhZGFwdGVyLT5qdW1ib19mcmFtZSA9IHRydWU7CisJYWRhcHRlci0+bHJvID0gdHJ1ZTsKKworCWlmIChkbWE2NCkgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwkJcHJpbnRrKCIgaGlnaERNQSIpOworCX0KKworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldi0+ZmVhdHVyZXM7CisJcHJpbnRrKCJcbiIpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3JlYWRfbWFjX2FkZHIoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hYykKK3sKKwl1MzIgdG1wOworCisJdG1wID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX01BQ0wpOworCSoodTMyICopbWFjID0gdG1wOworCisJdG1wID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX01BQ0gpOworCW1hY1s0XSA9IHRtcCAmIDB4ZmY7CisJbWFjWzVdID0gKHRtcCA+PiA4KSAmIDB4ZmY7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfYWxsb2NfaW50cl9yZXNvdXJjZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgY2ZnOworCisJLyogaW50ciBzZXR0aW5ncyAqLworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX0dFVF9DT05GX0lOVFIpOworCWNmZyA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQpOworCWFkYXB0ZXItPmludHIudHlwZSA9IGNmZyAmIDB4MzsKKwlhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9IChjZmcgPj4gMikgJiAweDM7CisKKwlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfQVVUTykgeworCQlpbnQgZXJyOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkJYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0uZW50cnkgPSAwOworCQllcnIgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXMsCisJCQkJICAgICAgVk1YTkVUM19MSU5VWF9NQVhfTVNJWF9WRUNUKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWFkYXB0ZXItPmludHIubnVtX2ludHJzID0gMTsKKwkJCWFkYXB0ZXItPmludHIudHlwZSA9IFZNWE5FVDNfSVRfTVNJWDsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisKKwkJZXJyID0gcGNpX2VuYWJsZV9tc2koYWRhcHRlci0+cGRldik7CisJCWlmICghZXJyKSB7CisJCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7CisJCQlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX01TSTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWFkYXB0ZXItPmludHIudHlwZSA9IFZNWE5FVDNfSVRfSU5UWDsKKworCS8qIElOVC1YIHJlbGF0ZWQgc2V0dGluZyAqLworCWFkYXB0ZXItPmludHIubnVtX2ludHJzID0gMTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSVgpCisJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7CisJZWxzZSBpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CisJZWxzZQorCQlCVUdfT04oYWRhcHRlci0+aW50ci50eXBlICE9IFZNWE5FVDNfSVRfSU5UWCk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IHR4IGhhbmdcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d29yayk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcjsKKworCWFkYXB0ZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciwgd29yayk7CisKKwkvKiBpZiBhbm90aGVyIHRocmVhZCBpcyByZXNldHRpbmcgdGhlIGRldmljZSwgbm8gbmVlZCB0byBwcm9jZWVkICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIGNsb3NlZCwgd2UgbXVzdCBsZWF2ZSBpdCBhbG9uZSAqLworCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0dGluZ1xuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJdm14bmV0M19xdWllc2NlX2RldihhZGFwdGVyKTsKKwkJdm14bmV0M19yZXNldF9kZXYoYWRhcHRlcik7CisJCXZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBhbHJlYWR5IGNsb3NlZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9CisKKwljbGVhcl9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit2bXhuZXQzX3Byb2JlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bXhuZXQzX25ldGRldl9vcHMgPSB7CisJCS5uZG9fb3BlbiA9IHZteG5ldDNfb3BlbiwKKwkJLm5kb19zdG9wID0gdm14bmV0M19jbG9zZSwKKwkJLm5kb19zdGFydF94bWl0ID0gdm14bmV0M194bWl0X2ZyYW1lLAorCQkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHZteG5ldDNfc2V0X21hY19hZGRyLAorCQkubmRvX2NoYW5nZV9tdHUgPSB2bXhuZXQzX2NoYW5nZV9tdHUsCisJCS5uZG9fZ2V0X3N0YXRzID0gdm14bmV0M19nZXRfc3RhdHMsCisJCS5uZG9fdHhfdGltZW91dCA9IHZteG5ldDNfdHhfdGltZW91dCwKKwkJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB2bXhuZXQzX3NldF9tYywKKwkJLm5kb192bGFuX3J4X3JlZ2lzdGVyID0gdm14bmV0M192bGFuX3J4X3JlZ2lzdGVyLAorCQkubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IHZteG5ldDNfdmxhbl9yeF9hZGRfdmlkLAorCQkubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSB2bXhuZXQzX3ZsYW5fcnhfa2lsbF92aWQsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB2bXhuZXQzX25ldHBvbGwsCisjZW5kaWYKKwl9OworCWludCBlcnI7CisJYm9vbCBkbWE2NCA9IGZhbHNlOyAvKiBzdHVwaWQgZ2NjICovCisJdTMyIHZlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisJdTggbWFjW0VUSF9BTEVOXTsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2MgZXRoZXJuZXQgZGV2aWNlIGZvciBhZGFwdGVyICIKKwkJCSIlc1xuIiwJcGNpX25hbWUocGRldikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CisJYWRhcHRlci0+cGRldiA9IHBkZXY7CisKKwlhZGFwdGVyLT5zaGFyZWQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJICBzaXplb2Yoc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkKSwKKwkJCSAgJmFkYXB0ZXItPnNoYXJlZF9wYSk7CisJaWYgKCFhZGFwdGVyLT5zaGFyZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2Nfc2hhcmVkOworCX0KKworCWFkYXB0ZXItPnRxZF9zdGFydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKworCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpLAorCQkJICAgICAmYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CisKKwlpZiAoIWFkYXB0ZXItPnRxZF9zdGFydCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzXG4iLAorCQkJcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvY19xdWV1ZV9kZXNjOworCX0KKwlhZGFwdGVyLT5ycWRfc3RhcnQgPSAoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgKikoYWRhcHRlci0+dHFkX3N0YXJ0CisJCQkJCQkJICAgICsgMSk7CisKKwlhZGFwdGVyLT5wbV9jb25mID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IFZteG5ldDNfUE1Db25mKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkYXB0ZXItPnBtX2NvbmYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzXG4iLAorCQkJcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvY19wbTsKKwl9CisKKwllcnIgPSB2bXhuZXQzX2FsbG9jX3BjaV9yZXNvdXJjZXMoYWRhcHRlciwgJmRtYTY0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfYWxsb2NfcGNpOworCisJdmVyID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1ZSUlMpOworCWlmICh2ZXIgJiAxKSB7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfVlJSUywgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbmNvbXBhdGlibGUgaC93IHZlcnNpb24gKDB4JXgpIGZvciBhZGFwdGVyIgorCQkgICAgICAgIiAlc1xuIiwJdmVyLCBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJfdmVyOworCX0KKworCXZlciA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19VVlJTKTsKKwlpZiAodmVyICYgMSkgeworCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1VWUlMsIDEpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW5jb21wYXRpYmxlIHVwdCB2ZXJzaW9uICgweCV4KSBmb3IgIgorCQkgICAgICAgImFkYXB0ZXIgJXNcbiIsIHZlciwgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3ZlcjsKKwl9CisKKwl2bXhuZXQzX2RlY2xhcmVfZmVhdHVyZXMoYWRhcHRlciwgZG1hNjQpOworCisJYWRhcHRlci0+ZGV2X251bWJlciA9IGF0b21pY19yZWFkKCZkZXZpY2VzX2ZvdW5kKTsKKwl2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJdm14bmV0M19yZWFkX21hY19hZGRyKGFkYXB0ZXIsIG1hYyk7CisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICBtYWMsIG5ldGRldi0+YWRkcl9sZW4pOworCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnZteG5ldDNfbmV0ZGV2X29wczsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworCXZteG5ldDNfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPndvcmssIHZteG5ldDNfcmVzZXRfd29yayk7CisKKwluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT5uYXBpLCB2bXhuZXQzX3BvbGwsIDY0KTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBhZGFwdGVyICVzXG4iLAorCQkJcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9yZWdpc3RlcjsKKwl9CisKKwlzZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1FVSUVTQ0VELCAmYWRhcHRlci0+c3RhdGUpOworCWF0b21pY19pbmMoJmRldmljZXNfZm91bmQpOworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJdm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworZXJyX3ZlcjoKKwl2bXhuZXQzX2ZyZWVfcGNpX3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9hbGxvY19wY2k6CisJa2ZyZWUoYWRhcHRlci0+cG1fY29uZik7CitlcnJfYWxsb2NfcG06CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MpICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpLAorCQkJICAgIGFkYXB0ZXItPnRxZF9zdGFydCwgYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CitlcnJfYWxsb2NfcXVldWVfZGVzYzoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHNpemVvZihzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQpLAorCQkJICAgIGFkYXB0ZXItPnNoYXJlZCwgYWRhcHRlci0+c2hhcmVkX3BhKTsKK2Vycl9hbGxvY19zaGFyZWQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3ZteG5ldDNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisKKwl2bXhuZXQzX2ZyZWVfaW50cl9yZXNvdXJjZXMoYWRhcHRlcik7CisJdm14bmV0M19mcmVlX3BjaV9yZXNvdXJjZXMoYWRhcHRlcik7CisJa2ZyZWUoYWRhcHRlci0+cG1fY29uZik7CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MpICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpLAorCQkJICAgIGFkYXB0ZXItPnRxZF9zdGFydCwgYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkKSwKKwkJCSAgICBhZGFwdGVyLT5zaGFyZWQsIGFkYXB0ZXItPnNoYXJlZF9wYSk7CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19QTUNvbmYgKnBtQ29uZjsKKwlzdHJ1Y3QgZXRoaGRyICplaGRyOworCXN0cnVjdCBhcnBoZHIgKmFoZHI7CisJdTggKmFycHJlcTsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJc3RydWN0IGluX2lmYWRkciAqaWZhOworCWludCBpID0gMDsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gMDsKKworCXZteG5ldDNfZGlzYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CisJdm14bmV0M19mcmVlX2lycXMoYWRhcHRlcik7CisJdm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIENyZWF0ZSB3YWtlLXVwIGZpbHRlcnMuICovCisJcG1Db25mID0gYWRhcHRlci0+cG1fY29uZjsKKwltZW1zZXQocG1Db25mLCAwLCBzaXplb2YoKnBtQ29uZikpOworCisJaWYgKGFkYXB0ZXItPndvbCAmIFdBS0VfVUNBU1QpIHsKKwkJcG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm5TaXplID0gRVRIX0FMRU47CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrU2l6ZSA9IDE7CisJCW1lbWNweShwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVybiwgbmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1swXSA9IDB4M0Y7IC8qIExTQiBFVEhfQUxFTiBiaXRzICovCisKKwkJcG1Db25mLT53YWtlVXBFdmVudHMgfD0gVk1YTkVUM19QTV9XQUtFVVBfRklMVEVSOworCQlpKys7CisJfQorCisJaWYgKGFkYXB0ZXItPndvbCAmIFdBS0VfQVJQKSB7CisJCWluX2RldiA9IGluX2Rldl9nZXQobmV0ZGV2KTsKKwkJaWYgKCFpbl9kZXYpCisJCQlnb3RvIHNraXBfYXJwOworCisJCWlmYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopaW5fZGV2LT5pZmFfbGlzdDsKKwkJaWYgKCFpZmEpCisJCQlnb3RvIHNraXBfYXJwOworCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5wYXR0ZXJuU2l6ZSA9IEVUSF9ITEVOICsgLyogRXRoZXJuZXQgaGVhZGVyKi8KKwkJCXNpemVvZihzdHJ1Y3QgYXJwaGRyKSArCQkvKiBBUlAgaGVhZGVyICovCisJCQkyICogRVRIX0FMRU4gKwkJLyogMiBFdGhlcm5ldCBhZGRyZXNzZXMqLworCQkJMiAqIHNpemVvZih1MzIpOwkvKjIgSVB2NCBhZGRyZXNzZXMgKi8KKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tTaXplID0KKwkJCShwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVyblNpemUgLSAxKSAvIDggKyAxOworCisJCS8qIEVUSF9QX0FSUCBpbiBFdGhlcm5ldCBoZWFkZXIuICovCisJCWVoZHIgPSAoc3RydWN0IGV0aGhkciAqKXBtQ29uZi0+ZmlsdGVyc1tpXS5wYXR0ZXJuOworCQllaGRyLT5oX3Byb3RvID0gaHRvbnMoRVRIX1BfQVJQKTsKKworCQkvKiBBUlBPUF9SRVFVRVNUIGluIEFSUCBoZWFkZXIuICovCisJCWFoZHIgPSAoc3RydWN0IGFycGhkciAqKSZwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVybltFVEhfSExFTl07CisJCWFoZHItPmFyX29wID0gaHRvbnMoQVJQT1BfUkVRVUVTVCk7CisJCWFycHJlcSA9ICh1OCAqKShhaGRyICsgMSk7CisKKwkJLyogVGhlIFVuaWNhc3QgSVB2NCBhZGRyZXNzIGluICd0aXAnIGZpZWxkLiAqLworCQlhcnByZXEgKz0gMiAqIEVUSF9BTEVOICsgc2l6ZW9mKHUzMik7CisJCSoodTMyICopYXJwcmVxID0gaWZhLT5pZmFfYWRkcmVzczsKKworCQkvKiBUaGUgbWFzayBmb3IgdGhlIHJlbGV2YW50IGJpdHMuICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzBdID0gMHgwMDsKKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbMV0gPSAweDMwOyAvKiBFVEhfUF9BUlAgKi8KKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbMl0gPSAweDMwOyAvKiBBUlBPUF9SRVFVRVNUICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzNdID0gMHgwMDsKKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbNF0gPSAweEMwOyAvKiBJUHY0IFRJUCAqLworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1s1XSA9IDB4MDM7IC8qIElQdjQgVElQICovCisJCWluX2Rldl9wdXQoaW5fZGV2KTsKKworCQlwbUNvbmYtPndha2VVcEV2ZW50cyB8PSBWTVhORVQzX1BNX1dBS0VVUF9GSUxURVI7CisJCWkrKzsKKwl9CisKK3NraXBfYXJwOgorCWlmIChhZGFwdGVyLT53b2wgJiBXQUtFX01BR0lDKQorCQlwbUNvbmYtPndha2VVcEV2ZW50cyB8PSBWTVhORVQzX1BNX1dBS0VVUF9NQUdJQzsKKworCXBtQ29uZi0+bnVtRmlsdGVycyA9IGk7CisKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucG1Db25mRGVzYy5jb25mVmVyID0gMTsKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucG1Db25mRGVzYy5jb25mTGVuID0gc2l6ZW9mKCpwbUNvbmYpOworCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZQQSA9IHZpcnRfdG9fcGh5cyhwbUNvbmYpOworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1BNQ0ZHKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIFBNU0dfU1VTUEVORCksCisJCQlhZGFwdGVyLT53b2wpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgUE1TR19TVVNQRU5EKSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBWbXhuZXQzX1BNQ29uZiAqcG1Db25mOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAwOworCisJLyogRGVzdHJveSB3YWtlLXVwIGZpbHRlcnMuICovCisJcG1Db25mID0gYWRhcHRlci0+cG1fY29uZjsKKwltZW1zZXQocG1Db25mLCAwLCBzaXplb2YoKnBtQ29uZikpOworCisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlZlciA9IDE7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZkxlbiA9IHNpemVvZigqcG1Db25mKTsKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucG1Db25mRGVzYy5jb25mUEEgPSB2aXJ0X3RvX3BoeXMocG1Db25mKTsKKworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1BNQ0ZHKTsKKwl2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXZteG5ldDNfcmVxdWVzdF9pcnFzKGFkYXB0ZXIpOworCXZteG5ldDNfZW5hYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdm14bmV0M19wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSB2bXhuZXQzX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZteG5ldDNfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdm14bmV0M19kcml2ZXIgPSB7CisJLm5hbWUJCT0gdm14bmV0M19kcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUJPSB2bXhuZXQzX3BjaWlkX3RhYmxlLAorCS5wcm9iZQkJPSB2bXhuZXQzX3Byb2JlX2RldmljZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHZteG5ldDNfcmVtb3ZlX2RldmljZSksCisjaWZkZWYgQ09ORklHX1BNCisJLmRyaXZlci5wbQk9ICZ2bXhuZXQzX3BtX29wcywKKyNlbmRpZgorfTsKKworCitzdGF0aWMgaW50IF9faW5pdAordm14bmV0M19pbml0X21vZHVsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzIC0gdmVyc2lvbiAlc1xuIiwgVk1YTkVUM19EUklWRVJfREVTQywKKwkJVk1YTkVUM19EUklWRVJfVkVSU0lPTl9SRVBPUlQpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2bXhuZXQzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZteG5ldDNfaW5pdF9tb2R1bGUpOworCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2bXhuZXQzX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KHZteG5ldDNfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJWTXdhcmUsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTihWTVhORVQzX0RSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzE1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCkBAIC0wLDAgKzEsNTY2IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICogdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorICoKKyAqLworCisKKyNpbmNsdWRlICJ2bXhuZXQzX2ludC5oIgorCitzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MgeworCWNoYXIgZGVzY1tFVEhfR1NUUklOR19MRU5dOworCWludCAgb2Zmc2V0OworfTsKKworCitzdGF0aWMgdTMyCit2bXhuZXQzX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIGFkYXB0ZXItPnJ4Y3N1bTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWwpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+cnhjc3VtICE9IHZhbCkgeworCQlhZGFwdGVyLT5yeGNzdW0gPSB2YWw7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCWlmICh2YWwpCisJCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgfD0KKwkJCQkJCQkJVVBUMV9GX1JYQ1NVTTsKKwkJCWVsc2UKKwkJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyAmPQorCQkJCQkJCQl+VVBUMV9GX1JYQ1NVTTsKKworCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogcGVyIHRxIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRldmljZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwordm14bmV0M190cV9kZXZfc3RhdHNbXSA9IHsKKwkvKiBkZXNjcmlwdGlvbiwgICAgICAgICBvZmZzZXQgKi8KKwl7ICJUU08gcGt0cyB0eCIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBUU09Qa3RzVHhPSykgfSwKKwl7ICJUU08gYnl0ZXMgdHgiLCAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBUU09CeXRlc1R4T0spIH0sCisJeyAidWNhc3QgcGt0cyB0eCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgdWNhc3RQa3RzVHhPSykgfSwKKwl7ICJ1Y2FzdCBieXRlcyB0eCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCB1Y2FzdEJ5dGVzVHhPSykgfSwKKwl7ICJtY2FzdCBwa3RzIHR4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBtY2FzdFBrdHNUeE9LKSB9LAorCXsgIm1jYXN0IGJ5dGVzIHR4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIG1jYXN0Qnl0ZXNUeE9LKSB9LAorCXsgImJjYXN0IHBrdHMgdHgiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIGJjYXN0UGt0c1R4T0spIH0sCisJeyAiYmNhc3QgYnl0ZXMgdHgiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgYmNhc3RCeXRlc1R4T0spIH0sCisJeyAicGt0cyB0eCBlcnIiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgcGt0c1R4RXJyb3IpIH0sCisJeyAicGt0cyB0eCBkaXNjYXJkIiwgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgcGt0c1R4RGlzY2FyZCkgfSwKK307CisKKy8qIHBlciB0cSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKK3ZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW10gPSB7CisJLyogZGVzY3JpcHRpb24sICAgICAgICAgb2Zmc2V0ICovCisJeyJkcnYgZHJvcHBlZCB0eCB0b3RhbCIsIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF90b3RhbCkgfSwKKwl7ICIgICB0b28gbWFueSBmcmFncyIsICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWRyb3BfdG9vX21hbnlfZnJhZ3MpIH0sCisJeyAiICAgZ2lhbnQgaGRyIiwgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX292ZXJzaXplZF9oZHIpIH0sCisJeyAiICAgaGRyIGVyciIsICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX2hkcl9pbnNwZWN0X2VycikgfSwKKwl7ICIgICB0c28iLCAgICAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWRyb3BfdHNvKSB9LAorCXsgInJpbmcgZnVsbCIsICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJdHhfcmluZ19mdWxsKSB9LAorCXsgInBrdHMgbGluZWFyaXplZCIsICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJbGluZWFyaXplZCkgfSwKKwl7ICJoZHIgY2xvbmVkIiwgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWNvcHlfc2tiX2hlYWRlcikgfSwKKwl7ICJnaWFudCBoZHIiLCAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCW92ZXJzaXplZF9oZHIpIH0sCit9OworCisvKiBwZXIgcnEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZGV2aWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX3JxX2Rldl9zdGF0c1tdID0geworCXsgIkxSTyBwa3RzIHJ4IiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIExST1BrdHNSeE9LKSB9LAorCXsgIkxSTyBieXRlIHJ4IiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIExST0J5dGVzUnhPSykgfSwKKwl7ICJ1Y2FzdCBwa3RzIHJ4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCB1Y2FzdFBrdHNSeE9LKSB9LAorCXsgInVjYXN0IGJ5dGVzIHJ4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIHVjYXN0Qnl0ZXNSeE9LKSB9LAorCXsgIm1jYXN0IHBrdHMgcngiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIG1jYXN0UGt0c1J4T0spIH0sCisJeyAibWNhc3QgYnl0ZXMgcngiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgbWNhc3RCeXRlc1J4T0spIH0sCisJeyAiYmNhc3QgcGt0cyByeCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgYmNhc3RQa3RzUnhPSykgfSwKKwl7ICJiY2FzdCBieXRlcyByeCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBiY2FzdEJ5dGVzUnhPSykgfSwKKwl7ICJwa3RzIHJ4IG91dCBvZiBidWYiLCBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBwa3RzUnhPdXRPZkJ1ZikgfSwKKwl7ICJwa3RzIHJ4IGVyciIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBwa3RzUnhFcnJvcikgfSwKK307CisKKy8qIHBlciBycSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKK3ZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW10gPSB7CisJLyogZGVzY3JpcHRpb24sICAgICAgICAgb2Zmc2V0ICovCisJeyAiZHJ2IGRyb3BwZWQgcnggdG90YWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCisJCQkJCSAgIGRyb3BfdG90YWwpIH0sCisJeyAiICAgZXJyIiwgICAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCisJCQkJCWRyb3BfZXJyKSB9LAorCXsgIiAgIGZjcyIsICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX2ZjcykgfSwKKwl7ICJyeCBidWYgYWxsb2MgZmFpbCIsIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJcnhfYnVmX2FsbG9jX2ZhaWx1cmUpIH0sCit9OworCisvKiBnbG9hYmwgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX2dsb2JhbF9zdGF0c1tdID0geworCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLworCXsgInR4IHRpbWVvdXQgY291bnQiLCAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsCisJCQkJCSB0eF90aW1lb3V0X2NvdW50KSB9Cit9OworCisKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKK3ZteG5ldDNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMgKmRydlR4U3RhdHM7CisJc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzICpkcnZSeFN0YXRzOworCXN0cnVjdCBVUFQxX1R4U3RhdHMgKmRldlR4U3RhdHM7CisJc3RydWN0IFVQVDFfUnhTdGF0cyAqZGV2UnhTdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJm5ldGRldi0+c3RhdHM7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIENvbGxlY3QgdGhlIGRldiBzdGF0cyBpbnRvIHRoZSBzaGFyZWQgYXJlYSAqLworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELCBWTVhORVQzX0NNRF9HRVRfU1RBVFMpOworCisJLyogQXNzdW1pbmcgdGhhdCB3ZSBoYXZlIGEgc2luZ2xlIHF1ZXVlIGRldmljZSAqLworCWRldlR4U3RhdHMgPSAmYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0czsKKwlkZXZSeFN0YXRzID0gJmFkYXB0ZXItPnJxZF9zdGFydC0+c3RhdHM7CisKKwkvKiBHZXQgYWNjZXNzIHRvIHRoZSBkcml2ZXIgc3RhdHMgcGVyIHF1ZXVlICovCisJZHJ2VHhTdGF0cyA9ICZhZGFwdGVyLT50eF9xdWV1ZS5zdGF0czsKKwlkcnZSeFN0YXRzID0gJmFkYXB0ZXItPnJ4X3F1ZXVlLnN0YXRzOworCisJbWVtc2V0KG5ldF9zdGF0cywgMCwgc2l6ZW9mKCpuZXRfc3RhdHMpKTsKKworCW5ldF9zdGF0cy0+cnhfcGFja2V0cyA9IGRldlJ4U3RhdHMtPnVjYXN0UGt0c1J4T0sgKworCQkJCWRldlJ4U3RhdHMtPm1jYXN0UGt0c1J4T0sgKworCQkJCWRldlJ4U3RhdHMtPmJjYXN0UGt0c1J4T0s7CisKKwluZXRfc3RhdHMtPnR4X3BhY2tldHMgPSBkZXZUeFN0YXRzLT51Y2FzdFBrdHNUeE9LICsKKwkJCQlkZXZUeFN0YXRzLT5tY2FzdFBrdHNUeE9LICsKKwkJCQlkZXZUeFN0YXRzLT5iY2FzdFBrdHNUeE9LOworCisJbmV0X3N0YXRzLT5yeF9ieXRlcyA9IGRldlJ4U3RhdHMtPnVjYXN0Qnl0ZXNSeE9LICsKKwkJCSAgICAgIGRldlJ4U3RhdHMtPm1jYXN0Qnl0ZXNSeE9LICsKKwkJCSAgICAgIGRldlJ4U3RhdHMtPmJjYXN0Qnl0ZXNSeE9LOworCisJbmV0X3N0YXRzLT50eF9ieXRlcyA9IGRldlR4U3RhdHMtPnVjYXN0Qnl0ZXNUeE9LICsKKwkJCSAgICAgIGRldlR4U3RhdHMtPm1jYXN0Qnl0ZXNUeE9LICsKKwkJCSAgICAgIGRldlR4U3RhdHMtPmJjYXN0Qnl0ZXNUeE9LOworCisJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBkZXZSeFN0YXRzLT5wa3RzUnhFcnJvcjsKKwluZXRfc3RhdHMtPnR4X2Vycm9ycyA9IGRldlR4U3RhdHMtPnBrdHNUeEVycm9yOworCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCA9IGRydlJ4U3RhdHMtPmRyb3BfdG90YWw7CisJbmV0X3N0YXRzLT50eF9kcm9wcGVkID0gZHJ2VHhTdGF0cy0+ZHJvcF90b3RhbDsKKwluZXRfc3RhdHMtPm11bHRpY2FzdCA9ICBkZXZSeFN0YXRzLT5tY2FzdFBrdHNSeE9LOworCisJcmV0dXJuIG5ldF9zdGF0czsKK30KKworc3RhdGljIGludAordm14bmV0M19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3sKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpICsKKwkJCUFSUkFZX1NJWkUodm14bmV0M190cV9kcml2ZXJfc3RhdHMpICsKKwkJCUFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpICsKKwkJCUFSUkFZX1NJWkUodm14bmV0M19ycV9kcml2ZXJfc3RhdHMpICsKKwkJCUFSUkFZX1NJWkUodm14bmV0M19nbG9iYWxfc3RhdHMpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKKworc3RhdGljIGludAordm14bmV0M19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gMjAgKiBzaXplb2YodTMyKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybGNweShkcnZpbmZvLT5kcml2ZXIsIHZteG5ldDNfZHJpdmVyX25hbWUsIHNpemVvZihkcnZpbmZvLT5kcml2ZXIpKTsKKwlkcnZpbmZvLT5kcml2ZXJbc2l6ZW9mKGRydmluZm8tPmRyaXZlcikgLSAxXSA9ICdcMCc7CisKKwlzdHJsY3B5KGRydmluZm8tPnZlcnNpb24sIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JULAorCQlzaXplb2YoZHJ2aW5mby0+dmVyc2lvbikpOworCWRydmluZm8tPmRyaXZlcltzaXplb2YoZHJ2aW5mby0+dmVyc2lvbikgLSAxXSA9ICdcMCc7CisKKwlzdHJsY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoZHJ2aW5mby0+ZndfdmVyc2lvbikpOworCWRydmluZm8tPmZ3X3ZlcnNpb25bc2l6ZW9mKGRydmluZm8tPmZ3X3ZlcnNpb24pIC0gMV0gPSAnXDAnOworCisJc3RybGNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksCisJCUVUSFRPT0xfQlVTSU5GT19MRU4pOworCWRydmluZm8tPm5fc3RhdHMgPSB2bXhuZXQzX2dldF9zc2V0X2NvdW50KG5ldGRldiwgRVRIX1NTX1NUQVRTKTsKKwlkcnZpbmZvLT50ZXN0aW5mb19sZW4gPSAwOworCWRydmluZm8tPmVlZHVtcF9sZW4gICA9IDA7CisJZHJ2aW5mby0+cmVnZHVtcF9sZW4gID0gdm14bmV0M19nZXRfcmVnc19sZW4obmV0ZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqYnVmKQoreworCWlmIChzdHJpbmdzZXQgPT0gRVRIX1NTX1NUQVRTKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoYnVmLCB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5kZXNjLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoYnVmLCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tpXS5kZXNjLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZGV2X3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoYnVmLCB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5kZXNjLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoYnVmLCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0c1tpXS5kZXNjLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfZ2xvYmFsX3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoYnVmLCB2bXhuZXQzX2dsb2JhbF9zdGF0c1tpXS5kZXNjLAorCQkJCUVUSF9HU1RSSU5HX0xFTik7CisJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJfQorfQorCitzdGF0aWMgdTMyCit2bXhuZXQzX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KSB7CisJcmV0dXJuIG5ldGRldi0+ZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKSB7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggbHJvX3JlcXVlc3RlZCA9IChkYXRhICYgRVRIX0ZMQUdfTFJPKSA9PSAwID8gMCA6IDE7CisJdTggbHJvX3ByZXNlbnQgPSAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSA9PSAwID8gMCA6IDE7CisKKwlpZiAobHJvX3JlcXVlc3RlZCBeIGxyb19wcmVzZW50KSB7CisJCS8qIHRvZ2dsZSB0aGUgTFJPIGZlYXR1cmUqLworCQluZXRkZXYtPmZlYXR1cmVzIF49IE5FVElGX0ZfTFJPOworCisJCS8qIHVwZGF0ZSBoYXJ3YXJlIExSTyBjYXBhYmlsaXR5IGFjY29yZGluZ2x5ICovCisJCWlmIChscm9fcmVxdWVzdGVkKQorCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0gVVBUMV9GX0xSTzsKKwkJZWxzZQorCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KKwkJCQkJCQkJflVQVDFfRl9MUk87CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAgKmJ1ZikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1OCAqYmFzZTsKKwlpbnQgaTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELCBWTVhORVQzX0NNRF9HRVRfU1RBVFMpOworCisJLyogdGhpcyBkb2VzIGFzc3VtZSBlYWNoIGNvdW50ZXIgaXMgNjQtYml0IHdpZGUgKi8KKworCWJhc2UgPSAodTggKikmYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2Rldl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfdHFfZGV2X3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnR4X3F1ZXVlLnN0YXRzOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKTsgaSsrKQorCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsgdm14bmV0M190cV9kcml2ZXJfc3RhdHNbaV0ub2Zmc2V0KTsKKworCWJhc2UgPSAodTggKikmYWRhcHRlci0+cnFkX3N0YXJ0LT5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfcnFfZGV2X3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJ4X3F1ZXVlLnN0YXRzOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKTsgaSsrKQorCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsgdm14bmV0M19ycV9kcml2ZXJfc3RhdHNbaV0ub2Zmc2V0KTsKKworCWJhc2UgPSAodTggKilhZGFwdGVyOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfZ2xvYmFsX3N0YXRzKTsgaSsrKQorCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsgdm14bmV0M19nbG9iYWxfc3RhdHNbaV0ub2Zmc2V0KTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiAqYnVmID0gcDsKKworCW1lbXNldChwLCAwLCB2bXhuZXQzX2dldF9yZWdzX2xlbihuZXRkZXYpKTsKKworCXJlZ3MtPnZlcnNpb24gPSAxOworCisJLyogVXBkYXRlIHZteG5ldDNfZ2V0X3JlZ3NfbGVuIGlmIHdlIHdhbnQgdG8gZHVtcCBtb3JlIHJlZ2lzdGVycyAqLworCisJLyogbWFrZSBlYWNoIHJpbmcgdXNlIG11bHRpcGxlIG9mIDE2IGJ5dGVzICovCisJYnVmWzBdID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5uZXh0MmZpbGw7CisJYnVmWzFdID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5uZXh0MmNvbXA7CisJYnVmWzJdID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5nZW47CisJYnVmWzNdID0gMDsKKworCWJ1Zls0XSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5uZXh0MnByb2M7CisJYnVmWzVdID0gYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLmdlbjsKKwlidWZbNl0gPSBhZGFwdGVyLT50eF9xdWV1ZS5zdG9wcGVkOworCWJ1Zls3XSA9IDA7CisKKwlidWZbOF0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLm5leHQyZmlsbDsKKwlidWZbOV0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLm5leHQyY29tcDsKKwlidWZbMTBdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5nZW47CisJYnVmWzExXSA9IDA7CisKKwlidWZbMTJdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5uZXh0MmZpbGw7CisJYnVmWzEzXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0ubmV4dDJjb21wOworCWJ1ZlsxNF0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLmdlbjsKKwlidWZbMTVdID0gMDsKKworCWJ1ZlsxNl0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcubmV4dDJwcm9jOworCWJ1ZlsxN10gPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuZ2VuOworCWJ1ZlsxOF0gPSAwOworCWJ1ZlsxOV0gPSAwOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9BUlAgfCBXQUtFX01BR0lDOworCXdvbC0+d29sb3B0cyA9IGFkYXB0ZXItPndvbDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX1BIWSB8IFdBS0VfTUNBU1QgfCBXQUtFX0JDQVNUIHwKKwkJCSAgICBXQUtFX01BR0lDU0VDVVJFKSkgeworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJYWRhcHRlci0+d29sID0gd29sLT53b2xvcHRzOworCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXItPndvbCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwllY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCSAgU1VQUE9SVEVEX1RQOworCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKKwllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisKKwlpZiAoYWRhcHRlci0+bGlua19zcGVlZCkgeworCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWVjbWQtPnNwZWVkID0gLTE7CisJCWVjbWQtPmR1cGxleCA9IC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCSAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcGFyYW0pCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlwYXJhbS0+cnhfbWF4X3BlbmRpbmcgPSBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkU7CisJcGFyYW0tPnR4X21heF9wZW5kaW5nID0gVk1YTkVUM19UWF9SSU5HX01BWF9TSVpFOworCXBhcmFtLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwlwYXJhbS0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOworCisJcGFyYW0tPnJ4X3BlbmRpbmcgPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemU7CisJcGFyYW0tPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemU7CisJcGFyYW0tPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJcGFyYW0tPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBuZXdfdHhfcmluZ19zaXplLCBuZXdfcnhfcmluZ19zaXplOworCXUzMiBzejsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwYXJhbS0+dHhfcGVuZGluZyA9PSAwIHx8IHBhcmFtLT50eF9wZW5kaW5nID4KKwkJCQkJCVZNWE5FVDNfVFhfUklOR19NQVhfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGFyYW0tPnJ4X3BlbmRpbmcgPT0gMCB8fCBwYXJhbS0+cnhfcGVuZGluZyA+CisJCQkJCQlWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisKKwkvKiByb3VuZCBpdCB1cCB0byBhIG11bHRpcGxlIG9mIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOICovCisJbmV3X3R4X3Jpbmdfc2l6ZSA9IChwYXJhbS0+dHhfcGVuZGluZyArIFZNWE5FVDNfUklOR19TSVpFX01BU0spICYKKwkJCQkJCQl+Vk1YTkVUM19SSU5HX1NJWkVfTUFTSzsKKwluZXdfdHhfcmluZ19zaXplID0gbWluX3QodTMyLCBuZXdfdHhfcmluZ19zaXplLAorCQkJCSBWTVhORVQzX1RYX1JJTkdfTUFYX1NJWkUpOworCWlmIChuZXdfdHhfcmluZ19zaXplID4gVk1YTkVUM19UWF9SSU5HX01BWF9TSVpFIHx8IChuZXdfdHhfcmluZ19zaXplICUKKwkJCQkJCVZNWE5FVDNfUklOR19TSVpFX0FMSUdOKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHJpbmcwIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mCisJICogcnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTgorCSAqLworCXN6ID0gYWRhcHRlci0+cnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTjsKKwluZXdfcnhfcmluZ19zaXplID0gKHBhcmFtLT5yeF9wZW5kaW5nICsgc3ogLSAxKSAvIHN6ICogc3o7CisJbmV3X3J4X3Jpbmdfc2l6ZSA9IG1pbl90KHUzMiwgbmV3X3J4X3Jpbmdfc2l6ZSwKKwkJCQkgVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFIC8gc3ogKiBzeik7CisJaWYgKG5ld19yeF9yaW5nX3NpemUgPiBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgfHwgKG5ld19yeF9yaW5nX3NpemUgJQorCQkJCQkJCSAgIHN6KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXdfdHhfcmluZ19zaXplID09IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3Jpbmcuc2l6ZSAmJgorCQkJbmV3X3J4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBSZXNldF93b3JrIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIHJlc2V0dGluZyB0aGUgZGV2aWNlLCB3YWl0IGZvciBpdHMKKwkgKiBjb21wbGV0aW9uLgorCSAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQl2bXhuZXQzX3F1aWVzY2VfZGV2KGFkYXB0ZXIpOworCQl2bXhuZXQzX3Jlc2V0X2RldihhZGFwdGVyKTsKKworCQkvKiByZWNyZWF0ZSB0aGUgcnggcXVldWUgYW5kIHRoZSB0eCBxdWV1ZSBiYXNlZCBvbiB0aGUKKwkJICogbmV3IHNpemVzICovCisJCXZteG5ldDNfdHFfZGVzdHJveSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCQl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKworCQllcnIgPSB2bXhuZXQzX2NyZWF0ZV9xdWV1ZXMoYWRhcHRlciwgbmV3X3R4X3Jpbmdfc2l6ZSwKKwkJCW5ld19yeF9yaW5nX3NpemUsIFZNWE5FVDNfREVGX1JYX1JJTkdfU0laRSk7CisJCWlmIChlcnIpIHsKKwkJCS8qIGZhaWxlZCwgbW9zdCBsaWtlbHkgYmVjYXVzZSBvZiBPT00sIHRyeSBkZWZhdWx0CisJCQkgKiBzaXplICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYXBwbHkgbmV3IHNpemVzLCB0cnkgdGhlIgorCQkJCSIgZGVmYXVsdCBvbmVzXG4iLCBuZXRkZXYtPm5hbWUpOworCQkJZXJyID0gdm14bmV0M19jcmVhdGVfcXVldWVzKGFkYXB0ZXIsCisJCQkJCQkgICAgVk1YTkVUM19ERUZfVFhfUklOR19TSVpFLAorCQkJCQkJICAgIFZNWE5FVDNfREVGX1JYX1JJTkdfU0laRSwKKwkJCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCQkJaWYgKGVycikgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcXVldWVzICIKKwkJCQkJIndpdGggZGVmYXVsdCBzaXplcy4gQ2xvc2luZyBpdFxuIiwKKwkJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCWVyciA9IHZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlLWFjdGl2YXRlLCBlcnJvciAlZC4iCisJCQkJIiBDbG9zaW5nIGl0XG4iLCBuZXRkZXYtPm5hbWUsIGVycik7CisJfQorCitvdXQ6CisJY2xlYXJfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZiAoZXJyKQorCQl2bXhuZXQzX2ZvcmNlX2Nsb3NlKGFkYXB0ZXIpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZteG5ldDNfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyAgICAgID0gdm14bmV0M19nZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvICAgICAgID0gdm14bmV0M19nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuICAgICAgPSB2bXhuZXQzX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MgICAgICAgICAgPSB2bXhuZXQzX2dldF9yZWdzLAorCS5nZXRfd29sICAgICAgICAgICA9IHZteG5ldDNfZ2V0X3dvbCwKKwkuc2V0X3dvbCAgICAgICAgICAgPSB2bXhuZXQzX3NldF93b2wsCisJLmdldF9saW5rICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3J4X2NzdW0gICAgICAgPSB2bXhuZXQzX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSAgICAgICA9IHZteG5ldDNfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gICAgICAgPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAorCS5nZXRfc2cgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfdHNvICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyAgICAgICAgICAgPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9zdHJpbmdzICAgICAgID0gdm14bmV0M19nZXRfc3RyaW5ncywKKwkuZ2V0X2ZsYWdzCSAgID0gdm14bmV0M19nZXRfZmxhZ3MsCisJLnNldF9mbGFncwkgICA9IHZteG5ldDNfc2V0X2ZsYWdzLAorCS5nZXRfc3NldF9jb3VudAkgICA9IHZteG5ldDNfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0gdm14bmV0M19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3JpbmdwYXJhbSAgICAgPSB2bXhuZXQzX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19zZXRfcmluZ3BhcmFtLAorfTsKKwordm9pZCB2bXhuZXQzX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZ2bXhuZXQzX2V0aHRvb2xfb3BzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaCBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzBkNzBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICogdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9WTVhORVQzX0lOVF9ICisjZGVmaW5lIF9WTVhORVQzX0lOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorCisjaW5jbHVkZSAidm14bmV0M19kZWZzLmgiCisKKyNpZmRlZiBERUJVRworIyBkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9SRVBPUlQgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9TVFJJTkciLU5BUEkoZGVidWcpIgorI2Vsc2UKKyMgZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JUIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HIi1OQVBJIgorI2VuZGlmCisKKworLyoKKyAqIFZlcnNpb24gbnVtYmVycworICovCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC41LjAtayIKKworLyogYSAzMi1iaXQgaW50LCBlYWNoIGJ5dGUgZW5jb2RlIGEgdmVyaW9uIG51bWJlciBpbiBWTVhORVQzX0RSSVZFUl9WRVJTSU9OICovCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNICAgICAgMHgwMTAwMDUwMAorCisKKy8qCisgKiBDYXBhYmlsaXRpZXMKKyAqLworCitlbnVtIHsKKwlWTU5FVF9DQVBfU0cJICAgICAgICA9IDB4MDAwMSwgLyogQ2FuIGRvIHNjYXR0ZXItZ2F0aGVyIHRyYW5zbWl0cy4gKi8KKwlWTU5FVF9DQVBfSVA0X0NTVU0gICAgICA9IDB4MDAwMiwgLyogQ2FuIGNoZWNrc3VtIG9ubHkgVENQL1VEUCBvdmVyCisJCQkJCSAgICogSVB2NCAqLworCVZNTkVUX0NBUF9IV19DU1VNICAgICAgID0gMHgwMDA0LCAvKiBDYW4gY2hlY2tzdW0gYWxsIHBhY2tldHMuICovCisJVk1ORVRfQ0FQX0hJR0hfRE1BICAgICAgPSAweDAwMDgsIC8qIENhbiBETUEgdG8gaGlnaCBtZW1vcnkuICovCisJVk1ORVRfQ0FQX1RPRQkgICAgICAgID0gMHgwMDEwLCAvKiBTdXBwb3J0cyBUQ1AvSVAgb2ZmbG9hZC4gKi8KKwlWTU5FVF9DQVBfVFNPCSAgICAgICAgPSAweDAwMjAsIC8qIFN1cHBvcnRzIFRDUCBTZWdtZW50YXRpb24KKwkJCQkJICAgKiBvZmZsb2FkICovCisJVk1ORVRfQ0FQX1NXX1RTTyAgICAgICAgPSAweDAwNDAsIC8qIFN1cHBvcnRzIFNXIFRDUCBTZWdtZW50YXRpb24gKi8KKwlWTU5FVF9DQVBfVk1YTkVUX0FQUk9NICA9IDB4MDA4MCwgLyogVm14bmV0IEFQUk9NIHN1cHBvcnQgKi8KKwlWTU5FVF9DQVBfSFdfVFhfVkxBTiAgICA9IDB4MDEwMCwgLyogQ2FuIHdlIGRvIFZMQU4gdGFnZ2luZyBpbiBIVyAqLworCVZNTkVUX0NBUF9IV19SWF9WTEFOICAgID0gMHgwMjAwLCAvKiBDYW4gd2UgZG8gVkxBTiB1bnRhZ2dpbmcgaW4gSFcgKi8KKwlWTU5FVF9DQVBfU1dfVkxBTiAgICAgICA9IDB4MDQwMCwgLyogVkxBTiB0YWdnaW5nL3VudGFnZ2luZyBpbiBTVyAqLworCVZNTkVUX0NBUF9XQUtFX1BDS1RfUkNWID0gMHgwODAwLCAvKiBDYW4gd2FrZSBvbiBuZXR3b3JrIHBhY2tldCByZWN2PyAqLworCVZNTkVUX0NBUF9FTkFCTEVfSU5UX0lOTElORSA9IDB4MTAwMCwgIC8qIEVuYWJsZSBJbnRlcnJ1cHQgSW5saW5lICovCisJVk1ORVRfQ0FQX0VOQUJMRV9IRUFERVJfQ09QWSA9IDB4MjAwMCwgIC8qIGNvcHkgaGVhZGVyIGZvciB2bWtlcm5lbCAqLworCVZNTkVUX0NBUF9UWF9DSEFJTiAgICAgID0gMHg0MDAwLCAvKiBHdWVzdCBjYW4gdXNlIG11bHRpcGxlIHR4IGVudHJpZXMKKwkJCQkJICAqIGZvciBhIHBrdCAqLworCVZNTkVUX0NBUF9SWF9DSEFJTiAgICAgID0gMHg4MDAwLCAvKiBwa3QgY2FuIHNwYW4gbXVsdGlwbGUgcnggZW50cmllcyAqLworCVZNTkVUX0NBUF9MUEQgICAgICAgICAgID0gMHgxMDAwMCwgLyogbGFyZ2UgcGt0IGRlbGl2ZXJ5ICovCisJVk1ORVRfQ0FQX0JQRiAgICAgICAgICAgPSAweDIwMDAwLCAvKiBCUEYgU3VwcG9ydCBpbiBWTVhORVQgVmlydHVhbCBIVyovCisJVk1ORVRfQ0FQX1NHX1NQQU5fUEFHRVMgPSAweDQwMDAwLCAvKiBTY2F0dGVyLWdhdGhlciBjYW4gc3BhbiBtdWx0aXBsZSovCisJCQkJCSAgIC8qIHBhZ2VzIHRyYW5zbWl0cyAqLworCVZNTkVUX0NBUF9JUDZfQ1NVTSAgICAgID0gMHg4MDAwMCwgLyogQ2FuIGRvIElQdjYgY3N1bSBvZmZsb2FkLiAqLworCVZNTkVUX0NBUF9UU082ICAgICAgICAgPSAweDEwMDAwMCwgLyogVFNPIHNlZy4gb2ZmbG9hZCBmb3IgSVB2NiBwa3RzLiAqLworCVZNTkVUX0NBUF9UU08yNTZrICAgICAgPSAweDIwMDAwMCwgLyogQ2FuIGRvIFRTTyBzZWcgb2ZmbG9hZCBmb3IgKi8KKwkJCQkJICAgLyogcGt0cyB1cCB0byAyNTZrQi4gKi8KKwlWTU5FVF9DQVBfVVBUICAgICAgICAgID0gMHg0MDAwMDAgIC8qIFN1cHBvcnQgVVBUICovCit9OworCisvKgorICogUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcy4KKyAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZNV0FSRSAgICAgICAgICAgIDB4MTVBRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9WTVhORVQzICAgIDB4MDdCMAorI2RlZmluZSBNQVhfRVRIRVJORVRfQ0FSRFMJCTEwCisjZGVmaW5lIE1BWF9QQ0lfUEFTU1RIUlVfREVWSUNFCQk2CisKK3N0cnVjdCB2bXhuZXQzX2NtZF9yaW5nIHsKKwl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpiYXNlOworCXUzMgkJc2l6ZTsKKwl1MzIJCW5leHQyZmlsbDsKKwl1MzIJCW5leHQyY29tcDsKKwl1OAkJZ2VuOworCWRtYV9hZGRyX3QJYmFzZVBBOworfTsKKworc3RhdGljIGlubGluZSB2b2lkCit2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmZpbGwoc3RydWN0IHZteG5ldDNfY21kX3JpbmcgKnJpbmcpCit7CisJcmluZy0+bmV4dDJmaWxsKys7CisJaWYgKHVubGlrZWx5KHJpbmctPm5leHQyZmlsbCA9PSByaW5nLT5zaXplKSkgeworCQlyaW5nLT5uZXh0MmZpbGwgPSAwOworCQlWTVhORVQzX0ZMSVBfUklOR19HRU4ocmluZy0+Z2VuKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJjb21wKHN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICpyaW5nKQoreworCVZNWE5FVDNfSU5DX1JJTkdfSURYX09OTFkocmluZy0+bmV4dDJjb21wLCByaW5nLT5zaXplKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3ZteG5ldDNfY21kX3JpbmdfZGVzY19hdmFpbChzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gKHJpbmctPm5leHQyY29tcCA+IHJpbmctPm5leHQyZmlsbCA/IDAgOiByaW5nLT5zaXplKSArCisJCXJpbmctPm5leHQyY29tcCAtIHJpbmctPm5leHQyZmlsbCAtIDE7Cit9CisKK3N0cnVjdCB2bXhuZXQzX2NvbXBfcmluZyB7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqYmFzZTsKKwl1MzIgICAgICAgICAgICAgICBzaXplOworCXUzMiAgICAgICAgICAgICAgIG5leHQycHJvYzsKKwl1OCAgICAgICAgICAgICAgICBnZW47CisJdTggICAgICAgICAgICAgICAgaW50cl9pZHg7CisJZG1hX2FkZHJfdCAgICAgICAgICAgYmFzZVBBOworfTsKKworc3RhdGljIGlubGluZSB2b2lkCit2bXhuZXQzX2NvbXBfcmluZ19hZHZfbmV4dDJwcm9jKHN0cnVjdCB2bXhuZXQzX2NvbXBfcmluZyAqcmluZykKK3sKKwlyaW5nLT5uZXh0MnByb2MrKzsKKwlpZiAodW5saWtlbHkocmluZy0+bmV4dDJwcm9jID09IHJpbmctPnNpemUpKSB7CisJCXJpbmctPm5leHQycHJvYyA9IDA7CisJCVZNWE5FVDNfRkxJUF9SSU5HX0dFTihyaW5nLT5nZW4pOworCX0KK30KKworc3RydWN0IHZteG5ldDNfdHhfZGF0YV9yaW5nIHsKKwlzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjICpiYXNlOworCXUzMiAgICAgICAgICAgICAgc2l6ZTsKKwlkbWFfYWRkcl90ICAgICAgICAgIGJhc2VQQTsKK307CisKK2VudW0gdm14bmV0M19idWZfbWFwX3R5cGUgeworCVZNWE5FVDNfTUFQX0lOVkFMSUQgPSAwLAorCVZNWE5FVDNfTUFQX05PTkUsCisJVk1YTkVUM19NQVBfU0lOR0xFLAorCVZNWE5FVDNfTUFQX1BBR0UsCit9OworCitzdHJ1Y3Qgdm14bmV0M190eF9idWZfaW5mbyB7CisJdTMyICAgICAgbWFwX3R5cGU7CisJdTE2ICAgICAgbGVuOworCXUxNiAgICAgIHNvcF9pZHg7CisJZG1hX2FkZHJfdCAgZG1hX2FkZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK307CisKK3N0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyB7CisJdTY0IGRyb3BfdG90YWw7ICAgICAvKiAjIG9mIHBrdHMgZHJvcHBlZCBieSB0aGUgZHJpdmVyLCB0aGUKKwkJCQkqIGNvdW50ZXJzIGJlbG93IHRyYWNrIGRyb3BwaW5ncyBkdWUgdG8KKwkJCQkqIGRpZmZlcmVudCByZWFzb25zCisJCQkJKi8KKwl1NjQgZHJvcF90b29fbWFueV9mcmFnczsKKwl1NjQgZHJvcF9vdmVyc2l6ZWRfaGRyOworCXU2NCBkcm9wX2hkcl9pbnNwZWN0X2VycjsKKwl1NjQgZHJvcF90c287CisKKwl1NjQgdHhfcmluZ19mdWxsOworCXU2NCBsaW5lYXJpemVkOyAgICAgICAgIC8qICMgb2YgcGt0cyBsaW5lYXJpemVkICovCisJdTY0IGNvcHlfc2tiX2hlYWRlcjsgICAgLyogIyBvZiB0aW1lcyB3ZSBoYXZlIHRvIGNvcHkgc2tiIGhlYWRlciAqLworCXU2NCBvdmVyc2l6ZWRfaGRyOworfTsKKworc3RydWN0IHZteG5ldDNfdHhfY3R4IHsKKwlib29sICAgaXB2NDsKKwl1MTYgbXNzOworCXUzMiBldGhfaXBfaGRyX3NpemU7IC8qIG9ubHkgdmFsaWQgZm9yIHBrdHMgcmVxdWVzdGluZyB0c28gb3IgY3N1bQorCQkJCSAqIG9mZmxvYWRpbmcKKwkJCQkgKi8KKwl1MzIgbDRfaGRyX3NpemU7ICAgICAvKiBvbmx5IHZhbGlkIGlmIG1zcyAhPSAwICovCisJdTMyIGNvcHlfc2l6ZTsgICAgICAgLyogIyBvZiBieXRlcyBjb3BpZWQgaW50byB0aGUgZGF0YSByaW5nICovCisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqc29wX3R4ZDsKKwl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICplb3BfdHhkOworfTsKKworc3RydWN0IHZteG5ldDNfdHhfcXVldWUgeworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgICAgdHhfbG9jazsKKwlzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAgICAgICAgIHR4X3Jpbmc7CisJc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gICAgICpidWZfaW5mbzsKKwlzdHJ1Y3Qgdm14bmV0M190eF9kYXRhX3JpbmcgICAgIGRhdGFfcmluZzsKKwlzdHJ1Y3Qgdm14bmV0M19jb21wX3JpbmcgICAgICAgIGNvbXBfcmluZzsKKwlzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ3RybCAgICAgICAgICAgICpzaGFyZWQ7CisJc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzICBzdGF0czsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc3RvcDsgIC8qICMgb2YgdGltZXMgdGhlIHF1ZXVlIGlzCisJCQkJCQkgICAgKiBzdG9wcGVkICovCit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTsKKworZW51bSB2bXhuZXQzX3J4X2J1Zl90eXBlIHsKKwlWTVhORVQzX1JYX0JVRl9OT05FID0gMCwKKwlWTVhORVQzX1JYX0JVRl9TS0IgPSAxLAorCVZNWE5FVDNfUlhfQlVGX1BBR0UgPSAyCit9OworCitzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyB7CisJZW51bSB2bXhuZXQzX3J4X2J1Zl90eXBlIGJ1Zl90eXBlOworCXUxNiAgICAgbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IHBhZ2UgICAgKnBhZ2U7CisJfTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworfTsKKworc3RydWN0IHZteG5ldDNfcnhfY3R4IHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBzb3BfaWR4OworfTsKKworc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzIHsKKwl1NjQgZHJvcF90b3RhbDsKKwl1NjQgZHJvcF9lcnI7CisJdTY0IGRyb3BfZmNzOworCXU2NCByeF9idWZfYWxsb2NfZmFpbHVyZTsKK307CisKK3N0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlIHsKKwlzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAgIHJ4X3JpbmdbMl07CisJc3RydWN0IHZteG5ldDNfY29tcF9yaW5nICBjb21wX3Jpbmc7CisJc3RydWN0IHZteG5ldDNfcnhfY3R4ICAgICByeF9jdHg7CisJdTMyIHFpZDsgICAgICAgICAgICAvKiBycUlEIGluIFJDRCBmb3IgYnVmZmVyIGZyb20gMXN0IHJpbmcgKi8KKwl1MzIgcWlkMjsgICAgICAgICAgIC8qIHJxSUQgaW4gUkNEIGZvciBidWZmZXIgZnJvbSAybmQgcmluZyAqLworCXUzMiB1bmNvbW1pdHRlZFsyXTsgLyogIyBvZiBidWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IFJYUFJPRAorCQkJCSogdXBkYXRlICovCisJc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8gICAgICpidWZfaW5mb1syXTsKKwlzdHJ1Y3QgVm14bmV0M19SeFF1ZXVlQ3RybCAgICAgICAgICAgICpzaGFyZWQ7CisJc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzICBzdGF0czsKK30gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOworCisjZGVmaW5lIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCAgICAgMQorCitzdHJ1Y3Qgdm14bmV0M19pbnRyIHsKKwllbnVtIHZteG5ldDNfaW50cl9tYXNrX21vZGUgIG1hc2tfbW9kZTsKKwllbnVtIHZteG5ldDNfaW50cl90eXBlICAgICAgIHR5cGU7CS8qIE1TSS1YLCBNU0ksIG9yIElOVHg/ICovCisJdTggIG51bV9pbnRyczsJCQkvKiAjIG9mIGludHIgdmVjdG9ycyAqLworCXU4ICBldmVudF9pbnRyX2lkeDsJCS8qIGlkeCBvZiB0aGUgaW50ciB2ZWN0b3IgZm9yIGV2ZW50ICovCisJdTggIG1vZF9sZXZlbHNbVk1YTkVUM19MSU5VWF9NQVhfTVNJWF9WRUNUXTsgLyogbW9kZXJhdGlvbiBsZXZlbCAqLworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW1ZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVF07CisjZW5kaWYKK307CisKKyNkZWZpbmUgVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HICAgMAorI2RlZmluZSBWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCAgICAxCitzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyIHsKKwlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAgICAgICAgIHR4X3F1ZXVlOworCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICAgICAgICAgcnhfcXVldWU7CisJc3RydWN0IG5hcGlfc3RydWN0ICAgICAgICAgICAgICBuYXBpOworCXN0cnVjdCB2bGFuX2dyb3VwICAgICAgICAgICAgICAqdmxhbl9ncnA7CisKKwlzdHJ1Y3Qgdm14bmV0M19pbnRyICAgICAgICAgICAgIGludHI7CisKKwlzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQgICAgKnNoYXJlZDsKKwlzdHJ1Y3QgVm14bmV0M19QTUNvbmYgICAgICAgICAgKnBtX2NvbmY7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MgICAgICp0cWRfc3RhcnQ7ICAgICAvKiBmaXJzdCB0eCBxdWV1ZSBkZXNjICovCisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgICAgICpycWRfc3RhcnQ7ICAgICAvKiBmaXJzdCByeCBxdWV1ZSBkZXNjICovCisJc3RydWN0IG5ldF9kZXZpY2UgICAgICAgICAgICAgICpuZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgICAgICpwZGV2OworCisJdTgJCQkJKmh3X2FkZHIwOyAvKiBmb3IgQkFSIDAgKi8KKwl1OAkJCQkqaHdfYWRkcjE7IC8qIGZvciBCQVIgMSAqLworCisJLyogZmVhdHVyZSBjb250cm9sICovCisJYm9vbAkJCQlyeGNzdW07CisJYm9vbAkJCQlscm87CisJYm9vbAkJCQlqdW1ib19mcmFtZTsKKworCS8qIHJ4IGJ1ZmZlciByZWxhdGVkICovCisJdW5zaWduZWQJCQlza2JfYnVmX3NpemU7CisJaW50CQlyeF9idWZfcGVyX3BrdDsgIC8qIG9ubHkgYXBwbHkgdG8gdGhlIDFzdCByaW5nICovCisJZG1hX2FkZHJfdAkJCXNoYXJlZF9wYTsKKwlkbWFfYWRkcl90IHF1ZXVlX2Rlc2NfcGE7CisKKwkvKiBXYWtlLW9uLUxBTiAqLworCXUzMiAgICAgd29sOworCisJLyogTGluayBzcGVlZCAqLworCXUzMiAgICAgbGlua19zcGVlZDsgLyogaW4gbWJwcyAqLworCisJdTY0ICAgICB0eF90aW1lb3V0X2NvdW50OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJdW5zaWduZWQgbG9uZyAgc3RhdGU7ICAgIC8qIFZNWE5FVDNfU1RBVEVfQklUX3h4eCAqLworCisJaW50IGRldl9udW1iZXI7Cit9OworCisjZGVmaW5lIFZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgcmVnLCB2YWwpICBcCisJd3JpdGVsKCh2YWwpLCAoYWRhcHRlciktPmh3X2FkZHIwICsgKHJlZykpCisjZGVmaW5lIFZNWE5FVDNfUkVBRF9CQVIwX1JFRyhhZGFwdGVyLCByZWcpICAgICAgICBcCisJcmVhZGwoKGFkYXB0ZXIpLT5od19hZGRyMCArIChyZWcpKQorCisjZGVmaW5lIFZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgcmVnLCB2YWwpICBcCisJd3JpdGVsKCh2YWwpLCAoYWRhcHRlciktPmh3X2FkZHIxICsgKHJlZykpCisjZGVmaW5lIFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCByZWcpICAgICAgICBcCisJcmVhZGwoKGFkYXB0ZXIpLT5od19hZGRyMSArIChyZWcpKQorCisjZGVmaW5lIFZNWE5FVDNfV0FLRV9RVUVVRV9USFJFU0hPTEQodHEpICAoNSkKKyNkZWZpbmUgVk1YTkVUM19SWF9BTExPQ19USFJFU0hPTEQocnEsIHJpbmdfaWR4LCBhZGFwdGVyKSBcCisJKChycSktPnJ4X3JpbmdbcmluZ19pZHhdLnNpemUgPj4gMykKKworI2RlZmluZSBWTVhORVQzX0dFVF9BRERSX0xPKGRtYSkgICAoKHUzMikoZG1hKSkKKyNkZWZpbmUgVk1YTkVUM19HRVRfQUREUl9ISShkbWEpICAgKCh1MzIpKCgodTY0KShkbWEpKSA+PiAzMikpCisKKy8qIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBWTVhORVQzX1JJTkdfU0laRV9BTElHTiAqLworI2RlZmluZSBWTVhORVQzX0RFRl9UWF9SSU5HX1NJWkUgICAgNTEyCisjZGVmaW5lIFZNWE5FVDNfREVGX1JYX1JJTkdfU0laRSAgICAyNTYKKworI2RlZmluZSBWTVhORVQzX01BWF9FVEhfSERSX1NJWkUgICAgMjIKKyNkZWZpbmUgVk1YTkVUM19NQVhfU0tCX0JVRl9TSVpFICAgICgzKjEwMjQpCisKK2ludAordm14bmV0M19xdWllc2NlX2RldihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKworaW50Cit2bXhuZXQzX2FjdGl2YXRlX2RldihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZAordm14bmV0M19mb3JjZV9jbG9zZShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZAordm14bmV0M19yZXNldF9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQKK3ZteG5ldDNfdHFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkCit2bXhuZXQzX3JxX2Rlc3Ryb3koc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKworaW50Cit2bXhuZXQzX2NyZWF0ZV9xdWV1ZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgdTMyIHR4X3Jpbmdfc2l6ZSwgdTMyIHJ4X3Jpbmdfc2l6ZSwgdTMyIHJ4X3JpbmcyX3NpemUpOworCitleHRlcm4gdm9pZCB2bXhuZXQzX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdm14bmV0M19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK2V4dGVybiBjaGFyIHZteG5ldDNfZHJpdmVyX25hbWVbXTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggY2Y1ZmQxNy4uZjFiZmY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC01OCw4ICs1OCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOwogCWludCB1cDsKLQlpbnQgcmVxdWVzdF9zZW50OwotCXUzMiB0eHNlcTsgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIHR4c2VxOyAvKiBUWCBzZXF1ZW5jZSBudW1iZXIsIDAgPSBub25lICovCiAJdTMyIHJ4c2VxOyAvKiBSWCBzZXF1ZW5jZSBudW1iZXIgKi8KIH07CiAKQEAgLTE2Myw2ICsxNjIsNyBAQAogCXN0cnVjdCBjaXNjb19wYWNrZXQgKmNpc2NvX2RhdGE7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCV9fYmUzMiBhZGRyLCBtYXNrOworCXUzMiBhY2s7CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSkKIAkJZ290byByeF9lcnJvcjsKQEAgLTIyMyw4ICsyMjMsMTAgQEAKIAkJY2FzZSBDSVNDT19LRUVQQUxJVkVfUkVROgogCQkJc3Bpbl9sb2NrKCZzdC0+bG9jayk7CiAJCQlzdC0+cnhzZXEgPSBudG9obChjaXNjb19kYXRhLT5wYXIxKTsKLQkJCWlmIChzdC0+cmVxdWVzdF9zZW50ICYmCi0JCQkgICAgbnRvaGwoY2lzY29fZGF0YS0+cGFyMikgPT0gc3QtPnR4c2VxKSB7CisJCQlhY2sgPSBudG9obChjaXNjb19kYXRhLT5wYXIyKTsKKwkJCWlmIChhY2sgJiYgKGFjayA9PSBzdC0+dHhzZXEgfHwKKwkJCQkgICAgLyogb3VyIGN1cnJlbnQgUkVRIG1heSBiZSBpbiB0cmFuc2l0ICovCisJCQkJICAgIGFjayA9PSBzdC0+dHhzZXEgLSAxKSkgewogCQkJCXN0LT5sYXN0X3BvbGwgPSBqaWZmaWVzOwogCQkJCWlmICghc3QtPnVwKSB7CiAJCQkJCXUzMiBzZWMsIG1pbiwgaHJzLCBkYXlzOwpAQCAtMjc1LDcgKzI3Nyw2IEBACiAKIAljaXNjb19rZWVwYWxpdmVfc2VuZChkZXYsIENJU0NPX0tFRVBBTElWRV9SRVEsIGh0b25sKCsrc3QtPnR4c2VxKSwKIAkJCSAgICAgaHRvbmwoc3QtPnJ4c2VxKSk7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDE7CiAJc3Bpbl91bmxvY2soJnN0LT5sb2NrKTsKIAogCXN0LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHN0LT5zZXR0aW5ncy5pbnRlcnZhbCAqIEhaOwpAQCAtMjkzLDkgKzI5NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+bG9jaywgZmxhZ3MpOwotCXN0LT51cCA9IDA7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDA7Ci0Jc3QtPnR4c2VxID0gc3QtPnJ4c2VxID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSBzdC0+cnhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiAKIAlpbml0X3RpbWVyKCZzdC0+dGltZXIpOwpAQCAtMzE3LDggKzMxNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPmxvY2ssIGZsYWdzKTsKIAluZXRpZl9kb3JtYW50X29uKGRldik7Ci0Jc3QtPnVwID0gMDsKLQlzdC0+cmVxdWVzdF9zZW50ID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaAppbmRleCA0ZjZhYjEzLi5iMDdlNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCkBAIC0yNjYsNyArMjY2LDcgQEAKICNkZWZpbmUgQURNODIxMV9TWU5DVExfQ1MxCSgxIDw8IDI4KQogI2RlZmluZSBBRE04MjExX1NZTkNUTF9DQUwJKDEgPDwgMjcpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX1NFTENBTAkoMSA8PCAyNikKLSNkZWZpbmUgQURNODIxMV9TWU5DVExfUkZ0eXBlCSgoMSA8PCAyNCkgfHwgKDEgPDwgMjMpIHx8ICgxIDw8IDIyKSkKKyNkZWZpbmUgQURNODIxMV9TWU5DVExfUkZ0eXBlCSgoMSA8PCAyNCkgfCAoMSA8PCAyMykgfCAoMSA8PCAyMikpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX1JGTUQJKDEgPDwgMjIpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX0dFTkVSQUwJKDB4NyA8PCAyMikKIC8qIFNZTkNUTCAyMTowIERhdGEgKFNpNDEyNjogMTgtYml0IGRhdGEsIDQtYml0IGFkZHJlc3MpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNzExNmExYS4uYWJmODk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDc5MCw5ICs0NzkwLDggQEAKIHN0YXRpYyBpbnQgZ2V0X2RlY191MTYoIGNoYXIgKmJ1ZmZlciwgaW50ICpzdGFydCwgaW50IGxpbWl0ICkgewogCXUxNiB2YWx1ZTsKIAlpbnQgdmFsaWQgPSAwOwotCWZvciggdmFsdWUgPSAwOyBidWZmZXJbKnN0YXJ0XSA+PSAnMCcgJiYKLQkJICAgICBidWZmZXJbKnN0YXJ0XSA8PSAnOScgJiYKLQkJICAgICAqc3RhcnQgPCBsaW1pdDsgKCpzdGFydCkrKyApIHsKKwlmb3IgKHZhbHVlID0gMDsgKnN0YXJ0IDwgbGltaXQgJiYgYnVmZmVyWypzdGFydF0gPj0gJzAnICYmCisJCQlidWZmZXJbKnN0YXJ0XSA8PSAnOSc7ICgqc3RhcnQpKyspIHsKIAkJdmFsaWQgPSAxOwogCQl2YWx1ZSAqPSAxMDsKIAkJdmFsdWUgKz0gYnVmZmVyWypzdGFydF0gLSAnMCc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCmluZGV4IDE2YTI3MTcuLjE4OTVkNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCkBAIC02NzksNyArNjc5LDcgQEAKIAkJcmV0dXJuIHJhdGU7CiAKIAlpZiAocmF0ZV90YWJsZS0+aW5mb1tyYXRlXS52YWxpZF9zaW5nbGVfc3RyZWFtICYmCi0JICAgICEoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykpOworCSAgICAhKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpKQogCQlyZXR1cm4gcmF0ZTsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCBmYTE1NDlhLi42NjA3MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC02MDcsODIgKzYwNyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcDsKIH07CiAKLXN0cnVjdCBiNDNfd2xkZXY7Ci0KLS8qIERhdGEgc3RydWN0dXJlIGZvciB0aGUgV0xBTiBwYXJ0cyAoODAyLjExIGNvcmVzKSBvZiB0aGUgYjQzIGNoaXAuICovCi1zdHJ1Y3QgYjQzX3dsIHsKLQkvKiBQb2ludGVyIHRvIHRoZSBhY3RpdmUgd2lyZWxlc3MgZGV2aWNlIG9uIHRoaXMgY2hpcCAqLwotCXN0cnVjdCBiNDNfd2xkZXYgKmN1cnJlbnRfZGV2OwotCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCi0JLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCi0Jc3RydWN0IG11dGV4IG11dGV4OwotCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCi0JICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCi0Jc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7Ci0KLQkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KLQkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKLQkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KLQkgKiBody0+cXVldWVzIGhhcyB0byBiZSByZXN0b3JlZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIHVucmVnaXN0ZXJpbmcKLQkgKiBmcm9tIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICovCi0JdTE2IG1hYzgwMjExX2luaXRpYWxseV9yZWdpc3RlcmVkX3F1ZXVlczsKLQotCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQotCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgotCSAqLwotCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQkvKiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG9wZXJhdGluZyBpbnRlcmZhY2UuICovCi0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCS8qIEN1cnJlbnQgQlNTSUQgKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCi0JaW50IGlmX3R5cGU7Ci0JLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLwotCWJvb2wgb3BlcmF0aW5nOwotCS8qIGZpbHRlciBmbGFncyAqLwotCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7Ci0JLyogU3RhdHMgYWJvdXQgdGhlIHdpcmVsZXNzIGludGVyZmFjZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGllZWVfc3RhdHM7Ci0KLSNpZmRlZiBDT05GSUdfQjQzX0hXUk5HCi0Jc3RydWN0IGh3cm5nIHJuZzsKLQlib29sIHJuZ19pbml0aWFsaXplZDsKLQljaGFyIHJuZ19uYW1lWzMwICsgMV07Ci0jZW5kaWYgLyogQ09ORklHX0I0M19IV1JORyAqLwotCi0JLyogTGlzdCBvZiBhbGwgd2lyZWxlc3MgZGV2aWNlcyBvbiB0aGlzIGNoaXAgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldmxpc3Q7Ci0JdTggbnJfZGV2czsKLQotCWJvb2wgcmFkaW90YXBfZW5hYmxlZDsKLQlib29sIHJhZGlvX2VuYWJsZWQ7Ci0KLQkvKiBUaGUgYmVhY29uIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgKEFQIG9yIElCU1MgbW9kZSkuICovCi0Jc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOwotCWJvb2wgYmVhY29uMF91cGxvYWRlZDsKLQlib29sIGJlYWNvbjFfdXBsb2FkZWQ7Ci0JYm9vbCBiZWFjb25fdGVtcGxhdGVzX3ZpcmdpbjsgLyogTmV2ZXIgd3JvdGUgdGhlIHRlbXBsYXRlcz8gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZV90cmlnZ2VyOwotCi0JLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4gKi8KLQlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgcW9zX3BhcmFtc1s0XTsKLQotCS8qIFdvcmsgZm9yIGFkanVzdG1lbnQgb2YgdGhlIHRyYW5zbWlzc2lvbiBwb3dlci4KLQkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0Ci0JICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7Ci0KLQkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOwotCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKLQotCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KLQlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKLX07CitzdHJ1Y3QgYjQzX3dsOwogCiAvKiBUaGUgdHlwZSBvZiB0aGUgZmlybXdhcmUgZmlsZS4gKi8KIGVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSB7CkBAIC04MjQsNiArNzQ5LDk3IEBACiAjZW5kaWYKIH07CiAKKy8qCisgKiBJbmNsdWRlIGdvZXMgaGVyZSB0byBhdm9pZCBhIGRlcGVuZGVuY3kgcHJvYmxlbS4KKyAqIEEgYmV0dGVyIGZpeCB3b3VsZCBiZSB0byBpbnRlZ3JhdGUgeG1pdC5oIGludG8gYjQzLmguCisgKi8KKyNpbmNsdWRlICJ4bWl0LmgiCisKKy8qIERhdGEgc3RydWN0dXJlIGZvciB0aGUgV0xBTiBwYXJ0cyAoODAyLjExIGNvcmVzKSBvZiB0aGUgYjQzIGNoaXAuICovCitzdHJ1Y3QgYjQzX3dsIHsKKwkvKiBQb2ludGVyIHRvIHRoZSBhY3RpdmUgd2lyZWxlc3MgZGV2aWNlIG9uIHRoaXMgY2hpcCAqLworCXN0cnVjdCBiNDNfd2xkZXYgKmN1cnJlbnRfZGV2OworCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCisJICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCisJc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7CisKKwkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KKwkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKKwkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KKwkgKiBody0+cXVldWVzIGhhcyB0byBiZSByZXN0b3JlZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIHVucmVnaXN0ZXJpbmcKKwkgKiBmcm9tIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICovCisJdTE2IG1hYzgwMjExX2luaXRpYWxseV9yZWdpc3RlcmVkX3F1ZXVlczsKKworCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQorCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgorCSAqLworCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwkvKiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG9wZXJhdGluZyBpbnRlcmZhY2UuICovCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCS8qIEN1cnJlbnQgQlNTSUQgKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisJLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCisJaW50IGlmX3R5cGU7CisJLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLworCWJvb2wgb3BlcmF0aW5nOworCS8qIGZpbHRlciBmbGFncyAqLworCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7CisJLyogU3RhdHMgYWJvdXQgdGhlIHdpcmVsZXNzIGludGVyZmFjZSAqLworCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGllZWVfc3RhdHM7CisKKyNpZmRlZiBDT05GSUdfQjQzX0hXUk5HCisJc3RydWN0IGh3cm5nIHJuZzsKKwlib29sIHJuZ19pbml0aWFsaXplZDsKKwljaGFyIHJuZ19uYW1lWzMwICsgMV07CisjZW5kaWYgLyogQ09ORklHX0I0M19IV1JORyAqLworCisJLyogTGlzdCBvZiBhbGwgd2lyZWxlc3MgZGV2aWNlcyBvbiB0aGlzIGNoaXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmxpc3Q7CisJdTggbnJfZGV2czsKKworCWJvb2wgcmFkaW90YXBfZW5hYmxlZDsKKwlib29sIHJhZGlvX2VuYWJsZWQ7CisKKwkvKiBUaGUgYmVhY29uIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgKEFQIG9yIElCU1MgbW9kZSkuICovCisJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOworCWJvb2wgYmVhY29uMF91cGxvYWRlZDsKKwlib29sIGJlYWNvbjFfdXBsb2FkZWQ7CisJYm9vbCBiZWFjb25fdGVtcGxhdGVzX3ZpcmdpbjsgLyogTmV2ZXIgd3JvdGUgdGhlIHRlbXBsYXRlcz8gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZV90cmlnZ2VyOworCisJLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4gKi8KKwlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgcW9zX3BhcmFtc1s0XTsKKworCS8qIFdvcmsgZm9yIGFkanVzdG1lbnQgb2YgdGhlIHRyYW5zbWlzc2lvbiBwb3dlci4KKwkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0CisJICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCisJc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7CisKKwkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOworCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKKworCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KKwlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKKworI2lmZGVmIENPTkZJR19CNDNfUElPCisJLyoKKwkgKiBSWC9UWCBoZWFkZXIvdGFpbCBidWZmZXJzIHVzZWQgYnkgdGhlIGZyYW1lIHRyYW5zbWl0IGZ1bmN0aW9ucy4KKwkgKi8KKwlzdHJ1Y3QgYjQzX3J4aGRyX2Z3NCByeGhkcjsKKwlzdHJ1Y3QgYjQzX3R4aGRyIHR4aGRyOworCXU4IHJ4X3RhaWxbNF07CisJdTggdHhfdGFpbFs0XTsKKyNlbmRpZiAvKiBDT05GSUdfQjQzX1BJTyAqLworfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYjQzX3dsICpod190b19iNDNfd2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJcmV0dXJuIGh3LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCmluZGV4IDg3MDEwMzQuLmRlNGU4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKQEAgLTExNTcsOCArMTE1Nyw5IEBACiB9CiAKIHN0YXRpYyBpbnQgZG1hX3R4X2ZyYWdtZW50KHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKLQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqKmluX3NrYikKIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKmluX3NrYjsKIAljb25zdCBzdHJ1Y3QgYjQzX2RtYV9vcHMgKm9wcyA9IHJpbmctPm9wczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJdTggKmhlYWRlcjsKQEAgLTEyMjQsOCArMTIyNSwxNCBAQAogCQl9CiAKIAkJbWVtY3B5KHNrYl9wdXQoYm91bmNlX3NrYiwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KGJvdW5jZV9za2ItPmNiLCBza2ItPmNiLCBzaXplb2Yoc2tiLT5jYikpOworCQlib3VuY2Vfc2tiLT5kZXYgPSBza2ItPmRldjsKKwkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKGJvdW5jZV9za2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoYm91bmNlX3NrYik7CisKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJc2tiID0gYm91bmNlX3NrYjsKKwkJKmluX3NrYiA9IGJvdW5jZV9za2I7CiAJCW1ldGEtPnNrYiA9IHNrYjsKIAkJbWV0YS0+ZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDEpOwogCQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIG1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuLCAxKSkgewpAQCAtMTM1NSw3ICsxMzYyLDExIEBACiAJICogc3RhdGljLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIGl0IHBlciBmcmFtZS4gKi8KIAlyaW5nLT5xdWV1ZV9wcmlvID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAKLQllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgc2tiKTsKKwkvKiBkbWFfdHhfZnJhZ21lbnQgbWlnaHQgcmVhbGxvY2F0ZSB0aGUgc2tiLCBzbyBpbnZhbGlkYXRlIHBvaW50ZXJzIHBvaW50aW5nCisJICogaW50byB0aGUgc2tiIGRhdGEgb3IgY2Igbm93LiAqLworCWhkciA9IE5VTEw7CisJaW5mbyA9IE5VTEw7CisJZXJyID0gZG1hX3R4X2ZyYWdtZW50KHJpbmcsICZza2IpOwogCWlmICh1bmxpa2VseShlcnIgPT0gLUVOT0tFWSkpIHsKIAkJLyogRHJvcCB0aGlzIHBhY2tldCwgYXMgd2UgZG9uJ3QgaGF2ZSB0aGUgZW5jcnlwdGlvbiBrZXkKIAkJICogYW55bW9yZSBhbmQgbXVzdCBub3QgdHJhbnNtaXQgaXQgdW5lbmNyeXB0ZWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYwppbmRleCBmYmUzZDRmLi4xZThkYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmMKQEAgLTM0OCw5ICszNDgsOSBAQAogCX0KIH0KIAotdm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3ZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsICp3bCkKIHsKLQlzdHJ1Y3QgYjQzX2xlZHMgKmxlZHMgPSAmZGV2LT53bC0+bGVkczsKKwlzdHJ1Y3QgYjQzX2xlZHMgKmxlZHMgPSAmd2wtPmxlZHM7CiAKIAliNDNfdW5yZWdpc3Rlcl9sZWQoJmxlZHMtPmxlZF90eCk7CiAJYjQzX3VucmVnaXN0ZXJfbGVkKCZsZWRzLT5sZWRfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmgKaW5kZXggOTU5MmU0Yy4uMzJiNjZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBCNDNfTEVEU19IXwogI2RlZmluZSBCNDNfTEVEU19IXwogCitzdHJ1Y3QgYjQzX3dsOwogc3RydWN0IGI0M193bGRldjsKIAogI2lmZGVmIENPTkZJR19CNDNfTEVEUwpAQCAtNjAsNyArNjEsNyBAQAogfTsKIAogdm9pZCBiNDNfbGVkc19yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwotdm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bCAqd2wpOwogdm9pZCBiNDNfbGVkc19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19sZWRzX2V4aXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX2xlZHNfc3RvcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwpAQCAtNzYsNyArNzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGI0M19sZWRzX3JlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2wgKndsKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGI0M19sZWRzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggOWI5MDdhMy4uODZmMzU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC0zODc0LDYgKzM4NzQsNyBAQAogewogCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpvcmlnX2RldjsKKwl1MzIgbWFzazsKIAogcmVkbzoKIAlpZiAoIWRldiB8fCBiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKQpAQCAtMzkyMCw3ICszOTIxLDggQEAKIAkJCWdvdG8gcmVkbzsKIAkJcmV0dXJuIGRldjsKIAl9Ci0JQjQzX1dBUk5fT04oYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSykpOworCW1hc2sgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9NQVNLKTsKKwlCNDNfV0FSTl9PTihtYXNrICE9IDB4RkZGRkZGRkYgJiYgbWFzayk7CiAKIAkvKiBEcmFpbiB0aGUgVFggcXVldWUgKi8KIAl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmd2wtPnR4X3F1ZXVlKSkKQEAgLTQ5OTcsNyArNDk5OSw3IEBACiAKIAlpZiAobGlzdF9lbXB0eSgmd2wtPmRldmxpc3QpKSB7CiAJCWI0M19ybmdfZXhpdCh3bCk7Ci0JCWI0M19sZWRzX3VucmVnaXN0ZXIod2xkZXYpOworCQliNDNfbGVkc191bnJlZ2lzdGVyKHdsKTsKIAkJLyogTGFzdCBjb3JlIG9uIHRoZSBjaGlwIHVucmVnaXN0ZXJlZC4KIAkJICogV2UgY2FuIGRlc3Ryb3kgY29tbW9uIHN0cnVjdCBiNDNfd2wuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IDVlODc2NTAuLjliOTA0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTMzMiw2ICszMzIsNyBAQAogCQkJCXVuc2lnbmVkIGludCBkYXRhX2xlbikKIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwogCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CiAKIAljdGwgfD0gQjQzX1BJT19UWENUTF9XUklURUxPIHwgQjQzX1BJT19UWENUTF9XUklURUhJOwpAQCAtMzQxLDEzICszNDIsMTIgQEAKIAkJCXEtPm1taW9fYmFzZSArIEI0M19QSU9fVFhEQVRBLAogCQkJc2l6ZW9mKHUxNikpOwogCWlmIChkYXRhX2xlbiAmIDEpIHsKLQkJdTggdGFpbFsyXSA9IHsgMCwgfTsKLQogCQkvKiBXcml0ZSB0aGUgbGFzdCBieXRlLiAqLwogCQljdGwgJj0gfkI0M19QSU9fVFhDVExfV1JJVEVISTsKIAkJYjQzX3Bpb3R4X3dyaXRlMTYocSwgQjQzX1BJT19UWENUTCwgY3RsKTsKLQkJdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKLQkJc3NiX2Jsb2NrX3dyaXRlKGRldi0+ZGV2LCB0YWlsLCAyLAorCQl3bC0+dHhfdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJd2wtPnR4X3RhaWxbMV0gPSAwOworCQlzc2JfYmxvY2tfd3JpdGUoZGV2LT5kZXYsIHdsLT50eF90YWlsLCAyLAogCQkJCXEtPm1taW9fYmFzZSArIEI0M19QSU9fVFhEQVRBLAogCQkJCXNpemVvZih1MTYpKTsKIAl9CkBAIC0zODIsNiArMzgyLDcgQEAKIAkJCQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4pCiB7CiAJc3RydWN0IGI0M193bGRldiAqZGV2ID0gcS0+ZGV2OworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAljb25zdCB1OCAqZGF0YSA9IF9kYXRhOwogCiAJY3RsIHw9IEI0M19QSU84X1RYQ1RMXzBfNyB8IEI0M19QSU84X1RYQ1RMXzhfMTUgfApAQCAtMzkyLDI5ICszOTMsMzEgQEAKIAkJCXEtPm1taW9fYmFzZSArIEI0M19QSU84X1RYREFUQSwKIAkJCXNpemVvZih1MzIpKTsKIAlpZiAoZGF0YV9sZW4gJiAzKSB7Ci0JCXU4IHRhaWxbNF0gPSB7IDAsIH07Ci0KKwkJd2wtPnR4X3RhaWxbM10gPSAwOwogCQkvKiBXcml0ZSB0aGUgbGFzdCBmZXcgYnl0ZXMuICovCiAJCWN0bCAmPSB+KEI0M19QSU84X1RYQ1RMXzhfMTUgfCBCNDNfUElPOF9UWENUTF8xNl8yMyB8CiAJCQkgQjQzX1BJTzhfVFhDVExfMjRfMzEpOwogCQlzd2l0Y2ggKGRhdGFfbGVuICYgMykgewogCQljYXNlIDM6CiAJCQljdGwgfD0gQjQzX1BJTzhfVFhDVExfMTZfMjMgfCBCNDNfUElPOF9UWENUTF84XzE1OwotCQkJdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAzXTsKLQkJCXRhaWxbMV0gPSBkYXRhW2RhdGFfbGVuIC0gMl07Ci0JCQl0YWlsWzJdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQkJd2wtPnR4X3RhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gM107CisJCQl3bC0+dHhfdGFpbFsxXSA9IGRhdGFbZGF0YV9sZW4gLSAyXTsKKwkJCXdsLT50eF90YWlsWzJdID0gZGF0YVtkYXRhX2xlbiAtIDFdOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCWN0bCB8PSBCNDNfUElPOF9UWENUTF84XzE1OwotCQkJdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAyXTsKLQkJCXRhaWxbMV0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCQl3bC0+dHhfdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAyXTsKKwkJCXdsLT50eF90YWlsWzFdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQkJd2wtPnR4X3RhaWxbMl0gPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCXRhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCQl3bC0+dHhfdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJCXdsLT50eF90YWlsWzFdID0gMDsKKwkJCXdsLT50eF90YWlsWzJdID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLCBjdGwpOwotCQlzc2JfYmxvY2tfd3JpdGUoZGV2LT5kZXYsIHRhaWwsIDQsCisJCXNzYl9ibG9ja193cml0ZShkZXYtPmRldiwgd2wtPnR4X3RhaWwsIDQsCiAJCQkJcS0+bW1pb19iYXNlICsgQjQzX1BJTzhfVFhEQVRBLAogCQkJCXNpemVvZih1MzIpKTsKIAl9CkBAIC00NDYsOCArNDQ5LDkgQEAKIHN0YXRpYyBpbnQgcGlvX3R4X2ZyYW1lKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHEtPmRldjsKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKnBhY2s7Ci0Jc3RydWN0IGI0M190eGhkciB0eGhkcjsKIAl1MTYgY29va2llOwogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IGhkcmxlbjsKQEAgLTQ1OCw4ICs0NjIsOCBAQAogCQkJICBzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCwgbGlzdCk7CiAKIAljb29raWUgPSBnZW5lcmF0ZV9jb29raWUocSwgcGFjayk7Ci0JaGRybGVuID0gYjQzX3R4aGRyX3NpemUocS0+ZGV2KTsKLQllcnIgPSBiNDNfZ2VuZXJhdGVfdHhoZHIocS0+ZGV2LCAodTggKikmdHhoZHIsIHNrYiwKKwloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShkZXYpOworCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihkZXYsICh1OCAqKSZ3bC0+dHhoZHIsIHNrYiwKIAkJCQkgaW5mbywgY29va2llKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNDY3LDE1ICs0NzEsMTUgQEAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkgewogCQkvKiBUZWxsIHRoZSBmaXJtd2FyZSBhYm91dCB0aGUgY29va2llIG9mIHRoZSBsYXN0CiAJCSAqIG1jYXN0IGZyYW1lLCBzbyBpdCBjYW4gY2xlYXIgdGhlIG1vcmUtZGF0YSBiaXQgaW4gaXQuICovCi0JCWI0M19zaG1fd3JpdGUxNihxLT5kZXYsIEI0M19TSE1fU0hBUkVELAorCQliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwKIAkJCQlCNDNfU0hNX1NIX01DQVNUQ09PS0lFLCBjb29raWUpOwogCX0KIAogCXBhY2stPnNrYiA9IHNrYjsKIAlpZiAocS0+cmV2ID49IDgpCi0JCXBpb190eF9mcmFtZV80Ynl0ZV9xdWV1ZShwYWNrLCAoY29uc3QgdTggKikmdHhoZHIsIGhkcmxlbik7CisJCXBpb190eF9mcmFtZV80Ynl0ZV9xdWV1ZShwYWNrLCAoY29uc3QgdTggKikmd2wtPnR4aGRyLCBoZHJsZW4pOwogCWVsc2UKLQkJcGlvX3R4X2ZyYW1lXzJieXRlX3F1ZXVlKHBhY2ssIChjb25zdCB1OCAqKSZ0eGhkciwgaGRybGVuKTsKKwkJcGlvX3R4X2ZyYW1lXzJieXRlX3F1ZXVlKHBhY2ssIChjb25zdCB1OCAqKSZ3bC0+dHhoZHIsIGhkcmxlbik7CiAKIAkvKiBSZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGFja2V0IHNsb3RzLgogCSAqIEl0IHdpbGwgYmUgcHV0IGJhY2sgd2hlbiB3ZSByZWNlaXZlIHRoZSBzdGF0dXMgcmVwb3J0LiAqLwpAQCAtNjE1LDE0ICs2MTksMTQgQEAKIHN0YXRpYyBib29sIHBpb19yeF9mcmFtZShzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpxKQogewogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHEtPmRldjsKLQlzdHJ1Y3QgYjQzX3J4aGRyX2Z3NCByeGhkcjsKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJdTE2IGxlbjsKIAl1MzIgbWFjc3RhdDsKIAl1bnNpZ25lZCBpbnQgaSwgcGFkZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNvbnN0IGNoYXIgKmVycl9tc2cgPSBOVUxMOwogCi0JbWVtc2V0KCZyeGhkciwgMCwgc2l6ZW9mKHJ4aGRyKSk7CisJbWVtc2V0KCZ3bC0+cnhoZHIsIDAsIHNpemVvZih3bC0+cnhoZHIpKTsKIAogCS8qIENoZWNrIGlmIHdlIGhhdmUgZGF0YSBhbmQgd2FpdCBmb3IgaXQgdG8gZ2V0IHJlYWR5LiAqLwogCWlmIChxLT5yZXYgPj0gOCkgewpAQCAtNjYwLDE2ICs2NjQsMTYgQEAKIAogCS8qIEdldCB0aGUgcHJlYW1ibGUgKFJYIGhlYWRlcikgKi8KIAlpZiAocS0+cmV2ID49IDgpIHsKLQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsICZyeGhkciwgc2l6ZW9mKHJ4aGRyKSwKKwkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsICZ3bC0+cnhoZHIsIHNpemVvZih3bC0+cnhoZHIpLAogCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU84X1JYREFUQSwKIAkJCSAgICAgICBzaXplb2YodTMyKSk7CiAJfSBlbHNlIHsKLQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsICZyeGhkciwgc2l6ZW9mKHJ4aGRyKSwKKwkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsICZ3bC0+cnhoZHIsIHNpemVvZih3bC0+cnhoZHIpLAogCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU9fUlhEQVRBLAogCQkJICAgICAgIHNpemVvZih1MTYpKTsKIAl9CiAJLyogU2FuaXR5IGNoZWNrcy4gKi8KLQlsZW4gPSBsZTE2X3RvX2NwdShyeGhkci5mcmFtZV9sZW4pOworCWxlbiA9IGxlMTZfdG9fY3B1KHdsLT5yeGhkci5mcmFtZV9sZW4pOwogCWlmICh1bmxpa2VseShsZW4gPiAweDcwMCkpIHsKIAkJZXJyX21zZyA9ICJsZW4gPiAweDcwMCI7CiAJCWdvdG8gcnhfZXJyb3I7CkBAIC02NzksNyArNjgzLDcgQEAKIAkJZ290byByeF9lcnJvcjsKIAl9CiAKLQltYWNzdGF0ID0gbGUzMl90b19jcHUocnhoZHIubWFjX3N0YXR1cyk7CisJbWFjc3RhdCA9IGxlMzJfdG9fY3B1KHdsLT5yeGhkci5tYWNfc3RhdHVzKTsKIAlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfRkNTRVJSKSB7CiAJCWlmICghKHEtPmRldi0+d2wtPmZpbHRlcl9mbGFncyAmIEZJRl9GQ1NGQUlMKSkgewogCQkJLyogRHJvcCBmcmFtZXMgd2l0aCBmYWlsZWQgRkNTLiAqLwpAQCAtNzA0LDI0ICs3MDgsMjIgQEAKIAkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9SWERBVEEsCiAJCQkgICAgICAgc2l6ZW9mKHUzMikpOwogCQlpZiAobGVuICYgMykgewotCQkJdTggdGFpbFs0XSA9IHsgMCwgfTsKLQogCQkJLyogUmVhZCB0aGUgbGFzdCBmZXcgYnl0ZXMuICovCi0JCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgdGFpbCwgNCwKKwkJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCB3bC0+cnhfdGFpbCwgNCwKIAkJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJTzhfUlhEQVRBLAogCQkJCSAgICAgICBzaXplb2YodTMyKSk7CiAJCQlzd2l0Y2ggKGxlbiAmIDMpIHsKIAkJCWNhc2UgMzoKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDNdID0gdGFpbFswXTsKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDJdID0gdGFpbFsxXTsKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gdGFpbFsyXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDNdID0gd2wtPnJ4X3RhaWxbMF07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAyXSA9IHdsLT5yeF90YWlsWzFdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB3bC0+cnhfdGFpbFsyXTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMjoKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDJdID0gdGFpbFswXTsKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gdGFpbFsxXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDJdID0gd2wtPnJ4X3RhaWxbMF07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHdsLT5yeF90YWlsWzFdOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB0YWlsWzBdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB3bC0+cnhfdGFpbFswXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNzMwLDE3ICs3MzIsMTUgQEAKIAkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1JYREFUQSwKIAkJCSAgICAgICBzaXplb2YodTE2KSk7CiAJCWlmIChsZW4gJiAxKSB7Ci0JCQl1OCB0YWlsWzJdID0geyAwLCB9OwotCiAJCQkvKiBSZWFkIHRoZSBsYXN0IGJ5dGUuICovCi0JCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgdGFpbCwgMiwKKwkJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCB3bC0+cnhfdGFpbCwgMiwKIAkJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJT19SWERBVEEsCiAJCQkJICAgICAgIHNpemVvZih1MTYpKTsKLQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB0YWlsWzBdOworCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHdsLT5yeF90YWlsWzBdOwogCQl9CiAJfQogCi0JYjQzX3J4KHEtPmRldiwgc2tiLCAmcnhoZHIpOworCWI0M19yeChxLT5kZXYsIHNrYiwgJndsLT5yeGhkcik7CiAKIAlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCmluZGV4IDdhMzIxOGMuLmZmZGNlNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKQEAgLTMzLDcgKzMzLDggQEAKIAkJICAgICAgJiBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfSElfTUFTSykpCiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlpZiAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9MTykKKwkJaWYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEICYmCisJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0xPKQogCQkgICAgJiBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfTE9fTUFTSykKIAkJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCmluZGV4IGFjOWY2MDAuLmY0ZTk2OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAqLwogCi0jaW5jbHVkZSAieG1pdC5oIgorI2luY2x1ZGUgImI0My5oIgogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKICNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJwaW8uaCIKQEAgLTY5MCw3ICs2OTAsMTAgQEAKIAl9CiAKIAltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZWVlODAyMTFfcngoZGV2LT53bC0+aHcsIHNrYik7CisJbG9jYWxfYmhfZW5hYmxlKCk7CiAKICNpZiBCNDNfREVCVUcKIAlkZXYtPnJ4X2NvdW50Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggYTE2YmQ0MS4uY2JiMDU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtNzAyLDcgKzcwMiw3IEBACiAJCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAKIAkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwbVxuIiwKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBNXG4iLAogCQkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxLCBmYWxzZSwKIAkJCQlDTURfQVNZTkMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDY4MTM2MTcuLmYwNTliNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTYxMSw3ICs2MTEsNyBAQAogCWlmIChyeF9zdGF0dXMuYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyeF9zdGF0dXMucmF0ZV9pZHggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKIAotCXJ4X3N0YXR1cy5hbnRlbm5hID0gbGUxNl90b19jcHUocnhfaGRyLT5waHlfZmxhZ3MgJgorCXJ4X3N0YXR1cy5hbnRlbm5hID0gKGxlMTZfdG9fY3B1KHJ4X2hkci0+cGh5X2ZsYWdzKSAmCiAJCQkJCVJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0spID4+IDQ7CiAKIAkvKiBzZXQgdGhlIHByZWFtYmxlIGZsYWcgaWYgYXBwcm9wcmlhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBkNmJjMGUwLi42ZTZmNTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCShzMzIpYXZlcmFnZV9ub2lzZVtpXSkpIC8gMTUwMDsKIAkJLyogYm91bmQgZ2FpbiBieSAyIGJpdHMgdmFsdWUgbWF4LCAzcmQgYml0IGlzIHNpZ24gKi8KIAkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID0KLQkJCW1pbihhYnMoZGVsdGFfZyksIENIQUlOX05PSVNFX01BWF9ERUxUQV9HQUlOX0NPREUpOworCQkJbWluKGFicyhkZWx0YV9nKSwgKGxvbmcpIENIQUlOX05PSVNFX01BWF9ERUxUQV9HQUlOX0NPREUpOwogCiAJCWlmIChkZWx0YV9nIDwgMCkKIAkJCS8qIHNldCBuZWdhdGl2ZSBzaWduICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDMxM2QzZTUuLmVhYWZhZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0zMTA2LDggKzMxMDYsOCBAQAogIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogIG91dF9pZWVlODAyMTFfZnJlZV9odzoKLQlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAJaXdsX2ZyZWVfdHJhZmZpY19tZW0ocHJpdik7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOwogIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKaW5kZXggMmM1Yzg4Zi4uNGFmYWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCkBAIC0xMTU0LDcgKzExNTQsNyBAQAogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX01PRF9DQ0tfTVNLCQljcHVfdG9fbGUxNigxIDw8IDEpCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfU0hPUlRfUFJFQU1CTEVfTVNLCWNwdV90b19sZTE2KDEgPDwgMikKICNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19OQVJST1dfQkFORF9NU0sJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLCQljcHVfdG9fbGUxNigweGYwKQorI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLCQkweGYwCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9QT1MJCTQKIAogI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSwkoMHg3IDw8IDgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDNkMmI5M2EuLmUxNGM5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC00MTAsNyArNDEwLDYgQEAKIAkJCQkJdTE2ICp2YWxpZGJsb2NrYWRkcikKIHsKIAl1MTYgbmV4dF9saW5rX2FkZHIgPSAwLCBsaW5rX3ZhbHVlID0gMCwgdmFsaWRfYWRkcjsKLQlpbnQgcmV0ID0gMDsKIAlpbnQgdXNlZGJsb2NrcyA9IDA7CiAKIAkvKiBzZXQgYWRkcmVzc2luZyBtb2RlIHRvIGFic29sdXRlIHRvIHRyYXZlcnNlIHRoZSBsaW5rIGxpc3QgKi8KQEAgLTQzMCwyOSArNDI5LDI5IEBACiAJCSAqIGNoZWNrIGZvciBtb3JlIGJsb2NrIG9uIHRoZSBsaW5rIGxpc3QKIAkJICovCiAJCXZhbGlkX2FkZHIgPSBuZXh0X2xpbmtfYWRkcjsKLQkJbmV4dF9saW5rX2FkZHIgPSBsaW5rX3ZhbHVlOworCQluZXh0X2xpbmtfYWRkciA9IGxpbmtfdmFsdWUgKiBzaXplb2YodTE2KTsKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBibG9ja3MgJWQgYWRkciAweCV4XG4iLAogCQkJICAgICAgIHVzZWRibG9ja3MsIG5leHRfbGlua19hZGRyKTsKIAkJaWYgKGl3bF9yZWFkX290cF93b3JkKHByaXYsIG5leHRfbGlua19hZGRyLCAmbGlua192YWx1ZSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFsaW5rX3ZhbHVlKSB7CiAJCQkvKgotCQkJICogcmVhY2ggdGhlIGVuZCBvZiBsaW5rIGxpc3QsCisJCQkgKiByZWFjaCB0aGUgZW5kIG9mIGxpbmsgbGlzdCwgcmV0dXJuIHN1Y2Nlc3MgYW5kCiAJCQkgKiBzZXQgYWRkcmVzcyBwb2ludCB0byB0aGUgc3RhcnRpbmcgYWRkcmVzcwogCQkJICogb2YgdGhlIGltYWdlCiAJCQkgKi8KLQkJCWdvdG8gZG9uZTsKKwkJCSp2YWxpZGJsb2NrYWRkciA9IHZhbGlkX2FkZHI7CisJCQkvKiBza2lwIGZpcnN0IDIgYnl0ZXMgKGxpbmsgbGlzdCBwb2ludGVyKSAqLworCQkJKnZhbGlkYmxvY2thZGRyICs9IDI7CisJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiBtb3JlIGluIHRoZSBsaW5rIGxpc3QsIGNvbnRpbnVlICovCiAJCXVzZWRibG9ja3MrKzsKLQl9IHdoaWxlICh1c2VkYmxvY2tzIDwgcHJpdi0+Y2ZnLT5tYXhfbGxfaXRlbXMpOwotCS8qIE9UUCBmdWxsLCB1c2UgbGFzdCBibG9jayAqLwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgaXMgZnVsbCwgdXNlIGxhc3QgYmxvY2tcbiIpOwotZG9uZToKLQkqdmFsaWRibG9ja2FkZHIgPSB2YWxpZF9hZGRyOwotCS8qIHNraXAgZmlyc3QgMiBieXRlcyAobGluayBsaXN0IHBvaW50ZXIpICovCi0JKnZhbGlkYmxvY2thZGRyICs9IDI7Ci0JcmV0dXJuIHJldDsKKwl9IHdoaWxlICh1c2VkYmxvY2tzIDw9IHByaXYtPmNmZy0+bWF4X2xsX2l0ZW1zKTsKKworCS8qIE9UUCBoYXMgbm8gdmFsaWQgYmxvY2tzICovCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBoYXMgbm8gdmFsaWQgYmxvY2tzXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCmluZGV4IDZiNjhkYjcuLjgwYjllNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCkBAIC0yMjAsMzUgKzIyMCwzNSBAQAogICogU2VjdGlvbiAxMDogMi40IEdIeiA0ME1IeiBjaGFubmVsczogMTMyLCA0NCAoX2Fib3ZlXykKICAqLwogLyogMi40IEdIeiBiYW5kOiBDQ0sgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX0NDS18yMF9DT01NT04gICAgICAgKCgweEFBKVwKKyNkZWZpbmUgRUVQUk9NX0xCX0NDS18yMF9DT01NT04gICAgICAgKCgweEE4KVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA4IGJ5dGVzICovCiAvKiAyLjQgR0h6IGJhbmQ6IDIwTUh6LUxlZ2FjeSwgMjBNSHotSFQsIDQwTUh6LUhUICovCi0jZGVmaW5lIEVFUFJPTV9MQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4QjIpXAorI2RlZmluZSBFRVBST01fTEJfT0ZETV9DT01NT04gICAgICAgKCgweEIwKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAyNCBieXRlcyAqLwogLyogNS4yIEdIeiBiYW5kOiAyME1Iei1MZWdhY3ksIDIwTUh6LUhULCA0ME1Iei1IVCAqLwotI2RlZmluZSBFRVBST01fSEJfT0ZETV9DT01NT04gICAgICAgKCgweENBKVwKKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fQ09NTU9OICAgICAgICgoMHhDOClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KIC8qIDIuNEdIeiBiYW5kIGNoYW5uZWxzOgogICoJMUxlZ2FjeSwgMUhULCAyTGVnYWN5LCAySFQsIDEwTGVnYWN5LCAxMEhULCAxMUxlZ2FjeSwgMTFIVCAqLwotI2RlZmluZSBFRVBST01fTEJfT0ZETV8yMF9CQU5EICAgICAgICgoMHhFMilcCisjZGVmaW5lIEVFUFJPTV9MQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweEUwKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA2NCBieXRlcyAqLwogLyogMi40IEdIeiBiYW5kIEhUNDAgY2hhbm5lbHM6ICgxLCsxKSAoMiwrMSkgKDYsKzEpICg3LCsxKSAoOSwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxMjIpXAorI2RlZmluZSBFRVBST01fTEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDEyMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDAgYnl0ZXMgKi8KIC8qIDUuMkdIeiBiYW5kIGNoYW5uZWxzOiAzNkxlZ2FjeSwgMzZIVCwgNjRMZWdhY3ksIDY0SFQsIDEwMExlZ2FjeSwgMTAwSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQkFORCAgICAgICAoKDB4MTRBKVwKKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQkFORCAgICAgICAoKDB4MTQ4KVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA0OCBieXRlcyAqLwogLyogNS4yIEdIeiBiYW5kIEhUNDAgY2hhbm5lbHM6ICgzNiwrMSkgKDYwLCsxKSAoMTAwLCsxKSAqLwotI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDE3QSlcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0hUNDBfQkFORCAgICAgICAoKDB4MTc4KVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAyNCBieXRlcyAqLwogLyogMi40IEdIeiBiYW5kLCBjaGFubm5lbCAxMzogTGVnYWN5LCBIVCAqLwotI2RlZmluZSBFRVBST01fTEJfT0ZETV8yMF9DSEFOTkVMXzEzICAgICAgICgoMHgxOTIpXAorI2RlZmluZSBFRVBST01fTEJfT0ZETV8yMF9DSEFOTkVMXzEzICAgICAgICgoMHgxOTApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCiAvKiA1LjIgR0h6IGJhbmQsIGNoYW5ubmVsIDE0MDogTGVnYWN5LCBIVCAqLwotI2RlZmluZSBFRVBST01fSEJfT0ZETV8yMF9DSEFOTkVMXzE0MCAgICAgICAoKDB4MUEyKVwKKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAgICAgICAgKCgweDFBMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KIC8qIDUuMiBHSHogYmFuZCwgSFQ0MCBjaGFubm5lbHMgKDEzMiwrMSkgKDQ0LCsxKSAqLwotI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkRfMSAgICAgICAoKDB4MUIyKVwKKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EXzEgICAgICAgKCgweDFCMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCA4ZTFiYjUzLi40OTM2MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJICogYXMgYSBiaXRtYXNrLgogCSAqLwogCXJ4X3N0YXR1cy5hbnRlbm5hID0KLQkJbGUxNl90b19jcHUocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykKKwkJKGxlMTZfdG9fY3B1KHBoeV9yZXMtPnBoeV9mbGFncykgJiBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLKQogCQk+PiBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfUE9TOwogCiAJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIGFwcHJvcHJpYXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCBhYTQ5MjMwLi5kMDBhODAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTQwOTcsOCArNDA5Nyw4IEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKICBvdXRfaWVlZTgwMjExX2ZyZWVfaHc6Ci0JaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOwogCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOworCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwppbmRleCBjNDJkM2ZhLi4yM2Y2ODQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCkBAIC0zLDYgKzMsNyBAQAogICAqIHJlc3BvbnNlcyBhcyB3ZWxsIGFzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgZmlybXdhcmUuCiAgICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKaW5kZXggY2I4YmU4ZC4uNWIzNjcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogc3RhdGljIGludCBzcHVfd3JpdGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQogewogCWludCBlcnIgPSAwOwotCXUxNiByZWdfb3V0ID0gY3B1X3RvX2xlMTYocmVnIHwgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLKTsKKwlfX2xlMTYgcmVnX291dCA9IGNwdV90b19sZTE2KHJlZyB8IElGX1NQSV9XUklURV9PUEVSQVRJT05fTUFTSyk7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG07CiAJc3RydWN0IHNwaV90cmFuc2ZlciByZWdfdHJhbnM7CiAJc3RydWN0IHNwaV90cmFuc2ZlciBkYXRhX3RyYW5zOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgdmFsKQogewotCXUxNiBidWZmOworCV9fbGUxNiBidWZmOwogCiAJYnVmZiA9IGNwdV90b19sZTE2KHZhbCk7CiAJcmV0dXJuIHNwdV93cml0ZShjYXJkLCByZWcsICh1OCAqKSZidWZmLCBzaXplb2YodTE2KSk7CkBAIC0xODgsNyArMTg4LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZGVsYXk7CiAJaW50IGVyciA9IDA7Ci0JdTE2IHJlZ19vdXQgPSBjcHVfdG9fbGUxNihyZWcgfCBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSyk7CisJX19sZTE2IHJlZ19vdXQgPSBjcHVfdG9fbGUxNihyZWcgfCBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSyk7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG07CiAJc3RydWN0IHNwaV90cmFuc2ZlciByZWdfdHJhbnM7CiAJc3RydWN0IHNwaV90cmFuc2ZlciBkdW1teV90cmFuczsKQEAgLTIzNSw3ICsyMzUsNyBAQAogLyogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyICovCiBzdGF0aWMgaW5saW5lIGludCBzcHVfcmVhZF91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgKnZhbCkKIHsKLQl1MTYgYnVmOworCV9fbGUxNiBidWY7CiAJaW50IHJldDsKIAogCXJldCA9IHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKiBUaGUgbG93IDE2IGJpdHMgYXJlIHJlYWQgZmlyc3QuICovCiBzdGF0aWMgaW50IHNwdV9yZWFkX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiAqdmFsKQogewotCXUzMiBidWY7CisJX19sZTMyIGJ1ZjsKIAlpbnQgZXJyOwogCiAJZXJyID0gc3B1X3JlYWQoY2FyZCwgcmVnLCAodTggKikmYnVmLCBzaXplb2YoYnVmKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCmluZGV4IDkyYmM4YzUuLjNmYWM0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAkvKiBGaWxsIHRoZSByZWNlaXZlIGNvbmZpZ3VyYXRpb24gVVJCIGFuZCBpbml0aWFsaXNlIHRoZSBSeCBjYWxsIGJhY2sgKi8KIAl1c2JfZmlsbF9idWxrX3VyYihjYXJkcC0+cnhfdXJiLCBjYXJkcC0+dWRldiwKIAkJCSAgdXNiX3JjdmJ1bGtwaXBlKGNhcmRwLT51ZGV2LCBjYXJkcC0+ZXBfaW4pLAotCQkJICAodm9pZCAqKSAoc2tiLT50YWlsICsgKHNpemVfdCkgSVBGSUVMRF9BTElHTl9PRkZTRVQpLAorCQkJICBza2ItPmRhdGEgKyBJUEZJRUxEX0FMSUdOX09GRlNFVCwKIAkJCSAgTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUsIGNhbGxiYWNrZm4sCiAJCQkgIGNhcmRwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGNkNThlLi4xYzg4YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAogCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYTA4NDA3Ny4uOWZlNzcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtMTk5NCw3ICsxOTk0LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfQldfV0lOX1NJWkUsIHR4ZGVzYy0+YmFfc2l6ZSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1dJUkVMRVNTX0NMSV9JRCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncykgPwotCQkJICAgICAgIChza2JkZXNjLT5lbnRyeS0+ZW50cnlfaWR4ICsgMSkgOiAweGZmKTsKKwkJCSAgIHR4ZGVzYy0+a2V5X2lkeCA6IDB4ZmYpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9NUERVX1RPVEFMX0JZVEVfQ09VTlQsCiAJCQkgICBza2ItPmxlbiAtIHR4ZGVzYy0+bDJwYWQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9QQUNLRVRJRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA3MTc2MWIzLi43M2JiZWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC04MTUsNiArODE1LDggQEAKIAogCW11dGV4X2luaXQoJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAorCXNldF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwogCS8qCiAJICogTWFrZSByb29tIGZvciBydDJ4MDBfaW50ZiBpbnNpZGUgdGhlIHBlci1pbnRlcmZhY2UKIAkgKiBzdHJ1Y3R1cmUgaWVlZTgwMjExX3ZpZi4KQEAgLTg3MSw4ICs4NzMsNiBAQAogCXJ0MngwMGxlZHNfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwogCi0Jc2V0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwppbmRleCBjNjRkYjBiLi5jNzA4ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTM2Miw4ICszNjIsOSBAQAogCiAJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAotCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5odywKLQkJCQkgICAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC00NjksOCArNDcwLDEwIEBACiAJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCiAJICovCiAJbGluay0+Y291bnQrKzsKLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCi0JCQkJICAgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKKworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IDUwMTU0NDguLmYwMmI0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTQ3LDYgKzQ3LDggQEAKIAkgICAgKHJlcXVlc3R0eXBlID09IFVTQl9WRU5ET1JfUkVRVUVTVF9JTikgPwogCSAgICB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUodXNiX2RldiwgMCk7CiAKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAtRU5PREVWOwogCiAJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsCkBAIC02MCw4ICs2MiwxMCBAQAogCQkgKiAtRU5PREVWOiBEZXZpY2UgaGFzIGRpc2FwcGVhcmVkLCBubyBwb2ludCBjb250aW51aW5nLgogCQkgKiBBbGwgb3RoZXIgZXJyb3JzOiBUcnkgYWdhaW4uCiAJCSAqLwotCQllbHNlIGlmIChzdGF0dXMgPT0gLUVOT0RFVikKKwkJZWxzZSBpZiAoc3RhdHVzID09IC1FTk9ERVYpIHsKKwkJCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlFUlJPUihydDJ4MDBkZXYsCkBAIC0xNjEsNiArMTY1LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CiAJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2xvY2socnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAJCWlmICghcnQyeDAwX2dldF9maWVsZDMyKCpyZWcsIGZpZWxkKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGI4ZjVlZTMuLjE0ZTdiYjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTIzODksMTAgKzIzODksMTMgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogTVNJICovCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg0NjAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NzcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg3NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHhhODYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NzQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIE92aXNsaW5rICovCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHg3MzE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBSYWxpbmsgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCkBAIC0yNDIwLDYgKzI0MjMsOCBAQAogCS8qIFBsYW5leCAqLwogCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBXaWRlVGVsbCAqLworCXsgVVNCX0RFVklDRSgweDcxNjcsIDB4Mzg0MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogWmNvbSAqLwogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAxYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogWnlYRUwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmluZGV4IGExYzY3MGYuLmNmOGE0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwpAQCAtMjEwLDEwICsyMTAsMTAgQEAKIAogCS8qIHR1cm4gdGhlIExFRCBvZmYgYmVmb3JlIGV4aXRpbmcgKi8KIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGRldiwgJnByaXYtPmxlZF9vZmYsIDApOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwogCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF9yeCk7CiAJcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3R4KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF9vZmYpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29uKTsKIH0KICNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBhMDM4NGI2Li5iNDIzNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0xNjksNyArMTY5LDYgQEAKIHN0YXRpYyBpbnQgem5ldF9yZXF1ZXN0X3Jlc291cmNlcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgem5ldF9wcml2YXRlICp6bmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgJnpuZXRfaW50ZXJydXB0LCAwLCAiWk5ldCIsIGRldikpCiAJCWdvdG8gZmFpbGVkOwpAQCAtMTg3LDEzICsxODYsOSBAQAogIGZyZWVfc2lhOgogCXJlbGVhc2VfcmVnaW9uICh6bmV0LT5zaWFfYmFzZSwgem5ldC0+c2lhX3NpemUpOwogIGZyZWVfdHhfZG1hOgotCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKIAlmcmVlX2RtYSAoem5ldC0+dHhfZG1hKTsKLQlyZWxlYXNlX2RtYV9sb2NrIChmbGFncyk7CiAgZnJlZV9yeF9kbWE6Ci0JZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwogCWZyZWVfZG1hICh6bmV0LT5yeF9kbWEpOwotCXJlbGVhc2VfZG1hX2xvY2sgKGZsYWdzKTsKICBmcmVlX2lycToKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAgZmFpbGVkOgpAQCAtMjAzLDE0ICsxOTgsMTEgQEAKIHN0YXRpYyB2b2lkIHpuZXRfcmVsZWFzZV9yZXNvdXJjZXMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpuZXRfcHJpdmF0ZSAqem5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJlbGVhc2VfcmVnaW9uICh6bmV0LT5zaWFfYmFzZSwgem5ldC0+c2lhX3NpemUpOwogCXJlbGVhc2VfcmVnaW9uIChkZXYtPmJhc2VfYWRkciwgem5ldC0+aW9fc2l6ZSk7Ci0JZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwogCWZyZWVfZG1hICh6bmV0LT50eF9kbWEpOwogCWZyZWVfZG1hICh6bmV0LT5yeF9kbWEpOwotCXJlbGVhc2VfZG1hX2xvY2sgKGZsYWdzKTsKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggYmFjYWE1My4uNGIyMmJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTk3LDYgKzk3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcmVnaXN0ZXIpOwogCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG9mX3BoeV9maW5kX2RldmljZSAqLworc3RhdGljIGludCBvZl9waHlfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCit7CisJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOworfQorCiAvKioKICAqIG9mX3BoeV9maW5kX2RldmljZSAtIEdpdmUgYSBQSFkgbm9kZSwgZmluZCB0aGUgcGh5X2RldmljZQogICogQHBoeV9ucDogUG9pbnRlciB0byB0aGUgcGh5J3MgZGV2aWNlIHRyZWUgbm9kZQpAQCAtMTA2LDE1ICsxMTIsMTAgQEAKIHN0cnVjdCBwaHlfZGV2aWNlICpvZl9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpwaHlfbnApCiB7CiAJc3RydWN0IGRldmljZSAqZDsKLQlpbnQgbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCi0JewotCQlyZXR1cm4gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZkZXYtPmFyY2hkYXRhKSA9PSBwaHlfbnA7Ci0JfQotCiAJaWYgKCFwaHlfbnApCiAJCXJldHVybiBOVUxMOwogCi0JZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBtYXRjaCk7CisJZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBvZl9waHlfbWF0Y2gpOwogCXJldHVybiBkID8gdG9fcGh5X2RldmljZShkKSA6IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BoeV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCmluZGV4IDc0NTQwMmUuLjViNzA1NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC02NTYsOCArNjU2LDEwIEBACiAJZnJlZV9saW5rX3N0YXRlKGxpbmspOwogCiAJLyogUmVjaGVjayBsYXRlbmNpZXMgYW5kIGNvbmZpZ3VyZSB1cHN0cmVhbSBsaW5rcyAqLwotCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKLQlwY2llX2NvbmZpZ19hc3BtX3BhdGgocGFyZW50X2xpbmspOworCWlmIChwYXJlbnRfbGluaykgeworCQlwY2llX3VwZGF0ZV9hc3BtX2NhcGFibGUocm9vdCk7CisJCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJfQogb3V0OgogCW11dGV4X3VubG9jaygmYXNwbV9sb2NrKTsKIAl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGE3OTBiMTcuLjI0NWQyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0xMDA5LDcgKzEwMDksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYW1kX2lkZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCS8qIHNldCBTQlgwMCBTQVRBIGluIElERSBtb2RlIHRvIEFIQ0kgbW9kZSAqLworCS8qIHNldCBTQlgwMC9IdWRzb24tMiBTQVRBIGluIElERSBtb2RlIHRvIEFIQ0kgbW9kZSAqLwogCXU4IHRtcDsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19ERVZJQ0UsICZ0bXApOwpAQCAtMTAyOCw4ICsxMDI4LDggQEAKIERFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOwogCiAvKgogICoJU2VydmVyd29ya3MgQ1NCNSBJREUgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBuYXRpdmUgbW9kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCAwOTU5NDMwLi5jYjFhMDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjk5LDE3ICsyOTksOCBAQAogCQlyID0gYnVzLT5yZXNvdXJjZVtpXTsKIAkJaWYgKHIgPT0gJmlvcG9ydF9yZXNvdXJjZSB8fCByID09ICZpb21lbV9yZXNvdXJjZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAociAmJiAoci0+ZmxhZ3MgJiB0eXBlX21hc2spID09IHR5cGUpIHsKLQkJCWlmICghci0+cGFyZW50KQotCQkJCXJldHVybiByOwotCQkJLyoKLQkJCSAqIGlmIHRoZXJlIGlzIG5vIGNoaWxkIHVuZGVyIHRoYXQsIHdlIHNob3VsZCByZWxlYXNlCi0JCQkgKiBhbmQgdXNlIGl0LiBkb24ndCBuZWVkIHRvIHJlc2V0IGl0LCBwYnVzX3NpemVfKiB3aWxsCi0JCQkgKiBzZXQgaXQgYWdhaW4KLQkJCSAqLwotCQkJaWYgKCFyLT5jaGlsZCAmJiAhcmVsZWFzZV9yZXNvdXJjZShyKSkKLQkJCQlyZXR1cm4gcjsKLQkJfQorCQlpZiAociAmJiAoci0+ZmxhZ3MgJiB0eXBlX21hc2spID09IHR5cGUgJiYgIXItPnBhcmVudCkKKwkJCXJldHVybiByOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKaW5kZXggNGExMTBiNy4uNmM0YTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKQEAgLTE0NjMsNyArMTQ2Myw5IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBjb2RlOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOworICAgIGlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkKKwkgICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CiAgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKICAgICBpZiAocmV0ICE9IDApCiAJICAgIGdvdG8gZG9uZTsKQEAgLTE0OTAsNyArMTQ5Miw3IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdW5zaWduZWQgaW50ICppbmZvKQoraW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaW5mbykKIHsKICAgICB0dXBsZV90ICp0dXBsZTsKICAgICBjaXNwYXJzZV90ICpwOwpAQCAtMTUxNSwzMCArMTUxNywzMCBAQAogICAgIGNvdW50ID0gcmVzZXJ2ZWQgPSAwOwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CiAgICAgdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKKyAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCWdvdG8gZG9uZTsKIAogICAgIC8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAogICAgICAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KICAgICBpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gMCkpCiAJZGV2X29rKys7CiAKICAgICAvKiBBbGwgY2FyZHMgc2hvdWxkIGhhdmUgYSBNQU5GSUQgdHVwbGUsIGFuZC9vciBhIFZFUlNfMSBvciBWRVJTXzIKICAgICAgICB0dXBsZSwgZm9yIGNhcmQgaWRlbnRpZmljYXRpb24uICBDZXJ0YWluIG9sZCBELUxpbmsgYW5kIExpbmtzeXMKICAgICAgICBjYXJkcyBoYXZlIG9ubHkgYSBicm9rZW4gVkVSU18yIHR1cGxlOyBoZW5jZSB0aGUgYm9ndXMgdGVzdC4gKi8KLSAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQorICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCiAJaWRlbnRfb2srKzsKIAogICAgIGlmICghZGV2X29rICYmICFpZGVudF9vaykKIAlnb3RvIGRvbmU7CiAKICAgICBmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7Ci0JcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisJcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAJaWYgKHJldCAhPSAwKQogCQlicmVhazsKIAlpZiAoKCh0dXBsZS0+VHVwbGVDb2RlID4gMHgyMykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDQwKSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDkzNGQ0YmUuLjY5OGQ3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtOTgsMTAgKzk4LDEzIEBACiAgKiBUaGVzZSBmdW5jdGlvbnMgY2hlY2sgZm9yIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3QgcGNtY2lhX3Nva2V0IGFycmF5cywKICAqIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcGNtY2lhX3tzdXNwZW5kLHJlc3VtZX1fc29ja2V0CiAgKi8KK3N0YXRpYyBpbnQgc29ja2V0X2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3N0YXRpYyBpbnQgc29ja2V0X2xhdGVfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogc3RhdGljIGludCBzb2NrZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAotaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmNiKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqKSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCkBAIC0xMTAsMjkgKzExMywzNCBAQAogCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKIAkJCWNvbnRpbnVlOwogCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7CisJCWNiKHNvY2tldCk7CiAJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOworfQogCitpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X3N1c3BlbmQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKTsKIAordm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9lYXJseV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUpOworCit2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfbGF0ZV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZSk7CisKIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0KLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0JCWlmIChzb2NrZXQtPmRldi5wYXJlbnQgIT0gZGV2KQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQl9Ci0JdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQorCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9yZXN1bWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUpOwpAQCAtNTQ2LDI5ICs1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0Ci0gKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCi0gKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KLSAqLwotc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKIAlza3QtPm9wcy0+c2V0X3NvY2tldChza3QsICZza3QtPnNvY2tldCk7CisJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKKwkJc2t0LT5yZXN1bWVfc3RhdHVzID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwpAQCAtNTk2LDYgKzU5OSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVzdW1lIGEgc29ja2V0LiAgSWYgYSBjYXJkIGlzIHByZXNlbnQsIHZlcmlmeSBpdHMgQ0lTIGFnYWluc3QKKyAqIG91ciBjYWNoZWQgY29weS4gIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhlIGNhcmQgaGFzIGJlZW4KKyAqIHJlcGxhY2VkLCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXJzLgorICovCitzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc29ja2V0X2Vhcmx5X3Jlc3VtZShza3QpOworCXJldHVybiBzb2NrZXRfbGF0ZV9yZXN1bWUoc2t0KTsKK30KKwogc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDc5NjE1ZTYuLjFmNDA5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMTk3LDggKzE5Nyw3IEBACiAJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCXVuc2lnbmVkIGludCAqY291bnQpOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOwogCiAvKiByc3JjX21nci5jICovCiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCA5ZjMwMGQzLi5mNWI3MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWlmICghdmVyczEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLAogCQkJICAgICAgIENJU1RQTF9NQU5GSUQsICZtYW5mX2lkKSkgewogCQlwX2Rldi0+bWFuZl9pZCA9IG1hbmZfaWQubWFuZjsKIAkJcF9kZXYtPmNhcmRfaWQgPSBtYW5mX2lkLmNhcmQ7CkBAIC01ODEsOSArNTgxLDkgQEAKIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKLQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBDSVNUUExfVkVSU18xLAorCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7Ci0JCWZvciAoaT0wOyBpIDwgdmVyczEtPm5zOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCi0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJm5vX2NoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKIAkJZHNfZGV2X2RiZygwLCAmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKaW5kZXggYjkwNmFiZS4uYTRhYWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKQEAgLTEwNTMsOCArMTA1Myw4IEBACiAgICAgdV9jaGFyIG1hcCwgaW9jdGw7CiAgICAgCiAgICAgZGVidWcoMSwgIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCSAgIiUjeC0lI3gpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgbWFwID0gaW8tPm1hcDsKICAgICBpZiAoKG1hcCA+IDEpIHx8IChpby0+c3RhcnQgPiAweGZmZmYpIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwKIAkoaW8tPnN0b3AgPCBpby0+c3RhcnQpKSByZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCmluZGV4IGQxZDg5YzQuLjdkZmJlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtNTM3LDggKzUzNyw5IEBACiAJdV9jaGFyIG1hcDsKIAogCWRlYnVnKDMsICJtMzJyX2NmYzogU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAgIiUjbHgtJSNseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKKwkJICBpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCW1hcCA9IGlvLT5tYXA7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NCw4ICs1NTUsOSBAQAogCXBjY19zb2NrZXRfdCAqdCA9ICZzb2NrZXRbc29ja107CiAKIAlkZWJ1ZygzLCAibTMycl9jZmM6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCi0JCSBtZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJICIlI2xseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAorCQkgbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJIG1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKgogCSAqIHNhbml0eSBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggYTA2NTU4My4uYzY1MjRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC00OTIsOCArNDkyLDkgQEAKIAl1X2NoYXIgbWFwOwogCiAJZGVidWcoMywgIm0zMnItcGNjOiBTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICAiJSN4LSUjeClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKKwkJICBpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCW1hcCA9IGlvLT5tYXA7CiAKIAlyZXR1cm4gMDsKQEAgLTUxNSw4ICs1MTYsOSBAQAogI2VuZGlmCiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBjNjlmMmM0Li40MDM1NTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTk3NSw4ICs5NzUsOSBAQAogI2RlZmluZSBNOFhYX0JBU0UgKFBDTUNJQV9JT19XSU5fQkFTRSArIGlvLT5zdGFydCkKIAogCWRwcmludGsoIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM0LjR4LSUjNC40eClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCWlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSIlIzQuNGxseC0lIzQuNGxseClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCWlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCiAJaWYgKChpby0+bWFwID49IFBDTUNJQV9JT19XSU5fTk8pIHx8IChpby0+c3RhcnQgPiAweGZmZmYpCiAJICAgIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkKQEAgLTEwNTUsOCArMTA1Niw5IEBACiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzLT5wY21jaWE7CiAKIAlkcHJpbnRrKCJTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzUuNWx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCi0JCW1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkiJSM1LjVsbHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKKwkJbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJbWVtLT5jYXJkX3N0YXJ0KTsKIAogCWlmICgobWVtLT5tYXAgPj0gUENNQ0lBX01FTV9XSU5fTk8pCiAvLyAgICAgICAgICB8fCAoKG1lbS0+cykgPj0gUENNQ0lBX01FTV9XSU5fU0laRSkKQEAgLTExMDcsOCArMTEwOSw5IEBACiAJfQogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKiBjb3B5IHRoZSBzdHJ1Y3QgYW5kIG1vZGlmeSB0aGUgY29weSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmluZGV4IDMyYzQ0MDQuLjMwY2Y3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCkBAIC04ODEsNyArODgxLDcgQEAKIAltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwogCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7CiAJbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZidWYtPmNpc2luZm8uQ2hhaW5zKTsKKwlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZidWYtPmNpc2luZm8uQ2hhaW5zKTsKIAlicmVhazsKICAgICBjYXNlIERTX1NVU1BFTkRfQ0FSRDoKIAlyZXQgPSBwY21jaWFfc3VzcGVuZF9jYXJkKHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwppbmRleCAxYzM5ZDM0Li43MGEzMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwpAQCAtNjQxLDYgKzY0MSwxMiBAQAogCWlmICgocmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkpCiAJCWdvdG8gZXJyX291dF9mcmVlX21lbTsKIAorCWlmICghcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGQ2NzI5OiByZWZ1c2luZyB0byBsb2FkIHRoZSBkcml2ZXIgIgorCQkJCSAiYXMgdGhlIGlvX2Jhc2UgaXMgMC5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tZW07CisJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAicGQ2NzI5OiBDaXJydXMgUEQ2NzI5IFBDSSB0byBQQ01DSUEgQnJpZGdlICIKIAkJImF0IDB4JWxseCBvbiBpcnEgJWRcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDljYTIyYzcuLjcwMzlmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAgICAgLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLwogICAgIGIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFiKSB7CisJICAgIHByaW50aygiXG4iKTsKIAkgICAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKIAkJICAgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NSw3ICsyNzYsNyBAQAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsIGNvdW50KTsKKwkJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBjb3VudCk7CiAJCS8qIGludmFsaWRhdGUgbWFwcGluZyBhbmQgQ0lTIGNhY2hlICovCiAJCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCQlzLT5jaXNfdmlydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggMTYzY2Y5OC4uZWY3ZTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtMzM2LDggKzMzNiw5IEBACiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBzcGVlZCA9IG1hcC0+c3BlZWQ7CiAKLQlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgIHNwZWVkICV1IHN0YXJ0IDB4JTA4eCBzdG9wIDB4JTA4eFxuIiwKLQkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsIG1hcC0+c3RhcnQsIG1hcC0+c3RvcCk7CisJZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOGxseCBzdG9wIDB4JTA4bGx4XG4iLAorCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RvcCk7CiAJZGVidWcoc2t0LCAyLCAiZmxhZ3M6ICVzJXMlcyVzJXMlcyVzJXNcbiIsCiAJCShtYXAtPmZsYWdzPT0wKT8iPE5PTkU+IjoiIiwKIAkJKG1hcC0+ZmxhZ3MmTUFQX0FDVElWRSk/IkFDVElWRSAiOiIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCBmZjlhM2JiLi43OGQ1YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAKIAkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZjaGFpbnMpKQorCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKIAkJCXJldHVybiAtRUlPOwogCQlpZiAoIWNoYWlucykKIAkJCXJldHVybiAtRU5PREFUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCA1ODI0MTNmLi42OTE4ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC03MzIsOCArNzMyLDggQEAKICAgICB1X3Nob3J0IGJhc2UsIGxlbiwgaW9jdGw7CiAgICAgCiAgICAgZGVidWcoMSwgIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCSAgIiUjeC0lI3gpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsIGlvLT5zcGVlZCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKICAgICBpZiAoKGlvLT5tYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CiAgICAgdGNpY19zZXR3KFRDSUNfQUREUisyLCBUQ0lDX0FEUjJfSU5EUkVHIHwgKHBzb2NrIDw8IFRDSUNfU1NfU0hGVCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwppbmRleCBhYmUwZTQ0Li44YmU0Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwpAQCAtMTI3NSwxNiArMTI3NSwyNiBAQAogCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKQogCQlzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUoc29ja2V0KTsKIAotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKKwlwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB5ZW50YV9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShkZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgeWVudGFfcG1fb3BzID0gewogCS5zdXNwZW5kX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCiAJLnJlc3VtZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnJlc3VtZSA9IHllbnRhX2Rldl9yZXN1bWUsCiAJLmZyZWV6ZV9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAogCS50aGF3X25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkudGhhdyA9IHllbnRhX2Rldl9yZXN1bWUsCiAJLnBvd2Vyb2ZmX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS5yZXN0b3JlID0geWVudGFfZGV2X3Jlc3VtZSwKIH07CiAKICNkZWZpbmUgWUVOVEFfUE1fT1BTCSgmeWVudGFfcG1fb3BzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCA3NDllMjEwLi40MjI2ZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMzUwLDEzICszNTAsMTQgQEAKIAkuc2V0X2Jsb2NrID0gZWVlcGNfcmZraWxsX3NldCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQogewogCS8qCiAJICogSWYgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHNldF9hY3BpKCkgZmFpbHMsIGl0J3MgYmVjYXVzZSB0aGVyZSdzIG5vCiAJICogY2FtZXJhIHNvIHdlIGNhbiBpZ25vcmUgdGhlIGVycm9yLgogCSAqLwotCXNldF9hY3BpKENNX0FTTF9DQU1FUkEsIDEpOworCWlmIChnZXRfYWNwaShDTV9BU0xfQ0FNRVJBKSA9PSAwKQorCQlzZXRfYWNwaShDTV9BU0xfQ0FNRVJBLCAxKTsKIH0KIAogLyoKQEAgLTExODksNyArMTE5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGYzNWFlZTUuLmJjZDRiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0jaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggMzVhMGIxOS4uMmQ0MTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMjcxLDYgKzI3MSw3IEBACiB7CiAJc3RydWN0IHBwc19kZXZpY2UgKnBwczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjYXB0dXJlZCA9IDA7CiAKIAlpZiAoKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcHM6IHVua25vd24gZXZlbnQgKCV4KSBmb3Igc291cmNlICVkXG4iLApAQCAtMjkzLDcgKzI5NCw4IEBACiAKIAkvKiBDaGVjayB0aGUgZXZlbnQgKi8KIAlwcHMtPmN1cnJlbnRfbW9kZSA9IHBwcy0+cGFyYW1zLm1vZGU7Ci0JaWYgKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpICYKKwkJCShwcHMtPnBhcmFtcy5tb2RlICYgUFBTX0NBUFRVUkVBU1NFUlQpKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQVNTRVJUKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5hc3NlcnRfb2ZmX3R1KTsKQEAgLTMwMyw4ICszMDUsMTEgQEAKIAkJcHBzLT5hc3NlcnRfc2VxdWVuY2UrKzsKIAkJcHJfZGVidWcoImNhcHR1cmUgYXNzZXJ0IHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKIAkJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQotCWlmIChldmVudCAmIFBQU19DQVBUVVJFQ0xFQVIpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgJgorCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUNMRUFSKSkgewogCQkvKiBXZSBoYXZlIHRvIGFkZCBhbiBvZmZzZXQ/ICovCiAJCWlmIChwcHMtPnBhcmFtcy5tb2RlICYgUFBTX09GRlNFVENMRUFSKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5jbGVhcl9vZmZfdHUpOwpAQCAtMzE0LDEyICszMTksMTcgQEAKIAkJcHBzLT5jbGVhcl9zZXF1ZW5jZSsrOwogCQlwcl9kZWJ1ZygiY2FwdHVyZSBjbGVhciBzZXEgIyV1IGZvciBzb3VyY2UgJWRcbiIsCiAJCQlwcHMtPmNsZWFyX3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQogCi0JcHBzLT5nbyA9IH4wOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CisJLyogV2FrZSB1cCBpaWYgY2FwdHVyZWQgc29tdGhpbmcgKi8KKwlpZiAoY2FwdHVyZWQpIHsKKwkJcHBzLT5nbyA9IH4wOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBwcy0+cXVldWUpOwogCi0Ja2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwkJa2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcHMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvcHBzLmMgYi9kcml2ZXJzL3Bwcy9wcHMuYwppbmRleCBmZWExN2U3Li5jYTUxODNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9wcHMuYworKysgYi9kcml2ZXJzL3Bwcy9wcHMuYwpAQCAtNzEsOSArNzEsMTQgQEAKIAljYXNlIFBQU19HRVRQQVJBTVM6CiAJCXByX2RlYnVnKCJQUFNfR0VUUEFSQU1TOiBzb3VyY2UgJWRcbiIsIHBwcy0+aWQpOwogCi0JCS8qIFJldHVybiBjdXJyZW50IHBhcmFtZXRlcnMgKi8KLQkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwcHMtPnBhcmFtcywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKKwkJc3Bpbl9sb2NrX2lycSgmcHBzLT5sb2NrKTsKKworCQkvKiBHZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyAqLworCQlwYXJhbXMgPSBwcHMtPnBhcmFtczsKKworCQlzcGluX3VubG9ja19pcnEoJnBwcy0+bG9jayk7CisKKwkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwYXJhbXMsIHNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCmluZGV4IGY0ZGQ4N2UuLjMzYTEwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCkBAIC03MCw3ICs3MCw3IEBACiAJcnRjLT50bV9ob3VyID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfSE9VUl0pOwogCXJ0Yy0+dG1fd2RheSA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX1dLREFZXSk7CiAJcnRjLT50bV9tZGF5ID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfREFZXSk7Ci0JcnRjLT50bV9tb24gPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0pOworCXJ0Yy0+dG1fbW9uID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdKSAtIDE7CiAJcnRjLT50bV95ZWFyID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfWUVBUl0pICsgMTAwOwogfQogCkBAIC04MSw3ICs4MSw3IEBACiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX0hPVVJdID0gYmluMmJjZChydGMtPnRtX2hvdXIpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9XS0RBWV0gPSBiaW4yYmNkKHJ0Yy0+dG1fd2RheSk7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX0RBWV0gPSBiaW4yYmNkKHJ0Yy0+dG1fbWRheSk7Ci0JcGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSA9IGJpbjJiY2QocnRjLT50bV9tb24pOworCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0gPSBiaW4yYmNkKHJ0Yy0+dG1fbW9uICsgMSk7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX1lFQVJdID0gYmluMmJjZChydGMtPnRtX3llYXIgJSAxMDApOwogfQogCkBAIC0yNDUsOCArMjQ1LDkgQEAKIAlyZXQgPSBwY2Y1MDYzM193cml0ZV9ibG9jayhydGMtPnBjZiwgUENGNTA2MzNfUkVHX1JUQ1NDQSwKIAkJCQlQQ0Y1MDYzM19USV9FWFRFTlQsICZwY2ZfdG0udGltZVswXSk7CiAKLQlpZiAoIWFsYXJtX21hc2tlZCkKKwlpZiAoIWFsYXJtX21hc2tlZCB8fCBhbHJtLT5lbmFibGVkKQogCQlwY2Y1MDYzM19pcnFfdW5tYXNrKHJ0Yy0+cGNmLCBQQ0Y1MDYzM19JUlFfQUxBUk0pOworCXJ0Yy0+YWxhcm1fZW5hYmxlZCA9IGFscm0tPmVuYWJsZWQ7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhZDE2NDA1Li40MjNjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtOTYsNyArOTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKIHsKLQlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7CisJcmV0dXJuICEhKHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2MzAyMF9jaGlwX29wcyB2MzAyMF9tbWlvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCAyYzgzOWQwLi5mYWRkZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yMDksMTkgKzIwOSwxOCBAQAogCiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaXJxX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGZyZXEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1NjQgY291bnQ7CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoZnJlcSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWNvdW50ID0gUlRDX0ZSRVFVRU5DWTsKIAlkb19kaXYoY291bnQsIGZyZXEpOwogCi0JcGVyaW9kaWNfY291bnQgPSBjb3VudDsKLQogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKwlwZXJpb2RpY19jb3VudCA9IGNvdW50OworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBwZXJpb2RpY19jb3VudCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIHBlcmlvZGljX2NvdW50ID4+IDE2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKaW5kZXggYTRmNjhlNS4uYjQ0NDYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwpAQCAtMjYsNyArMjYsNiBAQAogc3RhdGljIGludCBzY2xwX2FzeW5jX3NlbmRfd2FpdChjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY2FsbGhvbWVfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NscF9hc3luY19sb2NrKTsKLXN0YXRpYyBjaGFyIG5vZGVuYW1lWzY0XTsKICNkZWZpbmUgU0NMUF9OT1JNQUxfV1JJVEUJMHgwMAogCiBzdHJ1Y3QgYXN5bmNfZXZidWYgewpAQCAtNTIsOSArNTEsMTAgQEAKIHN0YXRpYyBpbnQgY2FsbF9ob21lX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0JCXN0cm5jYXQoZGF0YSwgbm9kZW5hbWUsIHN0cmxlbihub2RlbmFtZSkpOwotCQlzY2xwX2FzeW5jX3NlbmRfd2FpdChkYXRhKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cm5jYXQoZGF0YSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQlzaXplb2YoaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lKSk7CisJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7CisJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhbGxfaG9tZV9wYW5pY19uYiA9IHsKQEAgLTY4LDE1ICs2OCwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBsZW4sIHJjOwotCWNoYXIgYnVmWzJdOworCWNoYXIgYnVmWzNdOwogCi0JaWYgKCEqY291bnQgfCAoKnBwb3MgJiYgIXdyaXRlKSkgeworCWlmICghKmNvdW50IHx8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CiAJCSpjb3VudCA9IDA7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdyaXRlKSB7Ci0JCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKLQkJYnVmW2xlbl0gPSAnXDAnOworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwogCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAocmMgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTcxLDM5ICsxNzAsMjkgQEAKIAlyYyA9IHNjbHBfcmVnaXN0ZXIoJnNjbHBfYXN5bmNfcmVnaXN0ZXIpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCWNhbGxob21lX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoa2Vybl9kaXJfdGFibGUpOwotCWlmICghY2FsbGhvbWVfc3lzY3RsX2hlYWRlcikgewotCQlyYyA9IC1FTk9NRU07CisJcmMgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIShzY2xwX2FzeW5jX3JlZ2lzdGVyLnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfQVNZTkNfTUFTSykpCiAJCWdvdG8gb3V0X3NjbHA7Ci0JfQotCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkgewotCQlyYyA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dF9zY2xwOwotCX0KIAlyYyA9IC1FTk9NRU07CisJY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7CisJaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKQorCQlnb3RvIG91dF9zY2xwOwogCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NscF9yZXEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcXVlc3QpCi0JCWdvdG8gb3V0X3N5czsKIAlzY2NiID0gKHN0cnVjdCBzY2xwX2FzeW5jX3NjY2IgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXNjY2IpCisJaWYgKCFyZXF1ZXN0IHx8ICFzY2NiKQogCQlnb3RvIG91dF9tZW07Ci0JcmMgPSAgYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAotCQkJCQkgICAgICZjYWxsX2hvbWVfcGFuaWNfbmIpOwotCWlmIChyYykKLQkJZ290byBvdXRfbWVtOwotCi0Jc3RybmNweShub2RlbmFtZSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLCA2NCk7Ci0JcmV0dXJuIDA7Ci0KKwlyYyA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkJICAgICZjYWxsX2hvbWVfcGFuaWNfbmIpOworCWlmICghcmMpCisJCWdvdG8gb3V0Owogb3V0X21lbToKIAlrZnJlZShyZXF1ZXN0KTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNjY2IpOwotb3V0X3N5czoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKTsKIG91dF9zY2xwOgogCXNjbHBfdW5yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CitvdXQ6CiAJcmV0dXJuIHJjOwotCiB9CiBtb2R1bGVfaW5pdChzY2xwX2FzeW5jX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggMTAyMDAwZC4uMzAxMjM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtMTU4LDcgKzE1OCwxMiBAQAogCQlzbXNnX3BhdGgtPmZsYWdzID0gMDsKIAkJcmMgPSBpdWN2X3BhdGhfY29ubmVjdChzbXNnX3BhdGgsICZzbXNnX2hhbmRsZXIsICIqTVNHICAgICIsCiAJCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlwcmludGsoS0VSTl9FUlIgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNlbmRpZgorCQljcGNtZCgiU0VUIFNNU0cgSVVDViIsIE5VTEwsIDAsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDBmNzlmM2EuLjI4ODllNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtMTI4LDEyICsxMjgsMTMgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX3NldHVwKGNoYXIgKmRldnN0cikKIHsKIAljaGFyICp0b2tlbjsKLQljaGFyICpzdHI7CisJY2hhciAqc3RyLCAqc3RyX3NhdmVkOwogCWNoYXIgYnVzaWRbWkZDUF9CVVNfSURfU0laRV07CiAJdTY0IHd3cG4sIGx1bjsKIAogCS8qIGR1cGxpY2F0ZSBkZXZzdHIgYW5kIGtlZXAgdGhlIG9yaWdpbmFsIGZvciBzeXNmcyBwcmVzZW50YXRpb24qLwotCXN0ciA9IGttYWxsb2Moc3RybGVuKGRldnN0cikgKyAxLCBHRlBfS0VSTkVMKTsKKwlzdHJfc2F2ZWQgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyID0gc3RyX3NhdmVkOwogCWlmICghc3RyKQogCQlyZXR1cm47CiAKQEAgLTE1MiwxMiArMTUzLDEyIEBACiAJaWYgKCF0b2tlbiB8fCBzdHJpY3Rfc3RydG91bGwodG9rZW4sIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmx1bikpCiAJCWdvdG8gZXJyX291dDsKIAotCWtmcmVlKHN0cik7CisJa2ZyZWUoc3RyX3NhdmVkKTsKIAl6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShidXNpZCwgd3dwbiwgbHVuKTsKIAlyZXR1cm47CiAKLSBlcnJfb3V0OgotCWtmcmVlKHN0cik7CitlcnJfb3V0OgorCWtmcmVlKHN0cl9zYXZlZCk7CiAJcHJfZXJyKCIlcyBpcyBub3QgYSB2YWxpZCBTQ1NJIGRldmljZVxuIiwgZGV2c3RyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggNzNkMzY2Yi4uZjczZTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04NTgsMTAgKzg1OCw3IEBACiAJCWlmIChmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpID09IEZDX1BPUlRUWVBFX1BUUCkKIAkJCXJldHVybiB6ZmNwX2VycF9vcGVuX3B0cF9wb3J0KGFjdCk7CiAJCWlmICghcG9ydC0+ZF9pZCkgewotCQkJemZjcF9wb3J0X2dldChwb3J0KTsKLQkJCWlmICghcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLAotCQkJCQkmcG9ydC0+Z2lkX3BuX3dvcmspKQotCQkJCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwpAQCAtODY5LDEyICs4NjYsMTEgQEAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9PUEVOSU5HOgogCQkvKiBEX0lEIG1pZ2h0IGhhdmUgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikgewotCQkJaWYgKHBvcnQtPmRfaWQpCi0JCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLQkJCWVsc2UgewotCQkJCWFjdC0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOwotCQkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CisJCQlpZiAoIXBvcnQtPmRfaWQpIHsKKwkJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKKwkJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJCX0KKwkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJCX0KIAkJaWYgKHBvcnQtPmRfaWQgJiYgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykpIHsKIAkJCXBvcnQtPmRfaWQgPSAwOwpAQCAtODg5LDE5ICs4ODUsMjEgQEAKIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWludCBwX3N0YXR1cyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCi0JaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKQorCWlmICgocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpICYmCisJICAgICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpCiAJCWdvdG8gY2xvc2VfaW5pdF9kb25lOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6CiAJCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xvc2UoZXJwX2FjdGlvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzoKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggNjI5ZWRlYy4uYjNmMjhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC05Niw2ICs5Niw3IEBACiBleHRlcm4gdm9pZCBfemZjcF9mY19zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggNzIyZjIyZC4uZGYyM2JjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMzYxLDYgKzM2MSwxNyBAQAogfQogCiAvKioKKyAqIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwIC0gdHJpZ2dlciB0aGUgZF9pZCBsb29rdXAgdXNpbmcgYSBHSURfUE4gcmVxdWVzdAorICogQHBvcnQ6IFRoZSB6ZmNwX3BvcnQgdG8gbG9va3VwIHRoZSBkX2lkIGZvci4KKyAqLwordm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5naWRfcG5fd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKKy8qKgogICogemZjcF9mY19wbG9naV9ldmFsdWF0ZSAtIGV2YWx1YXRlIFBMT0dJIHBsYXlsb2FkCiAgKiBAcG9ydDogemZjcF9wb3J0IHN0cnVjdHVyZQogICogQHBsb2dpOiBwbG9naSBwYXlsb2FkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCAzOGE3ZTRhLi40ZTQxYmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJLyogY29tbW9uIHNldHRpbmdzIGZvciBjdC9ncyBhbmQgZWxzIHJlcXVlc3RzICovCiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gMiAqIFJfQV9UT1Y7Ci0JemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAyICogUl9BX1RPViArIDEwKTsKKwl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsICgyICogUl9BX1RPViArIDEwKSAqIEhaKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ3NSw5ICsxNDc1LDE2IEBACiAJCXBsb2dpID0gKHN0cnVjdCBmc2ZfcGxvZ2kgKikgcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHM7CiAJCWlmIChyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmVsczFfbGVuZ3RoID49CiAJCSAgICBGU0ZfUExPR0lfTUlOX0xFTikgewotCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikKKwkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pIHsKIAkJCQlwb3J0LT5kX2lkID0gMDsKLQkJCWVsc2UgeworCQkJCWRldl93YXJuKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkJCSAiQSBwb3J0IG9wZW5lZCB3aXRoIFdXUE4gMHglMDE2THggIgorCQkJCQkgInJldHVybmVkIGRhdGEgdGhhdCBpZGVudGlmaWVzIGl0IGFzICIKKwkJCQkJICJXV1BOIDB4JTAxNkx4XG4iLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+d3dwbiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgcGxvZ2ktPnNlcnZfcGFyYW0ud3dwbik7CisJCQl9IGVsc2UgewogCQkJCXBvcnQtPnd3bm4gPSBwbG9naS0+c2Vydl9wYXJhbS53d25uOwogCQkJCXpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUocG9ydCwgcGxvZ2kpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDA3OWE4Y2YuLmQzMTAwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogCiAJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgInN5dWFzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOworCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggYjZhZjYzYy4uNDk2NzY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC0xOTE4LDYgKzE5MTgsMTAgQEAKIAkJfQogCQlzaXplID0gc2l6ZT4+MTY7CiAJCXNpemUgKj0gNDsKKwkJaWYgKHNpemUgPiBNQVhfTUVTU0FHRV9TSVpFKSB7CisJCQlyY29kZSA9IC1FSU5WQUw7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KIAkJLyogQ29weSBpbiB0aGUgdXNlcidzIEkyTyBjb21tYW5kICovCiAJCWlmIChjb3B5X2Zyb21fdXNlciAobXNnLCB1c2VyX21zZywgc2l6ZSkpIHsKIAkJCXJjb2RlID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBjNDQ3ODM4Li4wNTQ3YTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIG91dF9kZXZpY2VfZGVzdHJveToKIAlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiBvdXQ6CiAJaWYgKGRpc3BsYXlfZmFpbHVyZV9tc2cpCkBAIC05NTcsNiArOTU4LDcgQEAKIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCiAJCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IGZkZTU0NTMuLjVjN2ViNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODY0LDEwICs4NjQsNiBAQAogCQlnb3RvIGNsZWFuX2RldmljZTsKIAl9CiAKLQkvKiB0YWtlIGEgcmVmZXJlbmNlIGZvciB0aGUgc2Rldl9kZXY7IHRoaXMgaXMKLQkgKiByZWxlYXNlZCBieSB0aGUgc2Rldl9jbGFzcyAucmVsZWFzZSAqLwotCWdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKLQogCS8qIGNyZWF0ZSBxdWV1ZSBmaWxlcywgd2hpY2ggbWF5IGJlIHdyaXRhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGhvc3QgKi8KIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPmNoYW5nZV9xdWV1ZV9kZXB0aCkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX2RlcHRoX3J3KTsKQEAgLTkxNyw2ICs5MTMsNyBAQAogCiAJZGV2aWNlX2RlbCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMDY1LDcgKzEwNjIsNyBAQAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJnNkZXYtPnNkZXZfZGV2KTsKLQlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSAmc2Rldi0+c2Rldl9nZW5kZXY7CisJc2Rldi0+c2Rldl9kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPnNkZXZfZGV2LmNsYXNzID0gJnNkZXZfY2xhc3M7CiAJZGV2X3NldF9uYW1lKCZzZGV2LT5zZGV2X2RldiwgIiVkOiVkOiVkOiVkIiwKIAkJICAgICBzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBiMWFlNzc0Li43MzdiNGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0xMDg5LDcgKzEwODksNyBAQAogCWlmICghdXAtPnBvcnQuaW9iYXNlICYmICF1cC0+cG9ydC5tYXBiYXNlICYmICF1cC0+cG9ydC5tZW1iYXNlKQogCQlyZXR1cm47CiAKLQlERUJVR19BVVRPQ09ORigidHR5UyVkOiBhdXRvY29uZiAoMHglMDR4LCAweCVwKTogIiwKKwlERUJVR19BVVRPQ09ORigidHR5UyVkOiBhdXRvY29uZiAoMHglMDRseCwgMHglcCk6ICIsCiAJCSAgICAgICBzZXJpYWxfaW5kZXgoJnVwLT5wb3J0KSwgdXAtPnBvcnQuaW9iYXNlLCB1cC0+cG9ydC5tZW1iYXNlKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCBlNzEwOGU3Li5iMjhhZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTE1NjEsMTEgKzE1NjEsMTYgQEAKIAlwYm5fZXhhcl9YUjE3QzE1MiwKIAlwYm5fZXhhcl9YUjE3QzE1NCwKIAlwYm5fZXhhcl9YUjE3QzE1OCwKKwlwYm5fZXhhcl9pYm1fc2F0dXJuLAogCXBibl9wYXNlbWlfMTY4Mk0sCiAJcGJuX25pODQzMF8yLAogCXBibl9uaTg0MzBfNCwKIAlwYm5fbmk4NDMwXzgsCiAJcGJuX25pODQzMF8xNiwKKwlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV84XzM5MDYyNTAsCiB9OwogCiAvKgpAQCAtMjE0Niw2ICsyMTUxLDEzIEBACiAJCS5iYXNlX2JhdWQJPSA5MjE2MDAsCiAJCS51YXJ0X29mZnNldAk9IDB4MjAwLAogCX0sCisJW3Bibl9leGFyX2libV9zYXR1cm5dID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwl9LAorCiAJLyoKIAkgKiBQQSBTZW1pIFBXUmZpY2llbnQgUEE2VC0xNjgyTSBvbi1jaGlwIFVBUlQKIAkgKi8KQEAgLTIxODUsNiArMjE5NywzNyBAQAogCQkudWFydF9vZmZzZXQJPSAweDEwLAogCQkuZmlyc3Rfb2Zmc2V0CT0gMHg4MDAsCiAJfSwKKwkvKgorCSAqIEFEREktREFUQSBHbWJIIFBDSS1FeHByZXNzIGNvbW11bmljYXRpb24gY2FyZHMgPGluZm9AYWRkaS1kYXRhLmNvbT4KKwkgKi8KKwlbcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDIsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc29mdG1vZGVtX2JsYWNrbGlzdFtdID0gewpAQCAtMjM0MCw3ICsyMzgzLDcgQEAKIAkJCWJyZWFrOwogCiAjaWZkZWYgU0VSSUFMX0RFQlVHX1BDSQotCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dXAgUENJIHBvcnQ6IHBvcnQgJXgsIGlycSAlZCwgdHlwZSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICVseCwgaXJxICVkLCB0eXBlICVkXG4iLAogCQkgICAgICAgc2VyaWFsX3BvcnQuaW9iYXNlLCBzZXJpYWxfcG9ydC5pcnEsIHNlcmlhbF9wb3J0LmlvdHlwZSk7CiAjZW5kaWYKIApAQCAtMjY0OSw2ICsyNjkyLDkgQEAKIAkJUENJX1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0gsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzhfNDg1LCAwLCAwLAogCQlwYm5fYjBfOF8xODQzMjAwXzIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9FWEFSLCBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIsCisJCVBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JULAorCQkwLCAwLCBwYm5fZXhhcl9pYm1fc2F0dXJuIH0sCiAKIAl7CVBDSV9WRU5ET1JfSURfU0VBTEVWRUwsIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVTUzMCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKQEAgLTMwOTMsNiArMzEzOSwxMiBAQAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJCXBibl9iMF9idF8yXzExNTIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19BLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCiAJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJCXBibl9iMF9idF80XzQ2MDgwMCB9LApAQCAtMzU1Niw2ICszNjA4LDM4IEBACiAJCTAsCiAJCXBibl9iMF84XzExNTIwMCB9LAogCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzUwMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NDIwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTczMDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzgwMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwIH0sCisKIAl7CVBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1LAogCQlQQ0lfVkVORE9SX0lEX0lCTSwgMHgwMjk5LAogCQkwLCAwLCBwYm5fYjBfYnRfMl8xMTUyMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggMzU1MWM1Yy4uOWQ5NDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKEFUTUVMX1NFUklBTF9SSU5HU0laRSkpOworCUJVSUxEX0JVR19PTihBVE1FTF9TRVJJQUxfUklOR1NJWkUgJiAoQVRNRUxfU0VSSUFMX1JJTkdTSVpFIC0gMSkpOwogCiAJcG9ydCA9ICZhdG1lbF9wb3J0c1twZGV2LT5pZF07CiAJcG9ydC0+YmFja3VwX2ltciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGQ3YmNkMDcuLjdjZTllOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKHNlci0+aXJxICE9IHBvcnQtPmlycSkgfHwKLQkgICAgKHNlci0+aW9fdHlwZSAhPSBTRVJJQUxfSU9fTUVNKSB8fAorCSAgICAoc2VyLT5pb190eXBlICE9IFVQSU9fTUVNKSB8fAogCSAgICAoc2VyLT5iYXVkX2Jhc2UgIT0gcG9ydC0+dWFydGNsaykgIHx8CiAJICAgIChzZXItPmlvbWVtX2Jhc2UgIT0gKHZvaWQgKilwb3J0LT5tYXBiYXNlKSB8fAogCSAgICAoc2VyLT5odWI2ICE9IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBmZjQ2MTdlLi43Yzc5MTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtODc5LDEwICs4NzksMTAgQEAKIAlQQ01DSUFfTUZDX0RFVklDRV9DSVNfTUFORl9DQVJEKDEsIDB4MDE3NSwgMHgwMDAwLCAiY2lzL0RQODM5MDMuY2lzIiksCiAJUENNQ0lBX01GQ19ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgxLCAweDAxMDEsIDB4MDAzNSwgImNpcy8zQ1hFTTU1Ni5jaXMiKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9DSVNfTUFORl9DQVJEKDEsIDB4MDEwMSwgMHgwMDNkLCAiY2lzLzNDWEVNNTU2LmNpcyIpLAotCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiU2llcnJhIFdpcmVsZXNzIiwgIkFDODUwIiwgMHhkODVmNjIwNiwgMHg0MmEyYzAxOCwgIlNXXzh4eF9TRVIuY2lzIiksICAvKiBTaWVycmEgV2lyZWxlc3MgQUM4NTAgM0cgTmV0d29yayBBZGFwdGVyIFIxICovCi0JUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDE5MiwgMHgwNzEwLCAiU1dfN3h4X1NFUi5jaXMiKSwJLyogU2llcnJhIFdpcmVsZXNzIEFDNzEwL0FDNzUwIEdQUlMgTmV0d29yayBBZGFwdGVyIFIxICovCi0JUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDE5MiwgMHhhNTU1LCAiU1dfNTU1X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBBaXJjYXJkIDU1NSBDRE1BIDF4cnR0IE1vZGVtIC0tIHByZSB1cGRhdGUgKi8KLQlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTNmLCAweGE1NTUsICJTV181NTVfU0VSLmNpcyIpLCAgLyogU2llcnJhIEFpcmNhcmQgNTU1IENETUEgMXhydHQgTW9kZW0gLS0gcG9zdCB1cGRhdGUgKi8KKwlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlNpZXJyYSBXaXJlbGVzcyIsICJBQzg1MCIsIDB4ZDg1ZjYyMDYsIDB4NDJhMmMwMTgsICJjaXMvU1dfOHh4X1NFUi5jaXMiKSwgLyogU2llcnJhIFdpcmVsZXNzIEFDODUwIDNHIE5ldHdvcmsgQWRhcHRlciBSMSAqLworCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiU2llcnJhIFdpcmVsZXNzIiwgIkFDNzEwL0FDNzUwIiwgMHhkODVmNjIwNiwgMHg3NjFiMTFlMCwgImNpcy9TV183eHhfU0VSLmNpcyIpLCAgLyogU2llcnJhIFdpcmVsZXNzIEFDNzEwL0FDNzUwIEdQUlMgTmV0d29yayBBZGFwdGVyIFIxICovCisJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDE5MiwgMHhhNTU1LCAiY2lzL1NXXzU1NV9TRVIuY2lzIiksICAvKiBTaWVycmEgQWlyY2FyZCA1NTUgQ0RNQSAxeHJ0dCBNb2RlbSAtLSBwcmUgdXBkYXRlICovCisJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDEzZiwgMHhhNTU1LCAiY2lzL1NXXzU1NV9TRVIuY2lzIiksICAvKiBTaWVycmEgQWlyY2FyZCA1NTUgQ0RNQSAxeHJ0dCBNb2RlbSAtLSBwb3N0IHVwZGF0ZSAqLwogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiTXVsdGlUZWNoIiwgIlBDTUNJQSA1NksgRGF0YUZheCIsIDB4ODQyMDQ3ZWUsIDB4YzJlZmNmMDMsICJjaXMvTVQ1NjM0WkxYLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiQURWQU5URUNIIiwgIkNPTXBhZC0zMi84NUItMiIsIDB4OTY5MTNhODUsIDB4MjdhYjU0MzcsICJjaXMvQ09NcGFkMi5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTQiLCAweDk2OTEzYTg1LCAweGNlYzhmMTAyLCAiY2lzL0NPTXBhZDQuY2lzIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDg1MTE5ZmIuLjY0OThiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMTQzLDcgKzExNDMsNyBAQAogCXdoaWxlICgoc2NpX2luKHBvcnQsIFNDeFNSKSAmIGJpdHMpICE9IGJpdHMpCiAJCWNwdV9yZWxheCgpOwogCi0JaWYgKHNjaV9wb3J0LT5kaXNhYmxlKTsKKwlpZiAoc2NpX3BvcnQtPmRpc2FibGUpCiAJCXNjaV9wb3J0LT5kaXNhYmxlKHBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IDdkZjNiYTQuLmQyMWIzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC05Myw4ICs5Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IDc0NzU3MTEuLjhjYmYxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDYgQEAKIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCQkrPSBzdGxjNDV4eC8KIG9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KIG9iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwppbmRleCAyNDcxOTQ5Li5lYjY3NTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAKIGNvbmZpZyBBTkRST0lECiAJYm9vbCAiQW5kcm9pZCBEcml2ZXJzIgorCWRlcGVuZHMgb24gQlJPS0VOCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHZhcmlvdXMgZHJpdmVycyBuZWVkZWQgb24gdGhlIEFuZHJvaWQgcGxhdGZvcm0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMKaW5kZXggOTRjNWQyNy4uY2RhMjZiYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwppbmRleCAyY2RhN2FkLi44MGUxOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCkBAIC01MSw2ICs1MSw3IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAogI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCmluZGV4IGUzZmZiMDYuLjc1M2VlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogLyogI2RlZmluZSBERUJVR19TVEFUVVNfQiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICI4MjU1LmgiCiAjaW5jbHVkZSAibWl0ZS5oIgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDUyYjJlY2EuLmQ1NDQ2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfRkxBR1MgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJtaXRlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAppbmRleCA2Mjk0ZDM4Li4yYzNkNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiBleHRlcm4gaW5saW5lIHZvaWQgYWRkXzEwYml0KHUzMiAqdiwgaW50IG4pCiB7Ci0JKnYgPSBJTkRFWDEwKCp2ICsgbik7CisJKnYgPSBJTkRFWDEwKCp2ICsgbikgfCAoKnYgJiBFVF9ETUExMF9XUkFQKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IDhmMmU5MWYuLjEwZTIxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMTE3NywxMiArMTE3NywyMCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBidW1wX2Zicih1MzIgKmZiciwgdTMyIGxpbWl0KQogewotCXUzMiB2ID0gKmZicjsKLQlhZGRfMTBiaXQoJnYsIDEpOwotCWlmICh2ID4gbGltaXQpCi0JCXYgPSAoKmZiciAmIH5FVF9ETUExMF9NQVNLKSBeIEVUX0RNQTEwX1dSQVA7Ci0JKmZiciA9IHY7Ci0JcmV0dXJuIHY7CisgICAgICAgIHUzMiB2ID0gKmZicjsKKyAgICAgICAgdisrOworICAgICAgICAvKiBUaGlzIHdvcmtzIGZvciBhbGwgY2FzZXMgd2hlcmUgbGltaXQgPCAxMDI0LiBUaGUgMTAyMyBjYXNlCisgICAgICAgICAgIHdvcmtzIGJlY2F1c2UgMTAyMysrIGlzIDEwMjQgd2hpY2ggbWVhbnMgdGhlIGlmIGNvbmRpdGlvbiBpcyBub3QKKyAgICAgICAgICAgdGFrZW4gYnV0IHRoZSBjYXJyeSBvZiB0aGUgYml0IGludG8gdGhlIHdyYXAgYml0IHRvZ2dsZXMgdGhlIHdyYXAKKyAgICAgICAgICAgdmFsdWUgY29ycmVjdGx5ICovCisgICAgICAgIGlmICgodiAmIEVUX0RNQTEwX01BU0spID4gbGltaXQpIHsKKyAgICAgICAgICAgICAgICB2ICY9IH5FVF9ETUExMF9NQVNLOworICAgICAgICAgICAgICAgIHYgXj0gRVRfRE1BMTBfV1JBUDsKKyAgICAgICAgfQorICAgICAgICAvKiBGb3IgdGhlIDEwMjMgY2FzZSAqLworICAgICAgICB2ICY9IChFVF9ETUExMF9NQVNLfEVUX0RNQTEwX1dSQVApOworICAgICAgICAqZmJyID0gdjsKKyAgICAgICAgcmV0dXJuIHY7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAppbmRleCBhODM5ZDhmLi5mYTk3M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBfQ0hBTk5FTF9NR01UX0hfCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiVm1idXNDaGFubmVsSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiVm1idXNQYWNrZXRGb3JtYXQuaCIKQEAgLTU0LDcgKzU1LDcgQEAKIAlDaGFubmVsTWVzc2FnZVZpZXdSYW5nZVJlbW92ZQkJPSAxOCwKICNlbmRpZgogCUNoYW5uZWxNZXNzYWdlQ291bnQKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiBzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciB7CiAJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBNZXNzYWdlVHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwppbmRleCAxNjEwYjg0Li5kMzg0YzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QsICZsaXN0SGVhZCk7CisJCWxpc3RfbW92ZV90YWlsKG5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QubmV4dCwgJmxpc3RIZWFkKTsKIAkJaWYgKCsrY291bnQgPT0gdm14ZmVycGFnZVBhY2tldC0+UmFuZ2VDb3VudCArIDEpCiAJCQlicmVhazsKIAl9CkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCQkvKiBSZXR1cm4gaXQgdG8gdGhlIGZyZWVsaXN0ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZsaXN0SGVhZCwKKwkJCWxpc3RfbW92ZV90YWlsKGxpc3RIZWFkLm5leHQsCiAJCQkJICAgICAgICZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywKQEAgLTEwODUsOCArMTA4NSw3IEBACiAJfQogCiAJLyogUmVtb3ZlIHRoZSAxc3QgcGFja2V0IHRvIHJlcHJlc2VudCB0aGUgeGZlciBwYWdlIHBhY2tldCBpdHNlbGYgKi8KLQl4ZmVycGFnZVBhY2tldCA9IGxpc3RfZW50cnkoJmxpc3RIZWFkLCBzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0LAotCQkJCSAgICBMaXN0RW50cnkpOworCXhmZXJwYWdlUGFja2V0ID0gKHN0cnVjdCB4ZmVycGFnZV9wYWNrZXQqKWxpc3RIZWFkLm5leHQ7CiAJbGlzdF9kZWwoJnhmZXJwYWdlUGFja2V0LT5MaXN0RW50cnkpOwogCiAJLyogVGhpcyBpcyBob3cgbXVjaCB3ZSBjYW4gc2F0aXNmeSAqLwpAQCAtMTEwMiw4ICsxMTAxLDcgQEAKIAogCS8qIEVhY2ggcmFuZ2UgcmVwcmVzZW50cyAxIFJORElTIHBrdCB0aGF0IGNvbnRhaW5zIDEgZXRoZXJuZXQgZnJhbWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGNvdW50IC0gMSk7IGkrKykgewotCQluZXR2c2NQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IGh2X25ldHZzY19wYWNrZXQsCi0JCQkJCSAgTGlzdEVudHJ5KTsKKwkJbmV0dnNjUGFja2V0ID0gKHN0cnVjdCBodl9uZXR2c2NfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCQlsaXN0X2RlbCgmbmV0dnNjUGFja2V0LT5MaXN0RW50cnkpOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIG5ldHZzYyBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KaW5kZXggNGQzOTBiMi4uZGJmYmRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KQEAgLTEsMTEgKzEsMTcgQEAKIFRPRE86CiAJLSBmaXggcmVtYWluaW5nIGNoZWNrcGF0Y2ggd2FybmluZ3MgYW5kIGVycm9ycworCS0gdXNlIG9mIC8qKiB3aGVuIGl0IGlzIG5vdCBhIGtlcm5lbGRvYyBoZWFkZXIKIAktIHJlbW92ZSBSaW5nQnVmZmVyLmMgdG8gdXMgaW4ta2VybmVsIHJpbmdidWZmZXIgZnVuY3Rpb25zIGluc3RlYWQuCiAJLSBhdWRpdCB0aGUgdm1idXMgdG8gdmVyaWZ5IGl0IGlzIHdvcmtpbmcgcHJvcGVybHkgd2l0aCB0aGUKIAkgIGRyaXZlciBtb2RlbAorCS0gY29udmVydCB2bWJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzCisgICAgICAgICAgdG8gY29uc3RhbnQsIGEuay5hIHZtYnVzX29wcwogCS0gc2VlIGlmIHRoZSB2bWJ1cyBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIG90aGVyIHZpcnR1YWwgYnVzc2VzCiAJICBpbiB0aGUga2VybmVsCiAJLSBhdWRpdCB0aGUgbmV0d29yayBkcml2ZXIKKwkgIC0gdXNlIGV4aXN0aW5nIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0IGluIG5ldHdvcmsgZGV2aWNlCisJICAtIGNoZWNraW5nIGZvciBjYXJyaWVyIGluc2lkZSBvcGVuIGlzIHdyb25nLCBuZXR3b3JrIGRldmljZSBBUEkKKyAgICAgICAgICAgIGNvbmZ1c2lvbj8/CiAJLSBhdWRpdCB0aGUgYmxvY2sgZHJpdmVyCiAJLSBhdWRpdCB0aGUgc2NzaSBkcml2ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCmluZGV4IDhmZTU0M2IuLjNhNDc5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCmluZGV4IDk1MDQ2MDQuLmNlMDY0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgX09TRF9IXwogI2RlZmluZSBfT1NEX0hfCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyogRGVmaW5lcyAqLwogI2RlZmluZSBBTElHTl9VUCh2YWx1ZSwgYWxpZ24pCSgoKHZhbHVlKSAmIChhbGlnbi0xKSkgPwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IDU4MjMxOGYuLjg5NGVlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTUwNywxMiArNTA3LDEyIEBACiAKIAljaGlsZF9kZXZpY2Vfb2JqID0gJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9vYmo7CiAJY2hpbGRfZGV2aWNlX29iai0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VUeXBlLCAmdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgJmluc3RhbmNlLAorCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisJbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgaW5zdGFuY2UsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCi0JbWVtY3B5KCZjaGlsZF9kZXZpY2VfY3R4LT5jbGFzc19pZCwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCAmaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCBpbnN0YW5jZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCkBAIC01MzcsMTggKzUzNyw3IEBACiAJRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCiAJCSAgIGNoaWxkX2RldmljZV9jdHgpOwogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgcmVnaXN0ZXJlZCBhbHJlYWR5ICovCi0JaWYgKHN0cmxlbihkZXZfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKSkgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKLQkJCSAgICJjaGlsZCBkZXZpY2UgKCVwKSBhbHJlYWR5IHJlZ2lzdGVyZWQgLSBidXNpZCAlcyIsCi0JCQkgICBjaGlsZF9kZXZpY2VfY3R4LAotCQkJICAgZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpOwotCi0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0JLyogU2V0IHRoZSBkZXZpY2UgYnVzIGlkLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3Rlcigpd2lsbCBmYWlsLiAqLworCS8qIFNldCB0aGUgZGV2aWNlIG5hbWUuIE90aGVyd2lzZSwgZGV2aWNlX3JlZ2lzdGVyKCkgd2lsbCBmYWlsLiAqLwogCWRldl9zZXRfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlLCAidm1idXNfMF8lZCIsCiAJCSAgICAgYXRvbWljX2luY19yZXR1cm4oJmRldmljZV9udW0pKTsKIApAQCAtNTczLDcgKzU2Miw2IEBACiAJCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyZWQiLAogCQkJICAgICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpOwogCi1DbGVhbnVwOgogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjIzLDggKzYxMSw2IEBACiBzdGF0aWMgaW50IHZtYnVzX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKLQlpbnQgaSA9IDA7Ci0JaW50IGxlbiA9IDA7CiAJaW50IHJldDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNjQ0LDggKzYzMCw2IEBACiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE0XSwKIAkJICAgIGRldmljZV9jdHgtPmNsYXNzX2lkLmRhdGFbMTVdKTsKIAotCWVudi0+ZW52cF9pZHggPSBpOwotCWVudi0+YnVmbGVuID0gbGVuOwogCXJldCA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIlZNQlVTX0RFVklDRV9DTEFTU19HVUlEPXsiCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKIAkJCSAgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4fSIsCkBAIC02OTEsOCArNjc1LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZW52LT5lbnZwW2Vudi0+ZW52cF9pZHhdID0gTlVMTDsKLQogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCAxZmExOGYyLi43NjhmNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgImlpby5oIgogI2luY2x1ZGUgInRyaWdnZXJfY29uc3VtZXIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCmluZGV4IGQ1NDlkMDguLmY2Y2MyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBPVFVTCiAJdHJpc3RhdGUgIkF0aGVyb3MgT1RVUyA4MDIuMTFuIFVTQiB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOICYmIE1BQzgwMjExCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiBVU0IgaGFyZHdhcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGRkN2QzZmQuLjRjZTM5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0yMDcxLDExICsyMDcxLDE1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5cGFkX2VuYWJsZWQgJiYga2V5cGFkX2luaXRpYWxpemVkKQorCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJa2V5cGFkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKLQlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKQorCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJbGNkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKIAlwYXJwb3J0X3JlbGVhc2UocHBydCk7CiAJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKQEAgLTIyMTEsMTMgKzIyMTUsMTYgQEAKIAkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKIAogCWlmIChwcHJ0ICE9IE5VTEwpIHsKLQkJaWYgKGtleXBhZF9lbmFibGVkKQorCQlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKIAkJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCQl9CiAKIAkJaWYgKGxjZF9lbmFibGVkKSB7CiAJCQlwYW5lbF9sY2RfcHJpbnQoIlx4MGNMQ0QgZHJpdmVyICIgUEFORUxfVkVSU0lPTgogCQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKIAkJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOwogCQl9CiAKIAkJLyogVE9ETzogZnJlZSBhbGwgaW5wdXQgc2lnbmFscyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCmluZGV4IDBkMTExZGQuLjJlYjhlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+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+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwppbmRleCA3NzBmNDEyLi5iOGM5NWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxOTJTVQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJTVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggZDc2YTU0ZC4uNTIxZTdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDEwICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+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+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCmluZGV4IDdmOTZiY2EuLjA1MTg2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKQEAgLTEzMzIsNyArMTMzMiw2IEBACiAgICAgICAgIGZyZWVfbmV0ZGV2KHBEZXZpY2UtPmRldik7CiAgICAgfQogCi0Ja2ZyZWUocERldmljZSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2Rpc2Nvbm5lY3QzLi4gXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKaW5kZXggOTQwNDYwYy4uMTMyNjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFczNVVORAogCXRyaXN0YXRlICJJUzg5QzM1IFdMQU4gVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTiAmJiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgV2luYm9uZCBXSUZJIGNhcmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwppbmRleCA5OTU5YjY1Li5mNDQyOTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFJJU00yX1VTQgogCXRyaXN0YXRlICJQcmlzbTIuNS8zIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXTEFOXzgwMjExICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKKwlkZXBlbmRzIG9uIFdMQU4gJiYgVVNCICYmIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHdsYW4tbmcgcHJpc20gMi41LzMgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCmluZGV4IDRlODNjMjkuLjZmOGQ4Zjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwpAQCAtMTgwLDE1ICsxODAsMTUgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgVEhFUk1BTF9UUklQX0NSSVRJQ0FMOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJjcml0aWNhbCIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJjcml0aWNhbFxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfSE9UOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJob3QiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90XG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9QQVNTSVZFOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJwYXNzaXZlIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmVcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX0FDVElWRToKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiYWN0aXZlIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZVxuIik7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93biIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMzMzNTEzMS4uYTE4ZTNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTIyMyw2ICsyMjMsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfUFhBMjVYCiAJYm9vbGVhbiAiUFhBIDI1eCBvciBJWFAgNHh4IgogCWRlcGVuZHMgb24gKEFSQ0hfUFhBICYmIFBYQTI1eCkgfHwgQVJDSF9JWFA0WFgKKwlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgICBJbnRlbCdzIFBYQSAyNXggc2VyaWVzIFhTY2FsZSBBUk0tNVRFIHByb2Nlc3NvcnMgaW5jbHVkZQogCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgVGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IGYzN2RlMjguLjE2N2NiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC02MSwxMSArNjEsNiBAQAogICogc2ltcGxlciwgTWljcm9zb2Z0IHB1c2hlcyB0aGVpciBvd24gYXBwcm9hY2g6IFJORElTLiAgVGhlIHB1Ymxpc2hlZAogICogUk5ESVMgc3BlY3MgYXJlIGFtYmlndW91cyBhbmQgYXBwZWFyIHRvIGJlIGluY29tcGxldGUsIGFuZCBhcmUgYWxzbwogICogbmVlZGxlc3NseSBjb21wbGV4LiAgVGhleSBib3Jyb3cgbW9yZSBmcm9tIENEQyBBQ00gdGhhbiBDREMgRUNNLgotICoKLSAqIFdoaWxlIENEQyBFQ00sIENEQyBTdWJzZXQsIGFuZCBSTkRJUyBhcmUgZGVzaWduZWQgdG8gZXh0ZW5kIHRoZSBldGhlcm5ldAotICogaW50ZXJmYWNlIHRvIHRoZSB0YXJnZXQsIENEQyBFRU0gd2FzIGRlc2lnbmVkIHRvIHVzZSBldGhlcm5ldCBvdmVyIHRoZSBVU0IKLSAqIGxpbmsgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGFyZ2V0LiAgQ0RDIEVFTSBpcyBpbXBsZW1lbnRlZCBhcyBhbiBhbHRlcm5hdGl2ZQotICogdG8gdGhvc2Ugb3RoZXIgcHJvdG9jb2xzIHdoZW4gdGhhdCBjb21tdW5pY2F0aW9uIG1vZGVsIGlzIG1vcmUgYXBwcm9wcmlhdGUKICAqLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRXRoZXJuZXQgR2FkZ2V0IgpAQCAtMTU3LDggKzE1Miw4IEBACiAjZGVmaW5lIFJORElTX1BST0RVQ1RfTlVNCTB4YTRhMgkvKiBFdGhlcm5ldC9STkRJUyBHYWRnZXQgKi8KIAogLyogRm9yIEVFTSBnYWRnZXRzICovCi0jZGVmaW5lIEVFTV9WRU5ET1JfTlVNCTB4MDUyNQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCi0jZGVmaW5lIEVFTV9QUk9EVUNUX05VTQkweGE0YTEJLyogSU5WQUxJRCAtIE5FRURTIFRPIEJFIEFMTE9DQVRFRCAqLworI2RlZmluZSBFRU1fVkVORE9SX05VTQkJMHgxZDZiCS8qIExpbnV4IEZvdW5kYXRpb24gKi8KKyNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCQkweDAxMDIJLyogRUVNIEdhZGdldCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggNDJhNzRiOC4uZmEzZDE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtMjEzOSw3ICsyMTM5LDcgQEAKIHN0YXRpYyB2b2lkIGZzbF91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJY29tcGxldGUodWRjX2NvbnRyb2xsZXItPmRvbmUpOwotCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5wYXJlbnQsIHVkY19jb250cm9sbGVyLT5lcF9xaF9zaXplLAogCQkJdWRjX2NvbnRyb2xsZXItPmVwX3FoLCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfZG1hKTsKIAlrZnJlZSh1ZGNfY29udHJvbGxlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDNlZmE1OWIuLmIyNWNkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC0xNDAwLDYgKzE0MDAsMTAgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCXBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7CisJaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKKwkJcGVyaW9kIDw8PSAzOworCiAJbm93ID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOwogCiAJLyogd2hlbidzIHRoZSBsYXN0IHVmcmFtZSB0aGlzIHVyYiBjb3VsZCBzdGFydD8gKi8KQEAgLTE0MTcsOCArMTQyMSw4IEBACiAKIAkJLyogRmVsbCBiZWhpbmQgKGJ5IHVwIHRvIHR3aWNlIHRoZSBzbG9wIGFtb3VudCk/ICovCiAJCWlmIChzdGFydCA+PSBtYXggLSAyICogOCAqIFNDSEVEVUxFX1NMT1ApCi0JCQlzdGFydCArPSBzdHJlYW0tPmludGVydmFsICogRElWX1JPVU5EX1VQKAotCQkJCQltYXggLSBzdGFydCwgc3RyZWFtLT5pbnRlcnZhbCkgLSBtb2Q7CisJCQlzdGFydCArPSBwZXJpb2QgKiBESVZfUk9VTkRfVVAoCisJCQkJCW1heCAtIHN0YXJ0LCBwZXJpb2QpIC0gbW9kOwogCiAJCS8qIFRyaWVkIHRvIHNjaGVkdWxlIHRvbyBmYXIgaW50byB0aGUgZnV0dXJlPyAqLwogCQlpZiAodW5saWtlbHkoKHN0YXJ0ICsgc2NoZWQtPnNwYW4pID49IG1heCkpIHsKQEAgLTE0NDEsMTAgKzE0NDUsNiBAQAogCiAJLyogTk9URTogIGFzc3VtZXMgVVJCX0lTT19BU0FQLCB0byBsaW1pdCBjb21wbGV4aXR5L2J1Z3MgKi8KIAotCXBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7Ci0JaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKLQkJcGVyaW9kIDw8PSAzOwotCiAJLyogZmluZCBhIHVmcmFtZSBzbG90IHdpdGggZW5vdWdoIGJhbmR3aWR0aCAqLwogCWZvciAoOyBzdGFydCA8IChzdHJlYW0tPm5leHRfdWZyYW1lICsgcGVyaW9kKTsgc3RhcnQrKykgewogCQlpbnQJCWVub3VnaF9zcGFjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IDc0OWI1MzcuLmUzM2QzNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtMTAwMywxOSArMTAwMywyMCBAQAogCWlmIChzeXNzdHMgPT0gU0UwKSB7CiAJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QVRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKIAkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgQVRUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7Ci0JCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiAoc3lzc3RzID09IEZTX0pTVFMpCisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKKwkJZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKKworCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKKwkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKKworCQlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIAl9CiAKLQlpZiAoc3lzc3RzID09IEZTX0pTVFMpCi0JCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCWVsc2UgaWYgKHN5c3N0cyA9PSBMU19KU1RTKQotCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKLQotCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwotCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7Ci0KLQlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCi0JCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOworCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KQEAgLTEwMjQsNiArMTAyNSw4IEBACiAJdTE2IHNwZWVkID0gZ2V0X3JoX3VzYl9zcGVlZChyOGE2NjU5NywgcG9ydCk7CiAJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CiAKKwlyaC0+cG9ydCAmPSB+KCgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKSB8CisJCSAgICAgICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpKTsKIAlpZiAoc3BlZWQgPT0gSFNNT0RFKQogCQlyaC0+cG9ydCB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCk7CiAJZWxzZSBpZiAoc3BlZWQgPT0gTFNNT0RFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCmluZGV4IGM2MzI0MzcuLjU2MmViYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKQEAgLTExNSw2ICsxMTUsMTAgQEAKIAkJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CiAJCQkvKiBVZywgYW4gZXJyb3IuICovCiAJCQlwcm9jZXNzX2hhbHRlZF9xdGQod2hjLCBxc2V0LCB0ZCk7CisJCQkvKiBBIGhhbHRlZCBxVEQgYWx3YXlzIHRyaWdnZXJzIGFuIHVwZGF0ZQorCQkJICAgYmVjYXVzZSB0aGUgcXNldCB3YXMgZWl0aGVyIHJlbW92ZWQgb3IKKwkJCSAgIHJlYWN0aXZhdGVkLiAqLworCQkJdXBkYXRlIHw9IFdIQ19VUERBVEVfVVBEQVRFRDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zMDUsNiArMzA5LDcgQEAKIAlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OwogCXN0cnVjdCB3aGNfcXNldCAqcXNldCA9IHd1cmItPnFzZXQ7CiAJc3RydWN0IHdoY19zdGQgKnN0ZCwgKnQ7CisJYm9vbCBoYXNfcXRkID0gZmFsc2U7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zMTUsMTcgKzMyMCwyMSBAQAogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKLQkJaWYgKHN0ZC0+dXJiID09IHVyYikKKwkJaWYgKHN0ZC0+dXJiID09IHVyYikgeworCQkJaWYgKHN0ZC0+cXRkKQorCQkJCWhhc19xdGQgPSB0cnVlOwogCQkJcXNldF9mcmVlX3N0ZCh3aGMsIHN0ZCk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlzdGQtPnF0ZCA9IE5VTEw7IC8qIHNvIHRoaXMgc3RkIGlzIHJlLWFkZGVkIHdoZW4gdGhlIHFzZXQgaXMgKi8KIAl9CiAKLQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKLQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7Ci0Jd3VyYi0+aXNfYXN5bmMgPSB0cnVlOwotCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOwotCisJaWYgKGhhc19xdGQpIHsKKwkJYXNsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSB0cnVlOworCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKKwl9IGVsc2UKKwkJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCBzdGF0dXMpOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKaW5kZXggYTllMDViYS4uMGRiM2ZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwpAQCAtMTIxLDYgKzEyMSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMzMyw2ICszMzcsNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM0MywxNyArMzQ4LDIyIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCXB6bF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IGZhbHNlOwotCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOwotCisJaWYgKGhhc19xdGQpIHsKKwkJcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7CisJCXVwZGF0ZV9wemxfaHdfdmlldyh3aGMpOworCQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA0M2MyMjcwLi5jZDQ0YzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zMTUsNiArMzE1LDkgQEAKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxNQkJCTB4NDUxNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE5CQkJMHg0NTE5CiAKKy8qIFRMQVlURUNIIFBST0RVQ1RTICovCisjZGVmaW5lIFRMQVlURUNIX1ZFTkRPUl9JRAkJCTB4MjBCOQorI2RlZmluZSBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMAkJCTB4MTY4MgogCiAvKiBUT1NISUJBIFBST0RVQ1RTICovCiAjZGVmaW5lIFRPU0hJQkFfVkVORE9SX0lECQkJMHgwOTMwCkBAIC0zMjgsNiArMzMxLDkgQEAKICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKICNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCiAKKy8qIEFpcnBsdXMgcHJvZHVjdHMgKi8KKyNkZWZpbmUgQUlSUExVU19WRU5ET1JfSUQJCQkweDEwMTEKKyNkZWZpbmUgQUlSUExVU19QUk9EVUNUX01DRDY1MAkJCTB4MzE5OAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LApAQCAtNTg5LDYgKzU5NSw4IEBACiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oQUxJTktfVkVORE9SX0lELCBBTElOS19QUk9EVUNUXzNHVSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9YMDYwUykgfSwKKwl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCisJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDQ1ODgzOTguLjUwMTkzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTI5Niw3ICsyOTYsNiBAQAogCWludCBkc3Jfc3RhdGU7CiAJaW50IGRjZF9zdGF0ZTsKIAlpbnQgcmlfc3RhdGU7Ci0KIAl1bnNpZ25lZCBpbnQgb3BlbmVkOjE7CiB9OwogCkBAIC0zMDYsNiArMzA1LDggQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAlpbnQgdmFsID0gMDsKKwlpbnQgZG9fc2VuZCA9IDA7CisJaW50IHJldHZhbDsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMyNCwxMCArMzI1LDcgQEAKIAkJICovCiAJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CiAJCQkvKiBzZW5kIGNvbnRyb2wgbWVzc2FnZSAqLwotCQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCWRvX3NlbmQgPSAxOwogCQl9CiAJfQogCkBAIC0zMzksMTIgKzMzNywxOCBAQAogCQkJaW50ZXJmYWNlID0gMTsKIAkJZWxzZSBpZiAocG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID09IDUpCiAJCQlpbnRlcmZhY2UgPSAyOwotCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJCWRvX3NlbmQgPSAxOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoIWRvX3NlbmQpCisJCXJldHVybiAwOworCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZXJyYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNzczLDggKzc3NywxMSBAQAogCiAJaWYgKHNlcmlhbC0+ZGV2KSB7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwkJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKKwkJfQogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKQEAgLTc4OCw4ICs3OTUsNiBAQAogCQkJc2llcnJhX3JlbGVhc2VfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2ldKTsKIAkJCXBvcnRkYXRhLT5pbl91cmJzW2ldID0gTlVMTDsKIAkJfQotCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCkBAIC04MjcsNiArODMyLDggQEAKIAlpZiAoZXJyKSB7CiAJCS8qIGdldCByaWQgb2YgZXZlcnl0aGluZyBhcyBpbiBjbG9zZSAqLwogCQlzaWVycmFfY2xvc2UocG9ydCk7CisJCS8qIHJlc3RvcmUgYmFsYW5jZSBmb3IgYXV0b3BtICovCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwpAQCAtOTE1LDcgKzkyMiw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCWludCBpLCBqOworCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC05MjMsOCArOTMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspCi0JCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOworCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCAzYTRmYjAyLi41ODlmNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkvKiBkZXZpY2Ugc3VwcG9ydHMgYW5kIG5lZWRzIGJpZ2dlciBzZW5zZSBidWZmZXIgKi8KIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKQogCQkJc2Vuc2Vfc2l6ZSA9IH4wOwotCitSZXRyeV9TZW5zZToKIAkJVVNfREVCVUdQKCJJc3N1aW5nIGF1dG8tUkVRVUVTVF9TRU5TRVxuIik7CiAKIAkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzZW5zZV9zaXplKTsKQEAgLTcyMCw2ICs3MjAsMjEgQEAKIAkJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQl9CisKKwkJLyogU29tZSBkZXZpY2VzIGNsYWltIHRvIHN1cHBvcnQgbGFyZ2VyIHNlbnNlIGJ1dCBmYWlsIHdoZW4KKwkJICogdHJ5aW5nIHRvIHJlcXVlc3QgaXQuIFdoZW4gYSB0cmFuc3BvcnQgZmFpbHVyZSBoYXBwZW5zCisJCSAqIHVzaW5nIFVTX0ZTX1NBTkVfU0VOU0UsIHdlIGFsd2F5cyByZXRyeSB3aXRoIGEgc3RhbmRhcmQKKwkJICogKHNtYWxsKSBzZW5zZSByZXF1ZXN0LiBUaGlzIGZpeGVzIHNvbWUgVVNCIEdTTSBtb2RlbXMKKwkJICovCisJCWlmICh0ZW1wX3Jlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEICYmCisJCSAgICAodXMtPmZmbGFncyAmIFVTX0ZMX1NBTkVfU0VOU0UpICYmCisJCSAgICBzZW5zZV9zaXplICE9IFVTX1NFTlNFX1NJWkUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlLCByZXRyeSBzbWFsbCBzZW5zZVxuIik7CisJCQlzZW5zZV9zaXplID0gVVNfU0VOU0VfU0laRTsKKwkJCWdvdG8gUmV0cnlfU2Vuc2U7CisJCX0KKworCQkvKiBPdGhlciBmYWlsdXJlcyAqLwogCQlpZiAodGVtcF9yZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKIAkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggYjJmMTQ5Zi4uNDUxNmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0yMDAsMzUgKzIwMCw0MCBAQAogewogCWludCByZXN1bHQsIGJ5dGVzLCBzZWNkX3NpemU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYl9kZXYtPmRldjsKLQlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3Igc2VjZDsKKwlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IgKnNlY2Q7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgKmV0ZCwgKmNjbTFfZXRkID0gTlVMTDsKLQl2b2lkICpzZWNkX2J1ZjsKIAljb25zdCB2b2lkICppdHIsICp0b3A7CiAJY2hhciBidWZbNjRdOwogCisJc2VjZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciksIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgJnNlY2QsIHNpemVvZihzZWNkKSk7CisJCQkJICAgIDAsIHNlY2QsIHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpKTsKIAlpZiAocmVzdWx0IDwgc2l6ZW9mKHNlY2QpKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2Q7CisJCWdvdG8gb3V0OwogCX0KLQlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLndUb3RhbExlbmd0aCk7Ci0Jc2VjZF9idWYgPSBrbWFsbG9jKHNlY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNlY2RfYnVmID09IE5VTEwpIHsKKwlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLT53VG90YWxMZW5ndGgpOworCXNlY2QgPSBrcmVhbGxvYyhzZWNkLCBzZWNkX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnNcbiIpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsb2M7CisJCWdvdG8gb3V0OwogCX0KIAlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAotCQkJCSAgICAwLCBzZWNkX2J1Ziwgc2VjZF9zaXplKTsKKwkJCQkgICAgMCwgc2VjZCwgc2VjZF9zaXplKTsKIAlpZiAocmVzdWx0IDwgc2VjZF9zaXplKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsOworCQlnb3RvIG91dDsKIAl9CiAJYnl0ZXMgPSAwOwotCWl0ciA9IHNlY2RfYnVmICsgc2l6ZW9mKHNlY2QpOwotCXRvcCA9IHNlY2RfYnVmICsgcmVzdWx0OworCWl0ciA9ICZzZWNkWzFdOworCXRvcCA9ICh2b2lkICopc2VjZCArIHJlc3VsdDsKIAl3aGlsZSAoaXRyIDwgdG9wKSB7CiAJCWV0ZCA9IGl0cjsKIAkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqZXRkKSkgewpAQCAtMjU5LDI0ICsyNjQsMTYgQEAKIAkJZGV2X2VycihkZXYsICJXVVNCIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgQ0NNMSBlbmNyeXB0aW9uLCAiCiAJCQkiY2FuJ3QgdXNlIVxuIik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3Jfbm9fY2NtMTsKKwkJZ290byBvdXQ7CiAJfQogCXd1c2JfZGV2LT5jY20xX2V0ZCA9ICpjY20xX2V0ZDsKIAlkZXZfZGJnKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uOiAlczsgdXNpbmcgJXMgKDB4JTAyeC8lMDJ4KVxuIiwKIAkJYnVmLCB3dXNiX2V0X25hbWUoY2NtMV9ldGQtPmJFbmNyeXB0aW9uVHlwZSksCiAJCWNjbTFfZXRkLT5iRW5jcnlwdGlvblZhbHVlLCBjY20xX2V0ZC0+YkF1dGhLZXlJbmRleCk7CiAJcmVzdWx0ID0gMDsKLQlrZnJlZShzZWNkX2J1Zik7CiBvdXQ6CisJa2ZyZWUoc2VjZCk7CiAJcmV0dXJuIHJlc3VsdDsKLQotCi1lcnJvcl9ub19jY20xOgotZXJyb3Jfc2VjZF9hbGw6Ci0Ja2ZyZWUoc2VjZF9idWYpOwotZXJyb3Jfc2VjZF9hbGxvYzoKLWVycm9yX3NlY2Q6Ci0JZ290byBvdXQ7CiB9CiAKIHZvaWQgd3VzYl9kZXZfc2VjX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggOWJiYjI4NS4uMTg4ZTFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAogY29uZmlnIEZCX1BSRV9JTklUX0ZCCiAJYm9vbCAiRG9uJ3QgcmVpbml0aWFsaXplLCB1c2UgYm9vdGxvYWRlcidzIEdEQy9EaXNwbGF5IGNvbmZpZ3VyYXRpb24iCi0JZGVwZW5kcyBvbiBGQl9NQjg2MlhYX0xJTUUKKwlkZXBlbmRzIG9uIEZCICYmIEZCX01CODYyWFhfTElNRQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiBkaXNwbGF5IGNvbnRlbnRzIHNob3VsZCBiZSBpbmhlcml0ZWQgYXMgc2V0IGJ5CiAJICB0aGUgYm9vdGxvYWRlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwppbmRleCA4Y2QyNzliLi4zNzYyNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCkBAIC0zMjksMTIgKzMyOSw2IEBACiAgKgogICoJKiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKgogICoJaW50ICgqZmJfbW1hcCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLSAqCi0gKgkqIHNhdmUgY3VycmVudCBoYXJkd2FyZSBzdGF0ZSAqCi0gKgl2b2lkICgqZmJfc2F2ZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotICoKLSAqCSogcmVzdG9yZSBzYXZlZCBzdGF0ZSAqCi0gKgl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwogICogfSA7CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IDI4MzBmZmQuLmQ1ZTgwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTQ4NCw2ICs0ODQsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJdW5zaWduZWQgbG9uZyBjbGtfdmFsdWVfa2h6OwogCXVuc2lnbmVkIGxvbmcgYml0c19wZXJfbGluZTsKKwl1bnNpZ25lZCBsb25nIHBpeF9mYWN0b3IgPSAyOwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtNTE2LDIwICs1MTcsMjQgQEAKIAkvKiBOb3csIHRoZSBMQ0RDIGNvcmUuLi4gKi8KIAogCS8qIFNldCBwaXhlbCBjbG9jayAqLworCWlmIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSAmJiAhY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKSkKKwkJcGl4X2ZhY3RvciA9IDE7CisKIAljbGtfdmFsdWVfa2h6ID0gY2xrX2dldF9yYXRlKHNpbmZvLT5sY2RjX2NsaykgLyAxMDAwOwogCiAJdmFsdWUgPSBESVZfUk9VTkRfVVAoY2xrX3ZhbHVlX2toeiwgUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jaykpOwogCi0JaWYgKHZhbHVlIDwgMikgeworCWlmICh2YWx1ZSA8IHBpeF9mYWN0b3IpIHsKIAkJZGV2X25vdGljZShpbmZvLT5kZXZpY2UsICJCeXBhc3NpbmcgcGl4ZWwgY2xvY2sgZGl2aWRlclxuIik7CiAJCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0xDRENPTjEsIEFUTUVMX0xDRENfQllQQVNTKTsKIAl9IGVsc2UgewotCQl2YWx1ZSA9ICh2YWx1ZSAvIDIpIC0gMTsKKwkJdmFsdWUgPSAodmFsdWUgLyBwaXhfZmFjdG9yKSAtIDE7CiAJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiICAqIHByb2dyYW1taW5nIENMS1ZBTCA9IDB4JTA4bHhcbiIsCiAJCQkJdmFsdWUpOwogCQlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19MQ0RDT04xLAogCQkJCXZhbHVlIDw8IEFUTUVMX0xDRENfQ0xLVkFMX09GRlNFVCk7Ci0JCWluZm8tPnZhci5waXhjbG9jayA9IEtIWjJQSUNPUyhjbGtfdmFsdWVfa2h6IC8gKDIgKiAodmFsdWUgKyAxKSkpOworCQlpbmZvLT52YXIucGl4Y2xvY2sgPQorCQkJS0haMlBJQ09TKGNsa192YWx1ZV9raHogLyAocGl4X2ZhY3RvciAqICh2YWx1ZSArIDEpKSk7CiAJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiICB1cGRhdGVkIHBpeGNsazogICAgICVsdSBLSHpcbiIsCiAJCQkJCVBJQ09TMktIWihpbmZvLT52YXIucGl4Y2xvY2spKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDVhNjg2Y2UuLjM2ODFjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yMzExLDE0ICsyMzExLDExIEBACiAJCW9wcy0+Z3JhcGhpY3MgPSAxOwogCiAJCWlmICghYmxhbmspIHsKLQkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZSkKLQkJCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZShpbmZvKTsKIAkJCXZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVyB8IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCW9wcy0+Z3JhcGhpY3MgPSAwOwogCQkJb3BzLT52YXIgPSBpbmZvLT52YXI7Ci0JCX0gZWxzZSBpZiAoaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUpCi0JCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZShpbmZvKTsKKwkJfQogCX0KIAogIAlpZiAoIWZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCmluZGV4IDVjNWExYWQuLjQ3NDQyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYwppbmRleCA5Yzc4MDUwLi5jOWU5MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCmluZGV4IDgwZDBmNWYuLjcxMDQ4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwLmMKaW5kZXggOTk2MzZhMi4uNmM1MTllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRwLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwLmMKQEAgLTIyLDkgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLSNpbmNsdWRlIDxsaW51eC9hbmRyb2lkX3BtZW0uaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAKICNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgpAQCAtMjYyLDExICsyNTksNiBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCXVuc2lnbmVkIGxvbmcgdnN0YXJ0OwogCi0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCWlmICghZ2V0X3BtZW1fZmlsZShpbWctPm1lbW9yeV9pZCwgc3RhcnQsICZ2c3RhcnQsIGxlbiwgZmlsZXApKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCiAJZmlsZSA9IGZnZXRfbGlnaHQoaW1nLT5tZW1vcnlfaWQsICZwdXRfbmVlZGVkKTsKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC0yODMsMTIgKzI3NSw2IEBACiAKIHZvaWQgcHV0X2ltZyhzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSkKIHsKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JaWYgKHNyY19maWxlKQotCQlwdXRfcG1lbV9maWxlKHNyY19maWxlKTsKLQlpZiAoZHN0X2ZpbGUpCi0JCXB1dF9wbWVtX2ZpbGUoZHN0X2ZpbGUpOwotI2VuZGlmCiB9CiAKIGludCBtZHBfYmxpdChzdHJ1Y3QgbWRwX2RldmljZSAqbWRwX2Rldiwgc3RydWN0IGZiX2luZm8gKmZiLApAQCAtMzIwLDkgKzMwNiw2IEBACiAJaWYgKHVubGlrZWx5KGdldF9pbWcoJnJlcS0+ZHN0LCBmYiwgJmRzdF9zdGFydCwgJmRzdF9sZW4sICZkc3RfZmlsZSkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibXBkX3BwcDogY291bGQgbm90IHJldHJpZXZlIGRzdCBpbWFnZSBmcm9tICIKIAkJCQkibWVtb3J5XG4iKTsKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JCXB1dF9wbWVtX2ZpbGUoc3JjX2ZpbGUpOwotI2VuZGlmCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAltdXRleF9sb2NrKCZtZHBfbXV0ZXgpOwpAQCAtNDk5LDcgKzQ4Miw2IEBACiAJLyogcmVnaXN0ZXIgbWRwIGRldmljZSAqLwogCW1kcC0+bWRwX2Rldi5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAltZHAtPm1kcF9kZXYuZGV2LmNsYXNzID0gbWRwX2NsYXNzOwotCXNucHJpbnRmKG1kcC0+bWRwX2Rldi5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIm1kcCVkIiwgcGRldi0+aWQpOwogCiAJLyogaWYgeW91IGNhbiByZW1vdmUgdGhlIHBsYXRmb3JtIGRldmljZSB5b3UnZCBoYXZlIHRvIGltcGxlbWVudAogCSAqIHRoaXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKaW5kZXggYmEyYzQ2Ny4uNGZmMDAxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21zbV9tZHAuaD4KLSNpbmNsdWRlIDxsaW51eC9hbmRyb2lkX3BtZW0uaD4KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogCiAjaW5jbHVkZSAibWRwX2h3LmgiCkBAIC01NzksMjUgKzU3OCw2IEBACiBzdGF0aWMgdm9pZCBmbHVzaF9pbWdzKHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzLAogCQkgICAgICAgc3RydWN0IGZpbGUgKnNyY19maWxlLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCiB7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCXVpbnQzMl90IHNyYzBfbGVuLCBzcmMxX2xlbiwgZHN0MF9sZW4sIGRzdDFfbGVuOwotCi0JLyogZmx1c2ggc3JjIGltYWdlcyB0byBtZW1vcnkgYmVmb3JlIGRtYSB0byBtZHAgKi8KLQlnZXRfbGVuKCZyZXEtPnNyYywgJnJlcS0+c3JjX3JlY3QsIHJlZ3MtPnNyY19icHAsICZzcmMwX2xlbiwKLQkJJnNyYzFfbGVuKTsKLQlmbHVzaF9wbWVtX2ZpbGUoc3JjX2ZpbGUsIHJlcS0+c3JjLm9mZnNldCwgc3JjMF9sZW4pOwotCWlmIChJU19QU0VVRE9QTE5SKHJlcS0+c3JjLmZvcm1hdCkpCi0JCWZsdXNoX3BtZW1fZmlsZShzcmNfZmlsZSwgcmVxLT5zcmMub2Zmc2V0ICsgc3JjMF9sZW4sCi0JCQkJc3JjMV9sZW4pOwotCi0JLyogZmx1c2ggZHN0IGltYWdlcyAqLwotCWdldF9sZW4oJnJlcS0+ZHN0LCAmcmVxLT5kc3RfcmVjdCwgcmVncy0+ZHN0X2JwcCwgJmRzdDBfbGVuLAotCQkmZHN0MV9sZW4pOwotCWZsdXNoX3BtZW1fZmlsZShkc3RfZmlsZSwgcmVxLT5kc3Qub2Zmc2V0LCBkc3QwX2xlbik7Ci0JaWYgKElTX1BTRVVET1BMTlIocmVxLT5kc3QuZm9ybWF0KSkKLQkJZmx1c2hfcG1lbV9maWxlKGRzdF9maWxlLCByZXEtPmRzdC5vZmZzZXQgKyBkc3QwX2xlbiwKLQkJCQlkc3QxX2xlbik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2Nocm9tYV9hZGRyKHN0cnVjdCBtZHBfaW1nICppbWcsIHN0cnVjdCBtZHBfcmVjdCAqcmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggMzdiMTM1ZC4uODQyZDE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTE1NjUsNyArMTU2NSw3IEBACiAJCXZnYV9vdXQ4KDB4M2M1LCBzcjgsIHBhcik7CiAJCXZnYV9vdXQ4KDB4M2M0LCAweDBkLCBwYXIpOwogCQlzcmQgPSB2Z2FfaW44KDB4M2M1LCBwYXIpOwotCQlzcmQgJj0gMHgwMzsKKwkJc3JkICY9IDB4NTA7CiAKIAkJc3dpdGNoIChibGFuaykgewogCQljYXNlIEZCX0JMQU5LX1VOQkxBTks6CkBAIC0xNjA2LDIyICsxNjA2LDYgQEAKIAlyZXR1cm4gKGJsYW5rID09IEZCX0JMQU5LX05PUk1BTCkgPyAxIDogMDsKIH0KIAotc3RhdGljIHZvaWQgc2F2YWdlZmJfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlzYXZhZ2VfZ2V0X2RlZmF1bHRfcGFyKHBhciwgJnBhci0+c2F2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNhdmFnZWZiX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0Jc2F2YWdlZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBpbmZvKTsKLQlzYXZhZ2Vfc2V0X2RlZmF1bHRfcGFyKHBhciwgJnBhci0+c2F2ZSk7Ci0Jc2F2YWdlZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7Ci19Ci0KIHN0YXRpYyBpbnQgc2F2YWdlZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7CiAJc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtMTY2Nyw4ICsxNjUxLDYgQEAKIAkuZmJfc2V0Y29scmVnICAgPSBzYXZhZ2VmYl9zZXRjb2xyZWcsCiAJLmZiX3Bhbl9kaXNwbGF5ID0gc2F2YWdlZmJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rICAgICAgID0gc2F2YWdlZmJfYmxhbmssCi0JLmZiX3NhdmVfc3RhdGUgID0gc2F2YWdlZmJfc2F2ZV9zdGF0ZSwKLQkuZmJfcmVzdG9yZV9zdGF0ZSA9IHNhdmFnZWZiX3Jlc3RvcmVfc3RhdGUsCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfU0FWQUdFX0FDQ0VMKQogCS5mYl9maWxscmVjdCAgICA9IHNhdmFnZWZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYSAgICA9IHNhdmFnZWZiX2NvcHlhcmVhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCBlMzUyMzJhLi41NGZiYjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtMTQxMSwyMyArMTQxMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHV2ZXNhZmJfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCWlmIChwYXItPnZiZV9zdGF0ZV9zYXZlZCkKLQkJa2ZyZWUocGFyLT52YmVfc3RhdGVfc2F2ZWQpOwotCi0JcGFyLT52YmVfc3RhdGVfc2F2ZWQgPSB1dmVzYWZiX3ZiZV9zdGF0ZV9zYXZlKHBhcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHV2ZXNhZmJfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXV2ZXNhZmJfdmJlX3N0YXRlX3Jlc3RvcmUocGFyLCBwYXItPnZiZV9zdGF0ZV9zYXZlZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHV2ZXNhZmJfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZmJfb3Blbgk9IHV2ZXNhZmJfb3BlbiwKQEAgLTE0NDEsOCArMTQyNCw2IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCiAJLmZiX2NoZWNrX3Zhcgk9IHV2ZXNhZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyCT0gdXZlc2FmYl9zZXRfcGFyLAotCS5mYl9zYXZlX3N0YXRlCT0gdXZlc2FmYl9zYXZlX3N0YXRlLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gdXZlc2FmYl9yZXN0b3JlX3N0YXRlLAogfTsKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHV2ZXNhZmJfaW5pdF9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvLApAQCAtMTQ1OSwxNSArMTQ0MCw2IEBACiAJaW5mby0+Zml4LnlwYW5zdGVwID0gcGFyLT55cGFuID8gMSA6IDA7CiAJaW5mby0+Zml4Lnl3cmFwc3RlcCA9IChwYXItPnlwYW4gPiAxKSA/IDEgOiAwOwogCi0JLyoKLQkgKiBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBnZXQgdGhlIHN0YXRlIGJ1ZmZlciBzaXplLCBkaXNhYmxlCi0JICogZnVuY3Rpb25zIGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgaGFyZHdhcmUgc3RhdGUuCi0JICovCi0JaWYgKHBhci0+dmJlX3N0YXRlX3NpemUgPT0gMCkgewotCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZSA9IE5VTEw7Ci0JCWluZm8tPmZib3BzLT5mYl9yZXN0b3JlX3N0YXRlID0gTlVMTDsKLQl9Ci0KIAkvKiBEaXNhYmxlIGJsYW5raW5nIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBzby4gKi8KIAlpZiAoIWJsYW5rKQogCQlpbmZvLT5mYm9wcy0+ZmJfYmxhbmsgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggMjAwYzIyZi4uOWRkNTg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKi8KIC8vI2RlZmluZSBERUJVRwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmFsbG9vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0yNDgsNyArMjQ3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydGJhbGxvb25fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIgPSB2ZGV2LT5wcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggNGExZjFlYi4uMjhkOWNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtNTMwLDE5ICs1MzAsMjIgQEAKIAkJCWVyciA9IFBUUl9FUlIodnFzW2ldKTsKIAkJCWdvdG8gZXJyb3JfZmluZDsKIAkJfQorCisJCWlmICghdnBfZGV2LT5wZXJfdnFfdmVjdG9ycyB8fCBtc2l4X3ZlYyA9PSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikKKwkJCWNvbnRpbnVlOworCiAJCS8qIGFsbG9jYXRlIHBlci12cSBpcnEgaWYgYXZhaWxhYmxlIGFuZCBuZWNlc3NhcnkgKi8KLQkJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMpIHsKLQkJCXNucHJpbnRmKHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCi0JCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAotCQkJCSAiJXMtJXMiLAotCQkJCSBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKLQkJCWVyciA9IHJlcXVlc3RfaXJxKG1zaXhfdmVjLCB2cmluZ19pbnRlcnJ1cHQsIDAsCi0JCQkJCSAgdnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkJICB2cXNbaV0pOwotCQkJaWYgKGVycikgewotCQkJCXZwX2RlbF92cSh2cXNbaV0pOwotCQkJCWdvdG8gZXJyb3JfZmluZDsKLQkJCX0KKwkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCSBzaXplb2YgKnZwX2Rldi0+bXNpeF9uYW1lcywKKwkJCSAiJXMtJXMiLAorCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOworCQllcnIgPSByZXF1ZXN0X2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1ttc2l4X3ZlY10udmVjdG9yLAorCQkJCSAgdnJpbmdfaW50ZXJydXB0LCAwLAorCQkJCSAgdnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCQkgIHZxc1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCXZwX2RlbF92cSh2cXNbaV0pOworCQkJZ290byBlcnJvcl9maW5kOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggZjUzNjAwNS4uZmJkMmVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0yODUsNiArMjg1LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogT25seSBnZXQgdXNlZCBhcnJheSBlbnRyaWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4cG9zZWQgYnkgaG9zdC4gKi8KKwlybWIoKTsKKwogCWkgPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5pZDsKIAkqbGVuID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0ubGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKaW5kZXggODUyY2ExOS4uOTE0MzBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJfQogCiAJZXJyID0gbWlzY19yZWdpc3RlcigmZml0cGMyX3dkdF9taXNjZGV2KTsKLQlpZiAoIWVycikgeworCWlmIChlcnIpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCQkJCQlXQVRDSERPR19NSU5PUiwgZXJyKTsKIAkJZ290byBlcnJfbWFyZ2luOwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCBhNmM3YzNlLi5mNGNhMGM3IDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtNjksMTEgKzY5LDEzIEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX01ZUklfU0JVUykgKz0gbXlyaWNvbS9sYW5haS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBX1BDTkVUKSArPSBjaXMvTEEtUENNLmNpcyBjaXMvUENNTE0yOC5jaXMgXAogCQkJCSAgICAgY2lzL0RQODM5MDMuY2lzIGNpcy9ORTJLLmNpcyBcCi0JCQkJICAgICBjaXMvdGFtYXJhY2suY2lzCisJCQkJICAgICBjaXMvdGFtYXJhY2suY2lzIGNpcy9QRS0yMDAuY2lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1BDTUNJQV8zQzU4OSkgKz0gY2lzLzNDWEVNNTU2LmNpcwogZnctc2hpcHBlZC0kKENPTkZJR19QQ01DSUFfM0M1NzQpICs9IGNpcy8zQ0NGRU01NTYuY2lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NFUklBTF84MjUwX0NTKSArPSBjaXMvTVQ1NjM0WkxYLmNpcyBjaXMvUlMtQ09NLTJQLmNpcyBcCi0JCQkJICAgICAgIGNpcy9DT01wYWQyLmNpcyBjaXMvQ09NcGFkNC5jaXMKKwkJCQkgICAgICAgY2lzL0NPTXBhZDIuY2lzIGNpcy9DT01wYWQ0LmNpcyBcCisJCQkJICAgICAgIGNpcy9TV181NTVfU0VSLmNpcyBjaXMvU1dfN3h4X1NFUi5jaXMgXAorCQkJCSAgICAgICBjaXMvU1dfOHh4X1NFUi5jaXMKIGZ3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBX1NNQzkxQzkyKSArPSBvc2l0ZWNoL1hpbGlueDdPRC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfU0NTSV9BRFZBTlNZUykgKz0gYWR2YW5zeXMvbWNvZGUuYmluIGFkdmFuc3lzLzM4QzE2MDAuYmluIFwKIAkJCQkgICAgICBhZHZhbnN5cy8zNTUwLmJpbiBhZHZhbnN5cy8zOEMwODAwLmJpbgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IGM0MzdlMTQuLjdhOGFkYzAgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTYwMCw2ICs2MDAsNyBAQAogICAgICAgY2lzL0RQODM5MDMuY2lzCiAgICAgICBjaXMvTkUySy5jaXMKICAgICAgIGNpcy90YW1hcmFjay5jaXMKKyAgICAgIGNpcy9QRS0yMDAuY2lzCiAKIExpY2VuY2U6IEdQTAogCkBAIC02MzMsNiArNjM0LDkgQEAKICAgICAgIGNpcy9SUy1DT00tMlAuY2lzCiAgICAgICBjaXMvQ09NcGFkMi5jaXMKICAgICAgIGNpcy9DT01wYWQ0LmNpcworICAgICAgY2lzL1NXXzU1NV9TRVIuY2lzCisgICAgICBjaXMvU1dfN3h4X1NFUi5jaXMKKyAgICAgIGNpcy9TV184eHhfU0VSLmNpcwogCiBMaWNlbmNlOiBHUEwKIApkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY2lzL1BFLTIwMC5jaXMuaWhleCBiL2Zpcm13YXJlL2Npcy9QRS0yMDAuY2lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkYmRhYgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2Npcy9QRS0yMDAuY2lzLmloZXgKQEAgLTAsMCArMSw5IEBACis6MTAwMDAwMDAwMTAzMDAwMEZGMTUxRTA0MDE1MDRENTgyMDIwMjAwMDYwCis6MTAwMDEwMDA1MDQ1MkQzMjMwMzAwMDQ1NTQ0ODQ1NTI0RTQ1NTQwMDJECis6MTAwMDIwMDA1MjMwMzEwMEZGMjEwMjA2MDMxQTA1MDEwMTAwMDEwMUNGCis6MTAwMDMwMDAxQjBFQzE4MTE5MDE1NUUwNTEwMDBGMTAwRjMwRkZGRjU5Cis6MDQwMDQwMDAxNDAwRkYwMEE5Cis6MDAwMDAwMDFGRgorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIFBFLTIwMCBldGhlcm5ldCBjYXJkCisjCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jaXMvU1dfNTU1X1NFUi5jaXMuaWhleCBiL2Zpcm13YXJlL2Npcy9TV181NTVfU0VSLmNpcy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTM0OGFjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY2lzL1NXXzU1NV9TRVIuY2lzLmloZXgKQEAgLTAsMCArMSwxMiBAQAorOjEwMDAwMDAwMDEwMUZGMTcwMzQxMDBGRjIwMDQzRjAxMTAwNzIxMDJGNworOjEwMDAxMDAwMDIwMDE1MkEwNzAwNTM2OTY1NzI3MjYxMjA1NzY5NzJFMAorOjEwMDAyMDAwNjU2QzY1NzM3MzAwNDE2OTcyNDM2MTcyNjQyMDM1MzU5NAorOjEwMDAzMDAwMzUwMDQxMzUzNTM1MDA1MjY1NzYyMDMxMDBGRjFBMDUwRgorOjEwMDA0MDAwMDEwMzAwMDc3MzFCMEJFMDAxMThBMzYwRjgwMzA3MzBERQorOjEwMDA1MDAwQkMzRjFCMDhBMTAxMDhBMzYwRjgwMjA3MUIwOEEyMDEwRQorOjEwMDA2MDAwMDhBMzYwRTgwMzA3MUIwOEEzMDEwOEEzNjBFODAyMDdEMAorOjBBMDA3MDAwMUIwNEE0MDEwODIzMTQwMEZGMDA4NAorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBBQzU1NSBwcm92aWRlZCBieSBTaWVycmEgV2lyZWxlc3MKKyMKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2Npcy9TV183eHhfU0VSLmNpcy5paGV4IGIvZmlybXdhcmUvY2lzL1NXXzd4eF9TRVIuY2lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlNDRhZAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2Npcy9TV183eHhfU0VSLmNpcy5paGV4CkBAIC0wLDAgKzEsMTMgQEAKKzoxMDAwMDAwMDAxMDFGRjE3MDM0MTAwRkYyMDA0OTIwMTEwMDcyMTAyQTQKKzoxMDAwMTAwMDAyMDAxNTM3MDcwMDUzNjk2NTcyNzI2MTIwNTc2OTcyRDMKKzoxMDAwMjAwMDY1NkM2NTczNzMwMDQxNDMzNzMxMzAyRjQxNDMzNzM1NzkKKzoxMDAwMzAwMDMwMDA0NzUwNTI1MzIwNEU2NTc0Nzc2RjcyNkIyMDQxRTkKKzoxMDAwNDAwMDY0NjE3MDc0NjU3MjAwNTIzMTAwRkYxQTA1MDEwMzAwOEIKKzoxMDAwNTAwMDA3NzMxQjEwRTAwMTE5Nzg0RDU1NUQyNUEzNjBGODAzNjcKKzoxMDAwNjAwMDA3MzBCQzg2MUIwOEExMDEwOEEzNjBGODAyMDcxQjA4MjMKKzoxMDAwNzAwMEEyMDEwOEEzNjBFODAzMDcxQjA4QTMwMTA4QTM2MEU4MjYKKzowQzAwODAwMDAyMDcxQjA0QTQwMTA4MjMxNDAwRkYwMDY5Cis6MDAwMDAwMDFGRgorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIEFDN3h4IHByb3ZpZGVkIGJ5IFNpZXJyYSBXaXJlbGVzcworIwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY2lzL1NXXzh4eF9TRVIuY2lzLmloZXggYi9maXJtd2FyZS9jaXMvU1dfOHh4X1NFUi5jaXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNmZTYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY2lzL1NXXzh4eF9TRVIuY2lzLmloZXgKQEAgLTAsMCArMSwxMyBAQAorOjEwMDAwMDAwMDEwMUZGMTcwMzQxMDBGRjIwMDQ5MjAxMTAwNzIxMDJBNAorOjEwMDAxMDAwMDIwMDE1MkYwNzAwNTM2OTY1NzI3MjYxMjA1NzY5NzJEQgorOjEwMDAyMDAwNjU2QzY1NzM3MzAwNDE0MzM4MzUzMDAwMzM0NzIwNEVBQgorOjEwMDAzMDAwNjU3NDc3NkY3MjZCMjA0MTY0NjE3MDc0NjU3MjAwNTJGMQorOjEwMDA0MDAwMzEwMEZGMUEwNTAxMDMwMDA3NzMxQjEwRTAwMTE5Nzg0NgorOjEwMDA1MDAwNEQ1NTVEMjVBMzYwRjg0ODA3MzBCQzg2MUIwOEExMDFGQgorOjEwMDA2MDAwMDhBMzYwRjg0NzA3MUIwOEEyMDEwOEEzNjBFODQ4MDczNworOjEwMDA3MDAwMUIwOEEzMDEwOEEzNjBFODQ3MDcxQjA0QTQwMTA4MjM4OQorOjA0MDA4MDAwMTQwMEZGMDA2OQorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBBQzh4eCBwcm92aWRlZCBieSBTaWVycmEgV2lyZWxlc3MKKyMKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCA4NzNjZDMxLi4xNWNjZTUzIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC00MCw2ICs0MCwyNCBAQAogI2luY2x1ZGUgImZpZC5oIgogCiAvKioKKyAqIHN0cnVjdCBwOV9yZGlyIC0gcmVhZGRpciBhY2NvdW50aW5nCisgKiBAbXV0ZXg6IG11dGV4IHByb3RlY3RpbmcgcmVhZGRpcgorICogQGhlYWQ6IHN0YXJ0IG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAdGFpbDogZW5kIG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAYnVmOiBkaXJyZWFkIGJ1ZmZlcgorICoKKyAqIHByaXZhdGUgc3RydWN0dXJlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHJlYWRkaXIKKyAqIGFsbG9jYXRlZCBvbiBkZW1hbmQKKyAqLworCitzdHJ1Y3QgcDlfcmRpciB7CisJc3RydWN0IG11dGV4IG11dGV4OworCWludCBoZWFkOworCWludCB0YWlsOworCXVpbnQ4X3QgKmJ1ZjsKK307CisKKy8qKgogICogZHRfdHlwZSAtIHJldHVybiBmaWxlIHR5cGUKICAqIEBtaXN0YXQ6IG1pc3RhdCBzdHJ1Y3R1cmUKICAqCkBAIC03MCw1NiArODgsNzkgQEAKIHsKIAlpbnQgb3ZlcjsKIAlzdHJ1Y3QgcDlfd3N0YXQgc3Q7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJaW50IGJ1ZmxlbjsKLQljaGFyICpzdGF0YnVmOwotCWludCBuLCBpID0gMDsKKwlpbnQgcmVjbGVuID0gMDsKKwlzdHJ1Y3QgcDlfcmRpciAqcmRpcjsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGF0YnVmKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXdoaWxlICgxKSB7Ci0JCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBzdGF0YnVmLCBOVUxMLCBidWZsZW4sCi0JCQkJCQkJCWZpZC0+cmRpcl9mcG9zKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJYnJlYWs7CisJLyogYWxsb2NhdGUgcmRpciBvbiBkZW1hbmQgKi8KKwlpZiAoIWZpZC0+cmRpcikgeworCQlyZGlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3JkaXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKIAotCQluID0gZXJyOwotCQl3aGlsZSAoaSA8IG4pIHsKLQkJCWVyciA9IHA5c3RhdF9yZWFkKHN0YXRidWYgKyBpLCBidWZsZW4taSwgJnN0LAotCQkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CisJCWlmIChyZGlyID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJaWYgKCFmaWQtPnJkaXIpIHsKKwkJCXJkaXItPmJ1ZiA9ICh1aW50OF90ICopcmRpciArIHNpemVvZihzdHJ1Y3QgcDlfcmRpcik7CisJCQltdXRleF9pbml0KCZyZGlyLT5tdXRleCk7CisJCQlyZGlyLT5oZWFkID0gcmRpci0+dGFpbCA9IDA7CisJCQlmaWQtPnJkaXIgPSAodm9pZCAqKSByZGlyOworCQkJcmRpciA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlrZnJlZShyZGlyKTsKKwl9CisJcmRpciA9IChzdHJ1Y3QgcDlfcmRpciAqKSBmaWQtPnJkaXI7CisKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJkaXItPm11dGV4KTsKKwl3aGlsZSAoZXJyID09IDApIHsKKwkJaWYgKHJkaXItPnRhaWwgPT0gcmRpci0+aGVhZCkgeworCQkJZXJyID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIHJkaXItPmJ1ZiwgTlVMTCwKKwkJCQkJCQlidWZsZW4sIGZpbHAtPmZfcG9zKTsKKwkJCWlmIChlcnIgPD0gMCkKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKworCQkJcmRpci0+aGVhZCA9IDA7CisJCQlyZGlyLT50YWlsID0gZXJyOworCQl9CisKKwkJd2hpbGUgKHJkaXItPmhlYWQgPCByZGlyLT50YWlsKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChyZGlyLT5idWYgKyByZGlyLT5oZWFkLAorCQkJCQkJYnVmbGVuIC0gcmRpci0+aGVhZCwgJnN0LAorCQkJCQkJZmlkLT5jbG50LT5kb3R1KTsKIAkJCWlmIChlcnIpIHsKIAkJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInJldHVybmVkICVkXG4iLCBlcnIpOwogCQkJCWVyciA9IC1FSU87CiAJCQkJcDlzdGF0X2ZyZWUoJnN0KTsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0KLQkJCWkgKz0gc3Quc2l6ZSsyOwotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gc3Quc2l6ZSsyOworCQkJcmVjbGVuID0gc3Quc2l6ZSsyOwogCiAJCQlvdmVyID0gZmlsbGRpcihkaXJlbnQsIHN0Lm5hbWUsIHN0cmxlbihzdC5uYW1lKSwKIAkJCSAgICBmaWxwLT5mX3Bvcywgdjlmc19xaWQyaW5vKCZzdC5xaWQpLCBkdF90eXBlKCZzdCkpOwogCi0JCQlmaWxwLT5mX3BvcyArPSBzdC5zaXplKzI7Ci0KIAkJCXA5c3RhdF9mcmVlKCZzdCk7CiAKIAkJCWlmIChvdmVyKSB7CiAJCQkJZXJyID0gMDsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CisJCQlyZGlyLT5oZWFkICs9IHJlY2xlbjsKKwkJCWZpbHAtPmZfcG9zICs9IHJlY2xlbjsKIAkJfQogCX0KIAotZnJlZV9hbmRfZXhpdDoKLQlrZnJlZShzdGF0YnVmKTsKK3VubG9ja19hbmRfZXhpdDoKKwltdXRleF91bmxvY2soJnJkaXItPm11dGV4KTsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1OTQ3NjI4Li4xOGY3NGVjIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtOTk0LDggKzk5NCw3IEBACiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCiAJCSIlcyAtPiAlcyAoJXMpXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLCBzdC0+ZXh0ZW5zaW9uLCBidWZmZXIpOwogCi0JcmV0dmFsID0gYnVmbGVuOwotCisJcmV0dmFsID0gc3RybmxlbihidWZmZXIsIGJ1Zmxlbik7CiBkb25lOgogCWtmcmVlKHN0KTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTA2Miw3ICsxMDYxLDcgQEAKIAkJCV9fcHV0bmFtZShsaW5rKTsKIAkJCWxpbmsgPSBFUlJfUFRSKGxlbik7CiAJCX0gZWxzZQotCQkJbGlua1tsZW5dID0gMDsKKwkJCWxpbmtbbWluKGxlbiwgUEFUSF9NQVgtMSldID0gMDsKIAl9CiAJbmRfc2V0X2xpbmsobmQsIGxpbmspOwogCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBkNGJmOGNhLi42NGQ0NGVmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTEzNSw4ICsxMzUsOCBAQAogCiBjb25maWcgSFVHRVRMQkZTCiAJYm9vbCAiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgU1BBUkM2NCB8fCAoU1VQRVJIICYmIE1NVSkgfHwgXAotCQkgICAoUzM5MCAmJiA2NEJJVCkgfHwgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KKwlkZXBlbmRzIG9uIFg4NiB8fCBJQTY0IHx8IFNQQVJDNjQgfHwgKFMzOTAgJiYgNjRCSVQpIHx8IFwKKwkJICAgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KIAloZWxwCiAJICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uCiAJICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkCmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDQwMmNiODQuLjEyZGE1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0zMjUsOCArMzI1LDE2IEBACiAgKglAZ2ZwX21hc2s6IGFsbG9jYXRpb24gbWFzayB0byB1c2UKICAqCUBucl9pb3ZlY3M6IG51bWJlciBvZiBpb3ZlY3MKICAqCi0gKglBbGxvY2F0ZSBhIG5ldyBiaW8gd2l0aCBAbnJfaW92ZWNzIGJ2ZWNzLiAgSWYgQGdmcF9tYXNrCi0gKgljb250YWlucyBfX0dGUF9XQUlULCB0aGUgYWxsb2NhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisgKgliaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKKyAqCWF0IGxlYXN0IEBucl9pb3ZlY3MgZW50cmllcy4gQWxsb2NhdGlvbnMgd2lsbCBiZSBkb25lIGZyb20gdGhlCisgKglmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldCBhbmQgQGJpb19rbWFsbG9jLgorICoKKyAqCUlmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQorICoJYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCisgKgltdXN0IG5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBhdCBhIHRpbWUgZnJvbSB0aGlzIHBvb2wuIENhbGxlcnMKKyAqCXRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5CisgKglhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KKyAqCWRvIHNvIGNhbiBjYXVzZSBsaXZlbG9ja3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICoKICAqCVJFVFVSTlM6CiAgKglQb2ludGVyIHRvIG5ldyBiaW8gb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMzUwLDIxICszNTgsMTMgQEAKIH0KIAogLyoqCi0gKiBiaW9fYWxsb2MgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCisgKiBiaW9fa21hbGxvYyAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL08gdXNpbmcga21hbGxvYygpCiAgKiBAZ2ZwX21hc2s6ICAgdGhlIEdGUF8gbWFzayBnaXZlbiB0byB0aGUgc2xhYiBhbGxvY2F0b3IKICAqIEBucl9pb3ZlY3M6CW51bWJlciBvZiBpb3ZlY3MgdG8gcHJlLWFsbG9jYXRlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgIGJpb19hbGxvYyB3aWxsIGFsbG9jYXRlIGEgYmlvIGFuZCBhc3NvY2lhdGVkIGJpb192ZWMgYXJyYXkgdGhhdCBjYW4gaG9sZAotICogICBhdCBsZWFzdCBAbnJfaW92ZWNzIGVudHJpZXMuIEFsbG9jYXRpb25zIHdpbGwgYmUgZG9uZSBmcm9tIHRoZQotICogICBmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldC4KLSAqCi0gKiAgIElmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQotICogICBhIGJpby4gVGhpcyBpcyBkdWUgdG8gdGhlIG1lbXBvb2wgZ3VhcmFudGVlcy4gVG8gbWFrZSB0aGlzIHdvcmssIGNhbGxlcnMKLSAqICAgbXVzdCBuZXZlciBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gYXQgYSB0aW1lIGZyb20gdGhpcyBwb29sLiBDYWxsZXJzCi0gKiAgIHRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5Ci0gKiAgIGFsbG9jYXRlZCBiaW8gZm9yIElPIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGEgbmV3IG9uZS4gRmFpbHVyZSB0bwotICogICBkbyBzbyBjYW4gY2F1c2UgbGl2ZWxvY2tzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAqICAgQWxsb2NhdGUgYSBuZXcgYmlvIHdpdGggQG5yX2lvdmVjcyBidmVjcy4gIElmIEBnZnBfbWFzayBjb250YWlucworICogICAlX19HRlBfV0FJVCwgdGhlIGFsbG9jYXRpb24gaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgogICoKICAqKi8KIHN0cnVjdCBiaW8gKmJpb19rbWFsbG9jKGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQpAQCAtNDA3LDcgKzQwNyw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIFB1dCBhIHJlZmVyZW5jZSB0byBhICZzdHJ1Y3QgYmlvLCBlaXRoZXIgb25lIHlvdSBoYXZlIGdvdHRlbiB3aXRoCi0gKiAgIGJpb19hbGxvYyBvciBiaW9fZ2V0LiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgorICogICBiaW9fYWxsb2MsIGJpb19nZXQgb3IgYmlvX2Nsb25lLiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgogICoqLwogdm9pZCBiaW9fcHV0KHN0cnVjdCBiaW8gKmJpbykKIHsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggOWNmNGI5Mi4uOGJlZDA1NSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNDgsOCArMTI0OCw4IEBACiAJCQliZF9zZXRfc2l6ZShiZGV2LCAobG9mZl90KWJkZXYtPmJkX3BhcnQtPm5yX3NlY3RzIDw8IDkpOwogCQl9CiAJfSBlbHNlIHsKLQkJcHV0X2Rpc2soZGlzayk7CiAJCW1vZHVsZV9wdXQoZGlzay0+Zm9wcy0+b3duZXIpOworCQlwdXRfZGlzayhkaXNrKTsKIAkJZGlzayA9IE5VTEw7CiAJCWlmIChiZGV2LT5iZF9jb250YWlucyA9PSBiZGV2KSB7CiAJCQlpZiAoYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbikgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYWNsLmMgYi9mcy9idHJmcy9hY2wuYwppbmRleCA2OWIzNTVhLi4zNjE2MDQyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hY2wuYworKysgYi9mcy9idHJmcy9hY2wuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImJ0cmZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKIAotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAKIHN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpidHJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewpAQCAtMzEzLDcgKzMxMyw3IEBACiAJLnNldAk9IGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3Nfc2V0LAogfTsKIAotI2Vsc2UgLyogQ09ORklHX0JUUkZTX1BPU0lYX0FDTCAqLworI2Vsc2UgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwogCiBpbnQgYnRyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0zMjUsNCArMzI1LDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19CVFJGU19QT1NJWF9BQ0wgKi8KKyNlbmRpZiAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCBjNzFhYmVjLi5mNjc4M2E0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTg2LDYgKzg2LDEyIEBACiAJICogdHJhbnNpZCBvZiB0aGUgdHJhbnNfaGFuZGxlIHRoYXQgbGFzdCBtb2RpZmllZCB0aGlzIGlub2RlCiAJICovCiAJdTY0IGxhc3RfdHJhbnM7CisKKwkvKgorCSAqIGxvZyB0cmFuc2lkIHdoZW4gdGhpcyBpbm9kZSB3YXMgbGFzdCBtb2RpZmllZAorCSAqLworCXU2NCBsYXN0X3N1Yl90cmFuczsKKwogCS8qCiAJICogdHJhbnNpZCB0aGF0IGxhc3QgbG9nZ2VkIHRoaXMgaW5vZGUKIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDFiYjg5N2UuLjQ0NGIzZTkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtMTAwOSw2ICsxMDA5LDcgQEAKIAlhdG9taWNfdCBsb2dfd3JpdGVyczsKIAlhdG9taWNfdCBsb2dfY29tbWl0WzJdOwogCXVuc2lnbmVkIGxvbmcgbG9nX3RyYW5zaWQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X2xvZ19jb21taXQ7CiAJdW5zaWduZWQgbG9uZyBsb2dfYmF0Y2g7CiAJcGlkX3QgbG9nX3N0YXJ0X3BpZDsKIAlib29sIGxvZ19tdWx0aXBsZV9waWRzOwpAQCAtMTE1Miw2ICsxMTUzLDcgQEAKICNkZWZpbmUgQlRSRlNfTU9VTlRfRkxVU0hPTkNPTU1JVCAgICAgICAoMSA8PCA3KQogI2RlZmluZSBCVFJGU19NT1VOVF9TU0RfU1BSRUFECQkoMSA8PCA4KQogI2RlZmluZSBCVFJGU19NT1VOVF9OT1NTRAkJKDEgPDwgOSkKKyNkZWZpbmUgQlRSRlNfTU9VTlRfRElTQ0FSRAkJKDEgPDwgMTApCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0yMzczLDcgKzIzNzUsNyBAQAogaW50IGJ0cmZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpOwogCiAvKiBhY2wuYyAqLwotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiBpbnQgYnRyZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKICNlbHNlCiAjZGVmaW5lIGJ0cmZzX2NoZWNrX2FjbCBOVUxMCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggMTAwNTUxYS4uMDJiNmFmYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtOTE3LDYgKzkxNyw3IEBACiAJYXRvbWljX3NldCgmcm9vdC0+bG9nX3dyaXRlcnMsIDApOwogCXJvb3QtPmxvZ19iYXRjaCA9IDA7CiAJcm9vdC0+bG9nX3RyYW5zaWQgPSAwOworCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IDA7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmcm9vdC0+ZGlydHlfbG9nX3BhZ2VzLAogCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAKQEAgLTEwODcsNiArMTA4OCw3IEBACiAJV0FSTl9PTihyb290LT5sb2dfcm9vdCk7CiAJcm9vdC0+bG9nX3Jvb3QgPSBsb2dfcm9vdDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggZDBjNGQ1OC4uOTQ2MjdjNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0xNTY4LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMLAogCQkJICAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgYnRyZnNfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkJdTY0IG51bV9ieXRlcykKIHsKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogCWludCByZXQ7CiAJdTY0IG1hcF9sZW5ndGggPSBudW1fYnl0ZXM7CiAJc3RydWN0IGJ0cmZzX211bHRpX2JpbyAqbXVsdGkgPSBOVUxMOwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUZWxsIHRoZSBibG9jayBkZXZpY2UocykgdGhhdCB0aGUgc2VjdG9ycyBjYW4gYmUgZGlzY2FyZGVkICovCiAJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsIFJFQUQsCiAJCQkgICAgICBieXRlbnIsICZtYXBfbGVuZ3RoLCAmbXVsdGksIDApOwpAQCAtMTYwNCw5ICsxNjA0LDYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBpbnQgYnRyZnNfaW5jX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yOTgwLDEwICsyOTc3LDEwIEBACiAKIAlmcmVlX3NwYWNlID0gYnRyZnNfc3VwZXJfdG90YWxfYnl0ZXMoZGlza19zdXBlcik7CiAJLyoKLQkgKiB3ZSBhbGxvdyB0aGUgbWV0YWRhdGEgdG8gZ3JvdyB0byBhIG1heCBvZiBlaXRoZXIgNWdiIG9yIDUlIG9mIHRoZQorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciAxMGdiIG9yIDUlIG9mIHRoZQogCSAqIHNwYWNlIGluIHRoZSB2b2x1bWUuCiAJICovCi0JbWluX21ldGFkYXRhID0gbWluKCh1NjQpNSAqIDEwMjQgKiAxMDI0ICogMTAyNCwKKwltaW5fbWV0YWRhdGEgPSBtaW4oKHU2NCkxMCAqIDEwMjQgKiAxMDI0ICogMTAyNCwKIAkJCSAgICAgZGl2NjRfdTY0KGZyZWVfc3BhY2UgKiA1LCAxMDApKTsKIAlpZiAoaW5mby0+dG90YWxfYnl0ZXMgPj0gbWluX21ldGFkYXRhKSB7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTM2OTAsNiArMzY4NywxNCBAQAogCWlmIChpc19kYXRhKQogCQlnb3RvIHBpbml0OwogCisJLyoKKwkgKiBkaXNjYXJkIGlzIHNsb29vb3csIGFuZCBzbyB0cmlnZ2VyaW5nIGRpc2NhcmRzIG9uCisJICogaW5kaXZpZHVhbCBidHJlZSBibG9ja3MgaXNuJ3QgYSBnb29kIHBsYW4uICBKdXN0CisJICogcGluIGV2ZXJ5dGhpbmcgaW4gZGlzY2FyZCBtb2RlLgorCSAqLworCWlmIChidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJZ290byBwaW5pdDsKKwogCWJ1ZiA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIG51bV9ieXRlcyk7CiAJaWYgKCFidWYpCiAJCWdvdG8gcGluaXQ7CkBAIC00MDk3LDcgKzQxMDIsNyBAQAogfQogCiBlbnVtIGJ0cmZzX2xvb3BfdHlwZSB7Ci0JTE9PUF9DQUNIRURfT05MWSA9IDAsCisJTE9PUF9GSU5EX0lERUFMID0gMCwKIAlMT09QX0NBQ0hJTkdfTk9XQUlUID0gMSwKIAlMT09QX0NBQ0hJTkdfV0FJVCA9IDIsCiAJTE9PUF9BTExPQ19DSFVOSyA9IDMsCkBAIC00MTI2LDEyICs0MTMxLDE1IEBACiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCA9IE5VTEw7CiAJaW50IGVtcHR5X2NsdXN0ZXIgPSAyICogMTAyNCAqIDEwMjQ7CiAJaW50IGFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOworCWludCBkb25lX2NodW5rX2FsbG9jID0gMDsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIAlpbnQgbGFzdF9wdHJfbG9vcCA9IDA7CiAJaW50IGxvb3AgPSAwOwogCWJvb2wgZm91bmRfdW5jYWNoZWRfYmcgPSBmYWxzZTsKIAlib29sIGZhaWxlZF9jbHVzdGVyX3JlZmlsbCA9IGZhbHNlOwogCWJvb2wgZmFpbGVkX2FsbG9jID0gZmFsc2U7CisJdTY0IGlkZWFsX2NhY2hlX3BlcmNlbnQgPSAwOworCXU2NCBpZGVhbF9jYWNoZV9vZmZzZXQgPSAwOwogCiAJV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKIAlidHJmc19zZXRfa2V5X3R5cGUoaW5zLCBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwpAQCAtNDE2NywxNCArNDE3NSwxOSBAQAogCQllbXB0eV9jbHVzdGVyID0gMDsKIAogCWlmIChzZWFyY2hfc3RhcnQgPT0gaGludF9ieXRlKSB7CitpZGVhbF9jYWNoZToKIAkJYmxvY2tfZ3JvdXAgPSBidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAocm9vdC0+ZnNfaW5mbywKIAkJCQkJCSAgICAgICBzZWFyY2hfc3RhcnQpOwogCQkvKgogCQkgKiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYmxvY2sgZ3JvdXAgaWYgaXQgZG9lc24ndCBtYXRjaCBvdXIKIAkJICogYWxsb2NhdGlvbiBiaXRzLCBvciBpZiBpdHMgbm90IGNhY2hlZC4KKwkJICoKKwkJICogSG93ZXZlciBpZiB3ZSBhcmUgcmUtc2VhcmNoaW5nIHdpdGggYW4gaWRlYWwgYmxvY2sgZ3JvdXAKKwkJICogcGlja2VkIG91dCB0aGVuIHdlIGRvbid0IGNhcmUgdGhhdCB0aGUgYmxvY2sgZ3JvdXAgaXMgY2FjaGVkLgogCQkgKi8KIAkJaWYgKGJsb2NrX2dyb3VwICYmIGJsb2NrX2dyb3VwX2JpdHMoYmxvY2tfZ3JvdXAsIGRhdGEpICYmCi0JCSAgICBibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKSkgeworCQkgICAgKGJsb2NrX2dyb3VwLT5jYWNoZWQgIT0gQlRSRlNfQ0FDSEVfTk8gfHwKKwkJICAgICBzZWFyY2hfc3RhcnQgPT0gaWRlYWxfY2FjaGVfb2Zmc2V0KSkgewogCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAkJCWlmIChsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+bGlzdCkgfHwKIAkJCSAgICBibG9ja19ncm91cC0+cm8pIHsKQEAgLTQxODYsMTMgKzQxOTksMTMgQEAKIAkJCQkgKi8KIAkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgewogCQkJCWdvdG8gaGF2ZV9ibG9ja19ncm91cDsKKwkJCX0KIAkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgewogCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJfQogCX0KLQogc2VhcmNoOgogCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19ncm91cCwgJnNwYWNlX2luZm8tPmJsb2NrX2dyb3VwcywgbGlzdCkgewpAQCAtNDIwNCwyOCArNDIxNyw0NSBAQAogCiBoYXZlX2Jsb2NrX2dyb3VwOgogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9OTykpIHsKKwkJCXU2NCBmcmVlX3BlcmNlbnQ7CisKKwkJCWZyZWVfcGVyY2VudCA9IGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmJsb2NrX2dyb3VwLT5pdGVtKTsKKwkJCWZyZWVfcGVyY2VudCAqPSAxMDA7CisJCQlmcmVlX3BlcmNlbnQgPSBkaXY2NF91NjQoZnJlZV9wZXJjZW50LAorCQkJCQkJIGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0KTsKKwkJCWZyZWVfcGVyY2VudCA9IDEwMCAtIGZyZWVfcGVyY2VudDsKKwkJCWlmIChmcmVlX3BlcmNlbnQgPiBpZGVhbF9jYWNoZV9wZXJjZW50ICYmCisJCQkgICAgbGlrZWx5KCFibG9ja19ncm91cC0+cm8pKSB7CisJCQkJaWRlYWxfY2FjaGVfb2Zmc2V0ID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKKwkJCQlpZGVhbF9jYWNoZV9wZXJjZW50ID0gZnJlZV9wZXJjZW50OworCQkJfQorCiAJCQkvKgotCQkJICogd2Ugd2FudCB0byBzdGFydCBjYWNoaW5nIGt0aHJlYWRzLCBidXQgbm90IHRvbyBtYW55Ci0JCQkgKiByaWdodCBvZmYgdGhlIGJhdCBzbyB3ZSBkb24ndCBvdmVyd2hlbG0gdGhlIHN5c3RlbSwKLQkJCSAqIHNvIG9ubHkgc3RhcnQgdGhlbSBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDIgYW5kIHdlJ3JlCi0JCQkgKiBpbiB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLgorCQkJICogV2Ugb25seSB3YW50IHRvIHN0YXJ0IGt0aHJlYWQgY2FjaGluZyBpZiB3ZSBhcmUgYXQKKwkJCSAqIHRoZSBwb2ludCB3aGVyZSB3ZSB3aWxsIHdhaXQgZm9yIGNhY2hpbmcgdG8gbWFrZQorCQkJICogcHJvZ3Jlc3MsIG9yIGlmIG91ciBpZGVhbCBzZWFyY2ggaXMgb3ZlciBhbmQgd2UndmUKKwkJCSAqIGZvdW5kIHNvbWVib2R5IHRvIHN0YXJ0IGNhY2hpbmcuCiAJCQkgKi8KIAkJCWlmIChsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCB8fAotCQkJICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpIDwgMikgeworCQkJICAgIChsb29wID4gTE9PUF9GSU5EX0lERUFMICYmCisJCQkgICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpIDwgMikpIHsKIAkJCQlyZXQgPSBjYWNoZV9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCQkJQlVHX09OKHJldCk7CiAJCQl9CisJCQlmb3VuZF91bmNhY2hlZF9iZyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBJZiBsb29wIGlzIHNldCBmb3IgY2FjaGVkIG9ubHksIHRyeSB0aGUgbmV4dCBibG9jaworCQkJICogZ3JvdXAuCisJCQkgKi8KKwkJCWlmIChsb29wID09IExPT1BfRklORF9JREVBTCkKKwkJCQlnb3RvIGxvb3A7CiAJCX0KIAogCQljYWNoZWQgPSBibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKTsKLQkJaWYgKHVubGlrZWx5KCFjYWNoZWQpKSB7CisJCWlmICh1bmxpa2VseSghY2FjaGVkKSkKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gdHJ1ZTsKIAotCQkJLyogaWYgd2Ugb25seSB3YW50IGNhY2hlZCBiZ3MsIGxvb3AgKi8KLQkJCWlmIChsb29wID09IExPT1BfQ0FDSEVEX09OTFkpCi0JCQkJZ290byBsb29wOwotCQl9Ci0KIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5ybykpCiAJCQlnb3RvIGxvb3A7CiAKQEAgLTQ0MDUsOSArNDQzNSwxMSBAQAogCX0KIAl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAotCS8qIExPT1BfQ0FDSEVEX09OTFksIG9ubHkgc2VhcmNoIGZ1bGx5IGNhY2hlZCBibG9jayBncm91cHMKLQkgKiBMT09QX0NBQ0hJTkdfTk9XQUlULCBzZWFyY2ggcGFydGlhbGx5IGNhY2hlZCBibG9jayBncm91cHMsIGJ1dAotCSAqCQkJZG9udCB3YWl0IGZvUiB0aGVtIHRvIGZpbmlzaCBjYWNoaW5nCisJLyogTE9PUF9GSU5EX0lERUFMLCBvbmx5IHNlYXJjaCBjYWNoaW5nL2NhY2hlZCBiZydzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IKKwkgKgkJCWZvciB0aGVtIHRvIG1ha2UgY2FjaGluZyBwcm9ncmVzcy4gIEFsc28KKwkgKgkJCWRldGVybWluZSB0aGUgYmVzdCBwb3NzaWJsZSBiZyB0byBjYWNoZQorCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3Vwcywga2lja2luZworCSAqCQkJY2FjaGluZyBrdGhyZWFkcyBhcyB3ZSBtb3ZlIGFsb25nCiAJICogTE9PUF9DQUNISU5HX1dBSVQsIHNlYXJjaCBldmVyeXRoaW5nLCBhbmQgd2FpdCBpZiBvdXIgYmcgaXMgY2FjaGluZwogCSAqIExPT1BfQUxMT0NfQ0hVTkssIGZvcmNlIGEgY2h1bmsgYWxsb2NhdGlvbiBhbmQgdHJ5IGFnYWluCiAJICogTE9PUF9OT19FTVBUWV9TSVpFLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkKQEAgLTQ0MTYsMTIgKzQ0NDgsNDcgQEAKIAlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSAmJgogCSAgICAoZm91bmRfdW5jYWNoZWRfYmcgfHwgZW1wdHlfc2l6ZSB8fCBlbXB0eV9jbHVzdGVyIHx8CiAJICAgICBhbGxvd2VkX2NodW5rX2FsbG9jKSkgewotCQlpZiAoZm91bmRfdW5jYWNoZWRfYmcpIHsKKwkJaWYgKGxvb3AgPT0gTE9PUF9GSU5EX0lERUFMICYmIGZvdW5kX3VuY2FjaGVkX2JnKSB7CiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IGZhbHNlOwotCQkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgewotCQkJCWxvb3ArKzsKKwkJCWxvb3ArKzsKKwkJCWlmICghaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpKQogCQkJCWdvdG8gc2VhcmNoOwotCQkJfQorCisJCQkvKgorCQkJICogMSBvZiB0aGUgZm9sbG93aW5nIDIgdGhpbmdzIGhhdmUgaGFwcGVuZWQgc28gZmFyCisJCQkgKgorCQkJICogMSkgV2UgZm91bmQgYW4gaWRlYWwgYmxvY2sgZ3JvdXAgZm9yIGNhY2hpbmcgdGhhdAorCQkJICogaXMgbW9zdGx5IGZ1bGwgYW5kIHdpbGwgY2FjaGUgcXVpY2tseSwgc28gd2UgbWlnaHQKKwkJCSAqIGFzIHdlbGwgd2FpdCBmb3IgaXQuCisJCQkgKgorCQkJICogMikgV2Ugc2VhcmNoZWQgZm9yIGNhY2hlZCBvbmx5IGFuZCB3ZSBkaWRuJ3QgZmluZAorCQkJICogYW55dGhpbmcsIGFuZCB3ZSBkaWRuJ3Qgc3RhcnQgYW55IGNhY2hpbmcga3RocmVhZHMKKwkJCSAqIGVpdGhlciwgc28gY2hhbmNlcyBhcmUgd2Ugd2lsbCBsb29wIHRocm91Z2ggYW5kCisJCQkgKiBzdGFydCBhIGNvdXBsZSBjYWNoaW5nIGt0aHJlYWRzLCBhbmQgdGhlbiBjb21lIGJhY2sKKwkJCSAqIGFyb3VuZCBhbmQganVzdCB3YWl0IGZvciB0aGVtLiAgVGhpcyB3aWxsIGJlIHNsb3dlcgorCQkJICogYmVjYXVzZSB3ZSB3aWxsIGhhdmUgMiBjYWNoaW5nIGt0aHJlYWRzIHJlYWRpbmcgYXQKKwkJCSAqIHRoZSBzYW1lIHRpbWUgd2hlbiB3ZSBjb3VsZCBoYXZlIGp1c3Qgc3RhcnRlZCBvbmUKKwkJCSAqIGFuZCB3YWl0ZWQgZm9yIGl0IHRvIGdldCBmYXIgZW5vdWdoIHRvIGdpdmUgdXMgYW4KKwkJCSAqIGFsbG9jYXRpb24sIHNvIGdvIGFoZWFkIGFuZCBnbyB0byB0aGUgd2FpdCBjYWNoaW5nCisJCQkgKiBsb29wLgorCQkJICovCisJCQlsb29wID0gTE9PUF9DQUNISU5HX1dBSVQ7CisJCQlzZWFyY2hfc3RhcnQgPSBpZGVhbF9jYWNoZV9vZmZzZXQ7CisJCQlpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwkJCWdvdG8gaWRlYWxfY2FjaGU7CisJCX0gZWxzZSBpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpIHsKKwkJCS8qCisJCQkgKiBEaWRuJ3QgZmluZCBhIHVuY2FjaGVkIGJnLCB3YWl0IG9uIGFueXRoaW5nIHdlIGZpbmQKKwkJCSAqIG5leHQuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCWdvdG8gc2VhcmNoOworCQl9CisKKwkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgeworCQkJbG9vcCsrOworCQkJZ290byBzZWFyY2g7CiAJCX0KIAogCQlpZiAobG9vcCA9PSBMT09QX0FMTE9DX0NIVU5LKSB7CkBAIC00NDMzLDcgKzQ1MDAsOCBAQAogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCiAJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKIAkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOwotCQl9IGVsc2UgeworCQkJZG9uZV9jaHVua19hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MpIHsKIAkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggMmM3MjZiNy4uY2NiZGNiNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJd3JpdGVfbG9jaygmdHJlZS0+bG9jayk7CiAJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcodHJlZSwgc3RhcnQsIGxlbik7CiAKLQlXQVJOX09OKGVtLT5zdGFydCAhPSBzdGFydCB8fCAhZW0pOworCVdBUk5fT04oIWVtIHx8IGVtLT5zdGFydCAhPSBzdGFydCk7CiAKIAlpZiAoIWVtKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCAyZDYyM2FhLi4wNjU1MGFmIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMDg2LDggKzEwODYsMTAgQEAKIAkJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQllbHNlCiAJCQkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlIGlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKIAkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJfSBlbHNlIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJfQogCQl9CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKQEAgLTExMzcsNiArMTEzOSwxMyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCisKKwkvKiB3ZSB3YWl0IGZpcnN0LCBzaW5jZSB0aGUgd3JpdGViYWNrIG1heSBjaGFuZ2UgdGhlIGlub2RlICovCisJcm9vdC0+bG9nX2JhdGNoKys7CisJLyogdGhlIFZGUyBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlIGZvciB1cyAqLworCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJcm9vdC0+bG9nX2JhdGNoKys7CisKIAkvKgogCSAqIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqIGFuZCBzZWUgaWYgaXRzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQKQEAgLTExNDQsNiArMTE1MywxMSBAQAogCWlmICghQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBpZiB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZWQgdGhpcyBmaWxlIHdhcyBiZWZvcmUKKwkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQorCSAqIHN5bmNpbmcKKwkgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CkBAIC0xMTUzLDEzICsxMTY3LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQlyb290LT5sb2dfYmF0Y2grKzsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKLQlyb290LT5sb2dfYmF0Y2grKzsKLQotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdAogCSAqLwpAQCAtMTE4OCwxNCArMTE5NSwxOCBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQllbHNlCisJaWYgKHJldCAhPSBCVFJGU19OT19MT0dfU1lOQykgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZWxzZQorCQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDVjMmNhYWQuLmNiMjg0OWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCQl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OwogCQkJd2luZG93X2ZyZWUgPSBlbnRyeS0+Ynl0ZXM7CiAJCQlsYXN0ID0gZW50cnk7Ci0JCQltYXhfZXh0ZW50ID0gMDsKKwkJCW1heF9leHRlbnQgPSBlbnRyeS0+Ynl0ZXM7CiAJCX0gZWxzZSB7CiAJCQlsYXN0ID0gbmV4dDsKIAkJCXdpbmRvd19mcmVlICs9IG5leHQtPmJ5dGVzOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggOWUxMzhiNy4uYjNhZDE2OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfbWFwX3RyZWUgKmVtX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlOwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqaW9fdHJlZTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX2Nvdy0+ZXh0ZW50cykpCiAJCXJldHVybiAwOwpAQCAtNTUyLDYgKzU1Miw3IEBACiAKIAkJaW9fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKIAorcmV0cnk6CiAJCS8qIGRpZCB0aGUgY29tcHJlc3Npb24gY29kZSBmYWxsIGJhY2sgdG8gdW5jb21wcmVzc2VkIElPPyAqLwogCQlpZiAoIWFzeW5jX2V4dGVudC0+cGFnZXMpIHsKIAkJCWludCBwYWdlX3N0YXJ0ZWQgPSAwOwpAQCAtNTYyLDExICs1NjMsMTEgQEAKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsIEdGUF9OT0ZTKTsKIAogCQkJLyogYWxsb2NhdGUgYmxvY2tzICovCi0JCQljb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJICAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAotCQkJCSAgICAgICAmcGFnZV9zdGFydGVkLCAmbnJfd3JpdHRlbiwgMCk7CisJCQlyZXQgPSBjb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKKwkJCQkJICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAorCQkJCQkgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKIAogCQkJLyoKIAkJCSAqIGlmIHBhZ2Vfc3RhcnRlZCwgY293X2ZpbGVfcmFuZ2UgaW5zZXJ0ZWQgYW4KQEAgLTU3NCw3ICs1NzUsNyBAQAogCQkJICogYW5kIElPIGZvciB1cy4gIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdWJtaXQKIAkJCSAqIGFsbCB0aG9zZSBwYWdlcyBkb3duIHRvIHRoZSBkcml2ZS4KIAkJCSAqLwotCQkJaWYgKCFwYWdlX3N0YXJ0ZWQpCisJCQlpZiAoIXBhZ2Vfc3RhcnRlZCAmJiAhcmV0KQogCQkJCWV4dGVudF93cml0ZV9sb2NrZWRfcmFuZ2UoaW9fdHJlZSwKIAkJCQkJCSAgaW5vZGUsIGFzeW5jX2V4dGVudC0+c3RhcnQsCiAJCQkJCQkgIGFzeW5jX2V4dGVudC0+c3RhcnQgKwpAQCAtNjAyLDcgKzYwMywyMSBAQAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgMCwgYWxsb2NfaGludCwKIAkJCQkJICAgKHU2NCktMSwgJmlucywgMSk7Ci0JCUJVR19PTihyZXQpOworCQlpZiAocmV0KSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhc3luY19leHRlbnQtPm5yX3BhZ2VzOyBpKyspIHsKKwkJCQlXQVJOX09OKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0tPm1hcHBpbmcpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShhc3luY19leHRlbnQtPnBhZ2VzW2ldKTsKKwkJCX0KKwkJCWtmcmVlKGFzeW5jX2V4dGVudC0+cGFnZXMpOworCQkJYXN5bmNfZXh0ZW50LT5ucl9wYWdlcyA9IDA7CisJCQlhc3luY19leHRlbnQtPnBhZ2VzID0gTlVMTDsKKwkJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJZ290byByZXRyeTsKKwkJfQorCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CiAJCWVtLT5zdGFydCA9IGFzeW5jX2V4dGVudC0+c3RhcnQ7CiAJCWVtLT5sZW4gPSBhc3luY19leHRlbnQtPnJhbV9zaXplOwpAQCAtNzQzLDggKzc1OCwyMiBAQAogCWVtID0gc2VhcmNoX2V4dGVudF9tYXBwaW5nKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUsCiAJCQkJICAgc3RhcnQsIG51bV9ieXRlcyk7CiAJaWYgKGVtKSB7Ci0JCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7Ci0JCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCS8qCisJCSAqIGlmIGJsb2NrIHN0YXJ0IGlzbid0IGFuIGFjdHVhbCBibG9jayBudW1iZXIgdGhlbiBmaW5kIHRoZQorCQkgKiBmaXJzdCBibG9jayBpbiB0aGlzIGlub2RlIGFuZCB1c2UgdGhhdCBhcyBhIGhpbnQuICBJZiB0aGF0CisJCSAqIGJsb2NrIGlzIGFsc28gYm9ndXMgdGhlbiBqdXN0IGRvbid0IHdvcnJ5IGFib3V0IGl0LgorCQkgKi8KKwkJaWYgKGVtLT5ibG9ja19zdGFydCA+PSBFWFRFTlRfTUFQX0xBU1RfQllURSkgeworCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJCWVtID0gc2VhcmNoX2V4dGVudF9tYXBwaW5nKGVtX3RyZWUsIDAsIDApOworCQkJaWYgKGVtICYmIGVtLT5ibG9ja19zdGFydCA8IEVYVEVOVF9NQVBfTEFTVF9CWVRFKQorCQkJCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7CisJCQlpZiAoZW0pCisJCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJfSBlbHNlIHsKKwkJCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7CisJCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUubG9jayk7CiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIG51bV9ieXRlcyAtIDEsIDApOwpAQCAtMjQ3NCw3ICsyNTAzLDE5IEBACiAKIAlyb290ID0gQlRSRlNfSShkaXIpLT5yb290OwogCisJLyoKKwkgKiA1IGl0ZW1zIGZvciB1bmxpbmsgaW5vZGUKKwkgKiAxIGZvciBvcnBoYW4KKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIApAQCAtMjQ4OSw2ICsyNTMwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNTY5LDcgKzI2MTEsMTYgQEAKIAkgICAgaW5vZGUtPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CisKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAlpZiAodW5saWtlbHkoaW5vZGUtPmlfaW5vID09IEJUUkZTX0VNUFRZX1NVQlZPTF9ESVJfT0JKRUNUSUQpKSB7CkBAIC0yNTkyLDYgKzI2NDMsNyBAQAogb3V0OgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCiAJaWYgKHJldCAmJiAhZXJyKQpAQCAtMzAzMiwxMiArMzA4NCwyMiBAQAogCiAJaWYgKChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpID09IDApCiAJCWdvdG8gb3V0OworCXJldCA9IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXJldCA9IC1FTk9NRU07CiBhZ2FpbjoKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKLQlpZiAoIXBhZ2UpCisJaWYgKCFwYWdlKSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJCWdvdG8gb3V0OworCX0KIAogCXBhZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKIAlwYWdlX2VuZCA9IHBhZ2Vfc3RhcnQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxOwpAQCAtMzA3MCw2ICszMTMyLDEwIEBACiAJCWdvdG8gYWdhaW47CiAJfQogCisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKwogCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKIAlpZiAocmV0KSB7CiAJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKQEAgLTMwODgsNiArMzE1NCw5IEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgorCWlmIChyZXQpCisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiBvdXQ6CkBAIC0zMTExLDcgKzMxODAsOSBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CkBAIC0zNDgwLDYgKzM1NTEsNyBAQAogCWJpLT5nZW5lcmF0aW9uID0gMDsKIAliaS0+c2VxdWVuY2UgPSAwOwogCWJpLT5sYXN0X3RyYW5zID0gMDsKKwliaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWJpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWJpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJYmktPnJlc2VydmVkX2J5dGVzID0gMDsKQEAgLTQ5ODAsNyArNTA1Miw5IEBACiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0JQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uICsgMTsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOworCiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgpAQCAtNTAwNSw3ICs1MDc5LDkgQEAKIAlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogCQlyZXR1cm47CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCXJldCA9IGJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKQEAgLTUxMDAsOSArNTE3NiwxMSBAQAogCWlmICghZWkpCiAJCXJldHVybiBOVUxMOwogCWVpLT5sYXN0X3RyYW5zID0gMDsKKwllaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWVpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWVpLT5vdXRzdGFuZGluZ19leHRlbnRzID0gMDsKIAllaS0+cmVzZXJ2ZWRfZXh0ZW50cyA9IDA7CisJZWktPnJvb3QgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZlaS0+YWNjb3VudGluZ19sb2NrKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmZWktPm9yZGVyZWRfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CkBAIC01MTE5LDYgKzUxOTcsMTQgQEAKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKIAkvKgorCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVyZSB3ZSBjcmVhdGUgYW4gaW5vZGUsIGJ1dCBzb21lYm9keSBlbHNlIGFsc28KKwkgKiBjcmVhdGVkIHRoZSBzYW1lIGlub2RlIGFuZCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIG9uZSB3ZSBhbHJlYWR5CisJICogY3JlYXRlZC4KKwkgKi8KKwlpZiAoIXJvb3QpCisJCWdvdG8gZnJlZTsKKworCS8qCiAJICogTWFrZSBzdXJlIHdlJ3JlIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJlZCBvcGVyYXRpb24KIAkgKiBsaXN0cy4KIAkgKi8KQEAgLTUxNTMsNiArNTIzOSw3IEBACiAJfQogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CitmcmVlOgogCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKIH0KIApAQCAtNTI1OCwxMSArNTM0NSwxNCBAQAogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAogCS8qCi0JICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCi0JICogMSBpdGVtIGZvciBvcnBoYW4gZW50cnkKLQkgKiAxIGl0ZW0gZm9yIHJlZgorCSAqIFdlIHdhbnQgdG8gcmVzZXJ2ZSB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSBhbW91bnQgb2YgaXRlbXMuICBTbyBpZgorCSAqIGJvdGggaW5vZGVzIGFyZSBzdWJ2b2xzIGFuZCB3ZSBuZWVkIHRvIHVubGluayB0aGVtIHRoZW4gdGhhdCB3b3VsZAorCSAqIHJlcXVpcmUgNCBpdGVtIG1vZGlmaWNhdGlvbnMsIGJ1dCBpZiB0aGV5IGFyZSBib3RoIG5vcm1hbCBpbm9kZXMgaXQKKwkgKiB3b3VsZCByZXF1aXJlIDUgaXRlbSBtb2RpZmljYXRpb25zLCBzbyB3ZSdsbCBhc3N1bWUgdGhlaXIgbm9ybWFsCisJICogaW5vZGVzLiAgU28gNSAqIDIgaXMgMTAsIHBsdXMgMSBmb3IgdGhlIG5ldyBsaW5rLCBzbyAxMSB0b3RhbCBpdGVtcworCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgogCSAqLwotCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNCk7CisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxMSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTM3OCw3ICs1NDY4LDcgQEAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKIAotCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA0KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKaW5kZXggOTM1MTQyOC4uNjdmYTJkMiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcm9vdC10cmVlLmMKKysrIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKQEAgLTE1OSw3ICsxNTksNiBAQAogCXdyaXRlX2V4dGVudF9idWZmZXIobCwgaXRlbSwgcHRyLCBzaXplb2YoKml0ZW0pKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiBvdXQ6Ci0JYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzMyLDcgKzMzMSw2IEBACiAJQlVHX09OKHJlZnMgIT0gMCk7CiAJcmV0ID0gYnRyZnNfZGVsX2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgpOwogb3V0OgotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDlkZTliMjIuLjc1MmE1NDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNjYsNyArNjYsOCBAQAogCU9wdF9kZWdyYWRlZCwgT3B0X3N1YnZvbCwgT3B0X2RldmljZSwgT3B0X25vZGF0YXN1bSwgT3B0X25vZGF0YWNvdywKIAlPcHRfbWF4X2V4dGVudCwgT3B0X21heF9pbmxpbmUsIE9wdF9hbGxvY19zdGFydCwgT3B0X25vYmFycmllciwKIAlPcHRfc3NkLCBPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwKLQlPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9lcnIsCisJT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LAorCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODgsNiArODksNyBAQAogCXtPcHRfbm90cmVlbG9nLCAibm90cmVlbG9nIn0sCiAJe09wdF9mbHVzaG9uY29tbWl0LCAiZmx1c2hvbmNvbW1pdCJ9LAogCXtPcHRfcmF0aW8sICJtZXRhZGF0YV9yYXRpbz0lZCJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yNTcsNiArMjU5LDkgQEAKIAkJCQkgICAgICAgaW5mby0+bWV0YWRhdGFfcmF0aW8pOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAlzYi0+c19leHBvcnRfb3AgPSAmYnRyZnNfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGJ0cmZzX3hhdHRyX2hhbmRsZXJzOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7Ci0jaWZkZWYgQ09ORklHX0JUUkZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCAwYjhmMzZkLi5jMjA3ZThjIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTE2Myw4ICsxNjMsMTQgQEAKIAl9CiB9CiAKK2VudW0gYnRyZnNfdHJhbnNfdHlwZSB7CisJVFJBTlNfU1RBUlQsCisJVFJBTlNfSk9JTiwKKwlUUkFOU19VU0VSU1BBQ0UsCit9OworCiBzdGF0aWMgc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCSAgICAgaW50IG51bV9ibG9ja3MsIGludCB3YWl0KQorCQkJCQkgICAgIGludCBudW1fYmxvY2tzLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpoID0KIAkJa21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCBHRlBfTk9GUyk7CkBAIC0xNzIsNyArMTc4LDggQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAoIXJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcgJiYKLQkgICAgKCh3YWl0ID09IDEgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8IHdhaXQgPT0gMikpCisJICAgICgodHlwZSA9PSBUUkFOU19TVEFSVCAmJiAhcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykgfHwKKwkgICAgIHR5cGUgPT0gVFJBTlNfVVNFUlNQQUNFKSkKIAkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOwogCXJldCA9IGpvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJQlVHX09OKHJldCk7CkBAIC0xODYsNyArMTkzLDcgQEAKIAloLT5hbGxvY19leGNsdWRlX3N0YXJ0ID0gMDsKIAloLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKIAotCWlmICghY3VycmVudC0+am91cm5hbF9pbmZvKQorCWlmICghY3VycmVudC0+am91cm5hbF9pbmZvICYmIHR5cGUgIT0gVFJBTlNfVVNFUlNQQUNFKQogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBoOwogCiAJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbi0+dXNlX2NvdW50Kys7CkBAIC0xOTgsMTggKzIwNSwxOCBAQAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgMSk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIFRSQU5TX1NUQVJUKTsKIH0KIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgMCk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIFRSQU5TX0pPSU4pOwogfQogCiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqciwKIAkJCQkJCQkgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHIsIG51bV9ibG9ja3MsIDIpOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyLCBudW1fYmxvY2tzLCBUUkFOU19VU0VSU1BBQ0UpOwogfQogCiAvKiB3YWl0IGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCB0byBiZSBmdWxseSBjb21wbGV0ZSAqLwpAQCAtMzQ0LDEwICszNTEsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzk0LDYgKzQwMSwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MjQsNiArNDU0LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggNjYzYzY3NC4uZDRlM2U3YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC03OSw2ICs3OSw3IEBACiAJCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb24tPnRyYW5zaWQ7CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOwogfQogCiBpbnQgYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMTA3LDUgKzEwOCw5IEBACiAJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKK2ludCBidHJmc193cml0ZV9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25faW5fY29tbWl0KHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggNGVkZmRjMi4uNzQxNjY2YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0xOTgwLDYgKzE5ODAsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZyA9IHJvb3QtPmxvZ19yb290OwogCXN0cnVjdCBidHJmc19yb290ICpsb2dfcm9vdF90cmVlID0gcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZTsKKwl1NjQgbG9nX3RyYW5zaWQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAlpbmRleDEgPSByb290LT5sb2dfdHJhbnNpZCAlIDI7CkBAIC0xOTk0LDEyICsxOTk1LDEzIEBACiAJaWYgKGF0b21pY19yZWFkKCZyb290LT5sb2dfY29tbWl0WyhpbmRleDEgKyAxKSAlIDJdKSkKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCByb290LCByb290LT5sb2dfdHJhbnNpZCAtIDEpOwogCi0Jd2hpbGUgKHJvb3QtPmxvZ19tdWx0aXBsZV9waWRzKSB7CisJd2hpbGUgKDEpIHsKIAkJdW5zaWduZWQgbG9uZyBiYXRjaCA9IHJvb3QtPmxvZ19iYXRjaDsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKLQorCQlpZiAocm9vdC0+bG9nX211bHRpcGxlX3BpZHMpIHsKKwkJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJfQogCQl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIHJvb3QpOwogCQlpZiAoYmF0Y2ggPT0gcm9vdC0+bG9nX2JhdGNoKQogCQkJYnJlYWs7CkBAIC0yMDEyLDEyICsyMDE0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkvKiB3ZSBzdGFydCBJTyBvbiAgYWxsIHRoZSBtYXJrZWQgZXh0ZW50cyBoZXJlLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKwkgKiB3YWl0IGZvciB0aGVtIHVudGlsIGxhdGVyLgorCSAqLworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJmxvZy0+cm9vdF9pdGVtLCBsb2ctPm5vZGUpOwogCiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKKwlsb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ190cmFuc2lkKys7CiAJbG9nLT5sb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ19zdGFydF9waWQgPSAwOwpAQCAtMjA0Niw2ICsyMDUyLDcgQEAKIAogCWluZGV4MiA9IGxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkICUgMjsKIAlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSkpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKQEAgLTIwNjUsNiArMjA3Miw3IEBACiAJICogY2hlY2sgdGhlIGZ1bGwgY29tbWl0IGZsYWcgYWdhaW4KIAkgKi8KIAlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPT0gdHJhbnMtPnRyYW5zaWQpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXRfd2FrZV9sb2dfcm9vdDsKQEAgLTIwNzMsNiArMjA4MSw3IEBACiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nX3Jvb3RfdHJlZSwKIAkJCQkmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKKwlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAogCWJ0cmZzX3NldF9zdXBlcl9sb2dfcm9vdCgmcm9vdC0+ZnNfaW5mby0+c3VwZXJfZm9yX2NvbW1pdCwKIAkJCQlsb2dfcm9vdF90cmVlLT5ub2RlLT5zdGFydCk7CkBAIC0yMDkyLDkgKzIxMDEsMTQgQEAKIAkgKiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiBvcGVuLCBzbyBhIGZ1bGwgY29tbWl0IGNhbid0IGhvcAogCSAqIGluIGFuZCBjYXVzZSBwcm9ibGVtcyBlaXRoZXIuCiAJICovCi0Jd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMik7CisJd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMSk7CiAJcmV0ID0gMDsKIAorCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKHJvb3QtPmxhc3RfbG9nX2NvbW1pdCA8IGxvZ190cmFuc2lkKQorCQlyb290LT5sYXN0X2xvZ19jb21taXQgPSBsb2dfdHJhbnNpZDsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisKIG91dF93YWtlX2xvZ19yb290OgogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMCk7CiAJc21wX21iKCk7CkBAIC0yODYyLDYgKzI4NzYsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGlub2RlX2luX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5sb2dnZWRfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zIDw9IHJvb3QtPmxhc3RfbG9nX2NvbW1pdCkKKwkJcmV0ID0gMTsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogaGVscGVyIGZ1bmN0aW9uIGFyb3VuZCBidHJmc19sb2dfaW5vZGUgdG8gbWFrZSBzdXJlIG5ld2x5IGNyZWF0ZWQKICAqIHBhcmVudCBkaXJlY3RvcmllcyBhbHNvIGVuZCB1cCBpbiB0aGUgbG9nLiAgQSBtaW5pbWFsIGlub2RlIGFuZCBiYWNrcmVmCkBAIC0yOTAxLDYgKzI5MzAsMTEgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVuZF9ub190cmFuczsKIAorCWlmIChpbm9kZV9pbl9sb2codHJhbnMsIGlub2RlKSkgeworCQlyZXQgPSBCVFJGU19OT19MT0dfU1lOQzsKKwkJZ290byBlbmRfbm9fdHJhbnM7CisJfQorCiAJc3RhcnRfbG9nX3RyYW5zKHRyYW5zLCByb290KTsKIAogCXJldCA9IGJ0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuaCBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKaW5kZXggZDA5Yzc2MC4uMDc3NmVhYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuaAorKysgYi9mcy9idHJmcy90cmVlLWxvZy5oCkBAIC0xOSw2ICsxOSw5IEBACiAjaWZuZGVmIF9fVFJFRV9MT0dfCiAjZGVmaW5lIF9fVFJFRV9MT0dfCiAKKy8qIHJldHVybiB2YWx1ZSBmb3IgYnRyZnNfbG9nX2RlbnRyeV9zYWZlIHRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBsb2cgaXQgYXQgYWxsICovCisjZGVmaW5lIEJUUkZTX05PX0xPR19TWU5DIDI1NgorCiBpbnQgYnRyZnNfc3luY19sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIuYyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggYjBmYzkzZi4uYjZkZDU5NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMveGF0dHIuYworKysgYi9mcy9idHJmcy94YXR0ci5jCkBAIC0yNjAsNyArMjYwLDcgQEAKICAqIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgZGlyZWN0bHkuCiAgKi8KIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpidHJmc194YXR0cl9oYW5kbGVyc1tdID0gewotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAJJmJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKIAkmYnRyZnNfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggNjkyOGMyNC4uNTY0NjcyNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC0zODgsNCArMzg4LDUgQEAKIAkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCBfX3U2NCAqcEV4dEF0dHJCaXRzLCBfX3U2NCAqcE1hc2spOworZXh0ZXJuIHZvaWQgY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDMwMDNlMC4uNjNlYTgzZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1NzcsNyArMTU3Nyw4IEBACiAKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKLQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOworCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCisJCQlrZnJlZSh0Y3Bfc2VzLT5ob3N0bmFtZSk7CiAJCWlmICh0Y3Bfc2VzLT5zc29ja2V0KQogCQkJc29ja19yZWxlYXNlKHRjcF9zZXMtPnNzb2NrZXQpOwogCQlrZnJlZSh0Y3Bfc2VzKTsKQEAgLTIyMTksMTYgKzIyMjAsOCBAQAogCQkgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBjb25zdCBjaGFyICpmdWxsX3BhdGgpCiB7CiAJaW50IHJjOwotCV9fdTY0IGlub2RlX251bTsKIAlGSUxFX0FMTF9JTkZPICpwZmlsZV9pbmZvOwogCi0JcmMgPSBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZpbm9kZV9udW0sCi0JCQkJICAgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCSAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQlpZiAocmMgIT0gLUVPUE5PVFNVUFApCi0JCXJldHVybiByYzsKLQogCXBmaWxlX2luZm8gPSBrbWFsbG9jKHNpemVvZihGSUxFX0FMTF9JTkZPKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBmaWxlX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggNWUyNDkyNS4uY2FiYWJkOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNTEyLDEzICs1MTIsMTAgQEAKIAkJCQkJY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCQlpZiAocmMxKSB7CisJCQlpZiAocmMxIHx8ICFmYXR0ci5jZl91bmlxdWVpZCkgewogCQkJCWNGWUkoMSwgKCJHZXRTcnZJbm9kZU51bSByYyAlZCIsIHJjMSkpOwogCQkJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaXVuaXF1ZShzYiwgUk9PVF9JKTsKLQkJCQkvKiBkaXNhYmxlIHNlcnZlcmlubyBpZiBjYWxsIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCQlpZiAocmMxID09IC1FSU5WQUwpCi0JCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICY9Ci0JCQkJCQkJfkNJRlNfTU9VTlRfU0VSVkVSX0lOVU07CisJCQkJY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oY2lmc19zYik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDAyNDFiMjUuLjFlMjVlZmMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC03MTUsMyArNzE1LDE3IEBACiBjdG9VQ1Nfb3V0OgogCXJldHVybiBpOwogfQorCit2b2lkCitjaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQoreworCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pIHsKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJj0gQ0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJY0VSUk9SKDEsICgiQXV0b2Rpc2FibGluZyB0aGUgdXNlIG9mIHNlcnZlciBpbm9kZSBudW1iZXJzIG9uICIKKwkJCSAgICIlcy4gVGhpcyBzZXJ2ZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlbSAiCisJCQkgICAicHJvcGVybHkuIEhhcmRsaW5rcyB3aWxsIG5vdCBiZSByZWNvZ25pemVkIG9uIHRoaXMgIgorCQkJICAgIm1vdW50LiBDb25zaWRlciBtb3VudGluZyB3aXRoIHRoZSBcIm5vc2VydmVyaW5vXCIgIgorCQkJICAgIm9wdGlvbiB0byBzaWxlbmNlIHRoaXMgbWVzc2FnZS4iLAorCQkJICAgY2lmc19zYi0+dGNvbi0+dHJlZU5hbWUpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDFmMDk4Y2EuLmY4NDA2MmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC03MjcsMTEgKzcyNywxMiBAQAogCQljaWZzX2Rpcl9pbmZvX3RvX2ZhdHRyKCZmYXR0ciwgKEZJTEVfRElSRUNUT1JZX0lORk8gKikKIAkJCQkJcGZpbmRFbnRyeSwgY2lmc19zYik7CiAKLQkvKiBGSVhNRTogbWFrZSBfdG9fZmF0dHIgZnVuY3Rpb25zIGZpbGwgdGhpcyBvdXQgKi8KLQlpZiAocENpZnNGLT5zcmNoX2luZi5pbmZvX2xldmVsID09IFNNQl9GSU5EX0ZJTEVfSURfRlVMTF9ESVJfSU5GTykKKwlpZiAoaW51bSAmJiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSkgewogCQlmYXR0ci5jZl91bmlxdWVpZCA9IGludW07Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaXVuaXF1ZShzYiwgUk9PVF9JKTsKKwkJY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oY2lmc19zYik7CisJfQogCiAJaW5vID0gY2lmc191bmlxdWVpZF90b19pbm9fdChmYXR0ci5jZl91bmlxdWVpZCk7CiAJdG1wX2RlbnRyeSA9IGNpZnNfcmVhZGRpcl9sb29rdXAoZmlsZS0+Zl9kZW50cnksICZxc3RyaW5nLCAmZmF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkNTc2YjU1Li42YzE5MDQwIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTUzMiw2ICsxNTMyLDggQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKKwljdXJyZW50LT5zdGFja19zdGFydCA9IGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjazsKKwogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KIAljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggZjkxZmQ1MWIuLmQ4NGU3MDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCiBzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IHNwYWNlX3Jlc3YJX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CiAKIAlpZiAoY29weV9pbl91c2VyKCZwLT5sX3R5cGUsCSZwMzItPmxfdHlwZSwJc2l6ZW9mKHMxNikpIHx8CkBAIC0yODAyLDcgKzI4MDIsNyBAQAogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CiAJY2FzZSBGU19JT0NfUkVTVlNQNjQ6Ci0JCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJZXJyb3IgPSBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBkNDliZTZiLi5iYTExMmJkIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC02MjQsMTAgKzYyNCw4IEBACiAJLyogTW92ZSBzdGFjayBwYWdlcyBkb3duIGluIG1lbW9yeS4gKi8KIAlpZiAoc3RhY2tfc2hpZnQpIHsKIAkJcmV0ID0gc2hpZnRfYXJnX3BhZ2VzKHZtYSwgc3RhY2tfc2hpZnQpOwotCQlpZiAocmV0KSB7Ci0JCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUApAQCAtNjQxLDcgKzYzOSw3IEBACiAKIG91dF91bmxvY2s6CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9mc3luYy5jIGIvZnMvZXh0My9mc3luYy5jCmluZGV4IDQ1MWQxNjYuLjgyMDlmMjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZnN5bmMuYworKysgYi9mcy9leHQzL2ZzeW5jLmMKQEAgLTQ2LDE5ICs0NiwyMSBAQAogaW50IGV4dDNfc3luY19maWxlKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CisJam91cm5hbF90ICpqb3VybmFsID0gRVhUM19TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbDsKIAlpbnQgcmV0ID0gMDsKKwl0aWRfdCBjb21taXRfdGlkOworCisJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm4gMDsKIAogCUpfQVNTRVJUKGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpID09IE5VTEwpOwogCiAJLyoKLQkgKiBkYXRhPXdyaXRlYmFjazoKKwkgKiBkYXRhPXdyaXRlYmFjayxvcmRlcmVkOgogCSAqICBUaGUgY2FsbGVyJ3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHN5bmMgdGhlIG1ldGFkYXRhCi0JICoKLQkgKiBkYXRhPW9yZGVyZWQ6Ci0JICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKSB3aWxsIHdyaXRlIHRoZSBkYXRhIGFuZAotCSAqICBzeW5jX2lub2RlKCkgd2lsbCB3cml0ZSB0aGUgaW5vZGUgaWYgaXQgaXMgZGlydHkuICBUaGVuIHRoZSBjYWxsZXIncwotCSAqICBmaWxlbWFwX2ZkYXRhd2FpdCgpIHdpbGwgd2FpdCBvbiB0aGUgcGFnZXMuCisJICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBhIHByb3BlciB0cmFuc2FjdGlvbgorCSAqICB0byBjb21taXQgaGVyZS4KIAkgKgogCSAqIGRhdGE9am91cm5hbDoKIAkgKiAgZmlsZW1hcF9mZGF0YXdyaXRlIHdvbid0IGRvIGFueXRoaW5nICh0aGUgYnVmZmVycyBhcmUgY2xlYW4pLgpAQCAtNzMsMjIgKzc1LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9EQVRBU1lOQykpCi0JCWdvdG8gZmx1c2g7CisJaWYgKGRhdGFzeW5jKQorCQljb21taXRfdGlkID0gYXRvbWljX3JlYWQoJmVpLT5pX2RhdGFzeW5jX3RpZCk7CisJZWxzZQorCQljb21taXRfdGlkID0gYXRvbWljX3JlYWQoJmVpLT5pX3N5bmNfdGlkKTsKIAotCS8qCi0JICogVGhlIFZGUyBoYXMgd3JpdHRlbiB0aGUgZmlsZSBkYXRhLiAgSWYgdGhlIGlub2RlIGlzIHVuYWx0ZXJlZAotCSAqIHRoZW4gd2UgbmVlZCBub3Qgc3RhcnQgYSBjb21taXQuCi0JICovCi0JaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRElSVFlfU1lOQ3xJX0RJUlRZX0RBVEFTWU5DKSkgewotCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAotCQkJLm5yX3RvX3dyaXRlID0gMCwgLyogc3lzX2ZzeW5jIGRpZCB0aGlzICovCi0JCX07Ci0JCXJldCA9IHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOworCWlmIChsb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpKSB7CisJCWxvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKIAkJZ290byBvdXQ7CiAJfQotZmx1c2g6CisKIAkvKgogCSAqIEluIGNhc2Ugd2UgZGlkbid0IGNvbW1pdCBhIHRyYW5zYWN0aW9uLCB3ZSBoYXZlIHRvIGZsdXNoCiAJICogZGlzayBjYWNoZXMgbWFudWFsbHkgc28gdGhhdCBkYXRhIHJlYWxseSBpcyBvbiBwZXJzaXN0ZW50CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggYWNmMWIxNC4uMzU0ZWQzYiAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtNjk5LDggKzY5OSw5IEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGV4dDNfYmxvY2tfYWxsb2NfaW5mbyAqYmxvY2tfaTsKIAlleHQzX2ZzYmxrX3QgY3VycmVudF9ibG9jazsKKwlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CiAKLQlibG9ja19pID0gRVhUM19JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvOworCWJsb2NrX2kgPSBlaS0+aV9ibG9ja19hbGxvY19pbmZvOwogCS8qCiAJICogSWYgd2UncmUgc3BsaWNpbmcgaW50byBhIFt0ZF1pbmRpcmVjdCBibG9jayAoYXMgb3Bwb3NlZCB0byB0aGUKIAkgKiBpbm9kZSkgdGhlbiB3ZSBuZWVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gdGhlIFt0ZF1pbmRpcmVjdCBibG9jawpAQCAtNzQxLDYgKzc0Miw4IEBACiAKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCS8qIGV4dDNfbWFya19pbm9kZV9kaXJ0eSBhbHJlYWR5IHVwZGF0ZWQgaV9zeW5jX3RpZCAqLworCWF0b21pY19zZXQoJmVpLT5pX2RhdGFzeW5jX3RpZCwgaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCk7CiAKIAkvKiBoYWQgd2Ugc3BsaWNlZCBpdCBvbnRvIGluZGlyZWN0IGJsb2NrPyAqLwogCWlmICh3aGVyZS0+YmgpIHsKQEAgLTE3MzUsNiArMTczOCw3IEBACiAJc3NpemVfdCByZXQ7CiAJaW50IG9ycGhhbiA9IDA7CiAJc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWludCByZXRyaWVzID0gMDsKIAogCWlmIChydyA9PSBXUklURSkgewogCQlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OwpAQCAtMTc1Nyw5ICsxNzYxLDEyIEBACiAJCX0KIAl9CiAKK3JldHJ5OgogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSBleHQzX2dldF9ibG9jaywgTlVMTCk7CisJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCisJCWdvdG8gcmV0cnk7CiAKIAlpZiAob3JwaGFuKSB7CiAJCWludCBlcnI7CkBAIC0yNzUwLDYgKzI3NTcsOCBAQAogCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKHNiKS0+c19qb3VybmFsOworCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uOwogCWxvbmcgcmV0OwogCWludCBibG9jazsKIApAQCAtMjgyNyw2ICsyODM2LDMwIEBACiAJCWVpLT5pX2RhdGFbYmxvY2tdID0gcmF3X2lub2RlLT5pX2Jsb2NrW2Jsb2NrXTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfb3JwaGFuKTsKIAorCS8qCisJICogU2V0IHRyYW5zYWN0aW9uIGlkJ3Mgb2YgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB0byBiZSBjb21taXR0ZWQKKwkgKiB0byBmaW5pc2ggZltkYXRhXXN5bmMuIFdlIHNldCB0aGVtIHRvIGN1cnJlbnRseSBydW5uaW5nIHRyYW5zYWN0aW9uCisJICogYXMgd2UgY2Fubm90IGJlIHN1cmUgdGhhdCB0aGUgaW5vZGUgb3Igc29tZSBvZiBpdHMgbWV0YWRhdGEgaXNuJ3QKKwkgKiBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiAtIHRoZSBpbm9kZSBjb3VsZCBoYXZlIGJlZW4gcmVjbGFpbWVkIGFuZAorCSAqIG5vdyBpdCBpcyByZXJlYWQgZnJvbSBkaXNrLgorCSAqLworCWlmIChqb3VybmFsKSB7CisJCXRpZF90IHRpZDsKKworCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbjsKKwkJZWxzZQorCQkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb247CisJCWlmICh0cmFuc2FjdGlvbikKKwkJCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwkJZWxzZQorCQkJdGlkID0gam91cm5hbC0+al9jb21taXRfc2VxdWVuY2U7CisJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgdGlkKTsKKwkJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCB0aWQpOworCX0KKwogCWlmIChpbm9kZS0+aV9pbm8gPj0gRVhUM19GSVJTVF9JTk8oaW5vZGUtPmlfc2IpICsgMSAmJgogCSAgICBFWFQzX0lOT0RFX1NJWkUoaW5vZGUtPmlfc2IpID4gRVhUM19HT09EX09MRF9JTk9ERV9TSVpFKSB7CiAJCS8qCkBAIC0zMDExLDYgKzMwNDQsNyBAQAogCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUM19TVEFURV9ORVc7CiAKKwlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCk7CiBvdXRfYnJlbHNlOgogCWJyZWxzZSAoYmgpOwogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDdhNTIwYTguLjQyNzQ5NmMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTQ2Niw2ICs0NjYsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAllaS0+aV9ibG9ja19hbGxvY19pbmZvID0gTlVMTDsKIAllaS0+dmZzX2lub2RlLmlfdmVyc2lvbiA9IDE7CisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCAwKTsKKwlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgMCk7CiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDk4NGNhMGMuLjg4MjU1MTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0zMjIsNiArMzIyLDcgQEAKICNkZWZpbmUgRVhUNF9TVEFURV9OT19FWFBBTkQJCTB4MDAwMDAwMDggLyogTm8gc3BhY2UgZm9yIGV4cGFuc2lvbiAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFCTB4MDAwMDAwMTAgLyogQWxsb2MgREEgYmxrcyBvbiBjbG9zZSAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFCQkweDAwMDAwMDIwIC8qIElub2RlIGlzIG1pZ3JhdGluZyAqLworI2RlZmluZSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4JMHgwMDAwMDA0MCAvKiBuZWVkIGNvbnZlcnQgb24gZGlvIGRvbmUqLwogCiAvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCiBzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgewpAQCAtNzQzLDYgKzc0NCw3IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfUVVPVEEJCTB4ODAwMDAgLyogU29tZSBxdW90YSBvcHRpb24gc2V0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfVVNSUVVPVEEJCTB4MTAwMDAwIC8qICJvbGQiIHVzZXIgcXVvdGEgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBRVU9UQQkJMHgyMDAwMDAgLyogIm9sZCIgZ3JvdXAgcXVvdGEgKi8KKyNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0NIRUNLU1VNCTB4ODAwMDAwIC8qIEpvdXJuYWwgY2hlY2tzdW1zICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQJMHgxMDAwMDAwIC8qIEpvdXJuYWwgQXN5bmMgQ29tbWl0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSV9WRVJTSU9OICAgICAgICAgICAgMHgyMDAwMDAwIC8qIGlfdmVyc2lvbiBzdXBwb3J0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfREVMQUxMT0MJCTB4ODAwMDAwMCAvKiBEZWxhbGxvYyBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDEwNTM5ZTMuLjcxNTI2NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0yODA3LDYgKzI4MDcsOCBAQAogICogaW50byB0aHJlZSB1bmluaXRpYWxpemVkIGV4dGVudChhdCBtb3N0KS4gQWZ0ZXIgSU8gY29tcGxldGUsIHRoZSBwYXJ0CiAgKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb24KICAqIHZpYSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoKS4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IHRvIGJlIHdyaXR0ZW4gb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0yODI0LDcgKzI4MjYsNiBAQAogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQsIGVlX2xlbiwgZGVwdGg7CiAJZXh0NF9mc2Jsa190IG5ld2Jsb2NrOwogCWludCBlcnIgPSAwOwotCWludCByZXQgPSAwOwogCiAJZXh0X2RlYnVnKCJleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzOiBpbm9kZSAlbHUsIgogCQkgICJpYmxvY2sgJWxsdSwgbWF4X2Jsb2NrcyAldVxuIiwgaW5vZGUtPmlfaW5vLApAQCAtMjg0MiwxMiArMjg0MywxMiBAQAogCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmb3JpZ19leCwgZXh0X3BibG9jayhleCkpOwogCiAJLyoKLSAJICogaWYgdGhlIGVudGlyZSB1bmludGlhbGl6ZWQgZXh0ZW50IGxlbmd0aCBsZXNzIHRoYW4KLSAJICogdGhlIHNpemUgb2YgZXh0ZW50IHRvIHdyaXRlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNwbGl0Ci0gCSAqIHVuaW5pdGlhbGl6ZWQgZXh0ZW50CisgCSAqIElmIHRoZSB1bmluaXRpYWxpemVkIGV4dGVudCBiZWdpbnMgYXQgdGhlIHNhbWUgbG9naWNhbAorIAkgKiBibG9jayB3aGVyZSB0aGUgd3JpdGUgYmVnaW5zLCBhbmQgdGhlIHdyaXRlIGNvbXBsZXRlbHkKKyAJICogY292ZXJzIHRoZSBleHRlbnQsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBzcGxpdCBpdC4KICAJICovCi0gCWlmIChhbGxvY2F0ZWQgPD0gbWF4X2Jsb2NrcykKLQkJcmV0dXJuIHJldDsKKwlpZiAoKGlibG9jayA9PSBlZV9ibG9jaykgJiYgKGFsbG9jYXRlZCA8PSBtYXhfYmxvY2tzKSkKKwkJcmV0dXJuIGFsbG9jYXRlZDsKIAogCWVyciA9IGV4dDRfZXh0X2dldF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKIAlpZiAoZXJyKQpAQCAtMzA0OCwxMiArMzA0OSwxOCBAQAogCQlyZXQgPSBleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwKIAkJCQkJCWlub2RlLCBwYXRoLCBpYmxvY2ssCiAJCQkJCQltYXhfYmxvY2tzLCBmbGFncyk7Ci0JCS8qIGZsYWcgdGhlIGlvX2VuZCBzdHJ1Y3QgdGhhdCB3ZSBuZWVkIGNvbnZlcnQgd2hlbiBJTyBkb25lICovCisJCS8qCisJCSAqIEZsYWcgdGhlIGlub2RlKG5vbiBhaW8gY2FzZSkgb3IgZW5kX2lvIHN0cnVjdCAoYWlvIGNhc2UpCisJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJ0aW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcworCQkgKiBjb21wbGV0ZWQKKwkJICovCiAJCWlmIChpbykKIAkJCWlvLT5mbGFnID0gRElPX0FJT19VTldSSVRURU47CisJCWVsc2UKKwkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOwogCQlnb3RvIG91dDsKIAl9Ci0JLyogRElPIGVuZF9pbyBjb21wbGV0ZSwgY29udmVydCB0aGUgZmlsbGVkIGV4dGVudCB0byB3cml0dGVuICovCisJLyogYXN5bmMgRElPIGVuZF9pbyBjb21wbGV0ZSwgY29udmVydCB0aGUgZmlsbGVkIGV4dGVudCB0byB3cml0dGVuICovCiAJaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpIHsKIAkJcmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2RpbyhoYW5kbGUsIGlub2RlLAogCQkJCQkJCXBhdGgpOwpAQCAtMzI5NSwxMCArMzMwMiwxNiBAQAogCQkgKiBUbyBhdm9pZCB1bmVjZXNzYXJ5IGNvbnZlcnRpb24gZm9yIGV2ZXJ5IGFpbyBkaW8gcmV3cml0ZQogCQkgKiB0byB0aGUgbWlkIG9mIGZpbGUsIGhlcmUgd2UgZmxhZyB0aGUgSU8gdGhhdCBpcyByZWFsbHkKIAkJICogbmVlZCB0aGUgY29udmVydGlvbi4KLQkJICoKKwkJICogRm9yIG5vbiBhc3ljbiBkaXJlY3QgSU8gY2FzZSwgZmxhZyB0aGUgaW5vZGUgc3RhdGUKKwkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCiAJCSAqLwotCQlpZiAoaW8gJiYgZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQotCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkgeworCQkJaWYgKGlvKQorCQkJCWlvLT5mbGFnID0gRElPX0FJT19VTldSSVRURU47CisJCQllbHNlCisJCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PQorCQkJCQlFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47OworCQl9CiAJfQogCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4LCBmbGFncyk7CiAJaWYgKGVycikgewpAQCAtMzUxOSw2ICszNTMyLDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QgSU8gZW5kIGlvIGNhbGwgYmFjawogICogZnVuY3Rpb24sIHRvIGNvbnZlcnQgdGhlIGZhbGxvY2F0ZWQgZXh0ZW50cyBhZnRlciBJTyBpcyBjb21wbGV0ZWQuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwogaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAogCQkJCSAgICBsb2ZmX3QgbGVuKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDVjNWJjNWQuLjJjOGNhYTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogICogc28gYmVmb3JlIHdlIGNhbGwgaGVyZSBldmVyeXRoaW5nIG11c3QgYmUgY29uc2lzdGVudGx5IGRpcnRpZWQgYWdhaW5zdAogICogdGhpcyB0cmFuc2FjdGlvbi4KICAqLwotIGludCBleHQ0X3RydW5jYXRlX3Jlc3RhcnRfdHJhbnMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBleHQ0X3RydW5jYXRlX3Jlc3RhcnRfdHJhbnMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgaW50IG5ibG9ja3MpCiB7CiAJaW50IHJldDsKQEAgLTIwOSw2ICsyMDksNyBAQAogCXVwX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKIAlyZXQgPSBleHQ0X2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIGJsb2Nrc19mb3JfdHJ1bmNhdGUoaW5vZGUpKTsKIAlkb3duX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKKwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM0NDUsOCArMzQ0Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogTWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHdlIG1hcCBmb3IgZGlyZWN0IElPIGF0IG9uY2UuICovCi0KIHN0YXRpYyBpbnQgZXh0NF9nZXRfYmxvY2tfZGlvX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CkBAIC0zNjU0LDEzICszNjUzLDE0IEBACiAgICAgICAgIGV4dDRfaW9fZW5kX3QgKmlvX2VuZCA9IGlvY2ItPnByaXZhdGU7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogCisJLyogaWYgbm90IGFzeW5jIGRpcmVjdCBJTyBvciBkaW8gd2l0aCAwIGJ5dGVzIHdyaXRlLCBqdXN0IHJldHVybiAqLworCWlmICghaW9fZW5kIHx8ICFzaXplKQorCQlyZXR1cm47CisKIAlleHRfZGVidWcoImV4dDRfZW5kX2lvX2RpbygpOiBpb19lbmQgMHglcCIKIAkJICAiZm9yIGlub2RlICVsdSwgaW9jYiAweCVwLCBvZmZzZXQgJWxsdSwgc2l6ZSAlbGx1XG4iLAogIAkJICBpb2NiLT5wcml2YXRlLCBpb19lbmQtPmlub2RlLT5pX2lubywgaW9jYiwgb2Zmc2V0LAogCQkgIHNpemUpOwotCS8qIGlmIG5vdCBhc3luYyBkaXJlY3QgSU8gb3IgZGlvIHdpdGggMCBieXRlcyB3cml0ZSwganVzdCByZXR1cm4gKi8KLQlpZiAoIWlvX2VuZCB8fCAhc2l6ZSkKLQkJcmV0dXJuOwogCiAJLyogaWYgbm90IGFpbyBkaW8gd2l0aCB1bndyaXR0ZW4gZXh0ZW50cywganVzdCBmcmVlIGlvIGFuZCByZXR1cm4gKi8KIAlpZiAoaW9fZW5kLT5mbGFnICE9IERJT19BSU9fVU5XUklUVEVOKXsKQEAgLTM3NzEsMTMgKzM3NzEsMTkgQEAKIAkJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQgJiYgcmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkgewogCQkJZXh0NF9mcmVlX2lvX2VuZChpb2NiLT5wcml2YXRlKTsKIAkJCWlvY2ItPnByaXZhdGUgPSBOVUxMOwotCQl9IGVsc2UgaWYgKHJldCA+IDApCisJCX0gZWxzZSBpZiAocmV0ID4gMCAmJiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmCisJCQkJICAgICAgIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTikpIHsKKwkJCWludCBlcnI7CiAJCQkvKgogCQkJICogZm9yIG5vbiBBSU8gY2FzZSwgc2luY2UgdGhlIElPIGlzIGFscmVhZHkKIAkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnRpb24gcmlnaHQgaGVyZQogCQkJICovCi0JCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCi0JCQkJCQkJCW9mZnNldCwgcmV0KTsKKwkJCWVyciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwKKwkJCQkJCQkgICAgIG9mZnNldCwgcmV0KTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldCA9IGVycjsKKwkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjsKKwkJfQogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IDdjOGZlODAuLjZkMmMxYjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbmFtZWkuYworKysgYi9mcy9leHQ0L25hbWVpLmMKQEAgLTE1MTgsMTIgKzE1MTgsOCBAQAogCQkJcmV0dXJuIHJldHZhbDsKIAogCQlpZiAoYmxvY2tzID09IDEgJiYgIWR4X2ZhbGxiYWNrICYmCi0JCSAgICBFWFQ0X0hBU19DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpKSB7Ci0JCQlyZXR2YWwgPSBtYWtlX2luZGV4ZWRfZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgYmgpOwotCQkJaWYgKHJldHZhbCA9PSAtRU5PU1BDKQotCQkJCWJyZWxzZShiaCk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9CisJCSAgICBFWFQ0X0hBU19DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpKQorCQkJcmV0dXJuIG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlLCBkZW50cnksIGlub2RlLCBiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQogCWJoID0gZXh0NF9hcHBlbmQoaGFuZGxlLCBkaXIsICZibG9jaywgJnJldHZhbCk7CkBAIC0xNTMyLDEwICsxNTI4LDcgQEAKIAlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwogCWRlLT5pbm9kZSA9IDA7CiAJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhibG9ja3NpemUsIGJsb2Nrc2l6ZSk7Ci0JcmV0dmFsID0gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwotCWlmIChyZXR2YWwgPT0gLUVOT1NQQykKLQkJYnJlbHNlKGJoKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7CiB9CiAKIC8qCkBAIC0xNjY0LDggKzE2NTcsNyBAQAogCWlmICghZGUpCiAJCWdvdG8gY2xlYW51cDsKIAllcnIgPSBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7Ci0JaWYgKGVyciAhPSAtRU5PU1BDKQotCQliaCA9IE5VTEw7CisJYmggPSBOVUxMOwogCWdvdG8gY2xlYW51cDsKIAogam91cm5hbF9lcnJvcjoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAzMTIyMTFlLi5kNGNhOTJhIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xMzAwLDkgKzEzMDAsMTEgQEAKIAkJCSpqb3VybmFsX2Rldm51bSA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2NoZWNrc3VtOgotCQkJYnJlYWs7CS8qIEtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0OgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0FTWU5DX0NPTU1JVCk7CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vbG9hZDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9MT0FEKTsKQEAgLTI3NTksMTQgKzI3NjEsMjAgQEAKIAkJZ290byBmYWlsZWRfbW91bnQ0OwogCX0KIAotCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsCi0JCQkJICBKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLCAwKTsKLQlpZiAodGVzdF9vcHQoc2IsIEpPVVJOQUxfQVNZTkNfQ09NTUlUKSkKLQkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwgMCwgMCwKKwlpZiAodGVzdF9vcHQoc2IsIEpPVVJOQUxfQVNZTkNfQ09NTUlUKSkgeworCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsCiAJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7Ci0JZWxzZQorCX0gZWxzZSBpZiAodGVzdF9vcHQoc2IsIEpPVVJOQUxfQ0hFQ0tTVU0pKSB7CisJCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsCisJCQkJSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwgMCk7CiAJCWpiZDJfam91cm5hbF9jbGVhcl9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwgMCwgMCwKIAkJCQlKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKTsKKwl9IGVsc2UgeworCQlqYmQyX2pvdXJuYWxfY2xlYXJfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsCisJCQkJSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwKKwkJCQlKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKTsKKwl9CiAKIAkvKiBXZSBoYXZlIG5vdyB1cGRhdGVkIHRoZSBqb3VybmFsIGlmIHJlcXVpcmVkLCBzbyB3ZSBjYW4KIAkgKiB2YWxpZGF0ZSB0aGUgZGF0YSBqb3VybmFsaW5nIG1vZGUuICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA5OTJmNmM5Li44YWRhNzhhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTcxMiw4ICs3MTIsMTAgQEAKIAkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2Rpcik7CiAKIAkJLyogbmV3ZW50IHdpbGwgZW5kIHVwIG5lZ2F0aXZlICovCi0JCWlmIChuZXdlbnQtPmRfaW5vZGUpCisJCWlmIChuZXdlbnQtPmRfaW5vZGUpIHsKKwkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2VudC0+ZF9pbm9kZSk7CiAJCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUobmV3ZW50KTsKKwkJfQogCX0gZWxzZSBpZiAoZXJyID09IC1FSU5UUikgewogCQkvKiBJZiByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgREVJVFkgb25seSBrbm93cyBpZiB0aGUKIAkJICAgcmVuYW1lIGFjdHVhbGx5IHRvb2sgcGxhY2UuICBJZiB0aGUgaW52YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGEzNDkyZjcuLmMxODkxM2EgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDYzLDcgKzEwNjMsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKCFJU19FUlIocmVxKSkKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkKIAkJKnBwb3MgPSBwb3M7CiAKQEAgLTE1OTksNyArMTYwMCw3IEBACiAJCQlrYWRkciArPSBjb3B5OwogCQl9CiAKLQkJa3VubWFwKG1hcCk7CisJCWt1bm1hcChwYWdlKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmMKaW5kZXggOWI5ZDYzOS4uMDUyZjIxNCAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKKysrIGIvZnMvaGZzL2J0cmVlLmMKQEAgLTU4LDYgKzU4LDExIEBACiAJfQogCXVubG9ja19uZXdfaW5vZGUodHJlZS0+aW5vZGUpOwogCisJaWYgKCFIRlNfSSh0cmVlLT5pbm9kZSktPmZpcnN0X2Jsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgImhmczogaW52YWxpZCBidHJlZSBleHRlbnQgcmVjb3JkcyAoMCBzaXplKS5cbiIpOworCQlnb3RvIGZyZWVfaW5vZGU7CisJfQorCiAJbWFwcGluZyA9IHRyZWUtPmlub2RlLT5pX21hcHBpbmc7CiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIDAsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3dyYXBwZXIuYyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCmluZGV4IDE3NWQwOGUuLmJlZDc4YWM4IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3dyYXBwZXIuYworKysgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwpAQCAtOTksNiArOTksMTAgQEAKIAogCWlmIChoZnNwbHVzX2dldF9sYXN0X3Nlc3Npb24oc2IsICZwYXJ0X3N0YXJ0LCAmcGFydF9zaXplKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh1NjQpcGFydF9zdGFydCArIHBhcnRfc2l6ZSA+IDB4MTAwMDAwMDAwVUxMKSB7CisJCXByX2VycigiaGZzOiB2b2x1bWVzIGxhcmdlciB0aGFuIDJUQiBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJd2hpbGUgKDEpIHsKIAkJYmggPSBzYl9icmVhZDUxMihzYiwgcGFydF9zdGFydCArIEhGU1BMVVNfVk9MSEVBRF9TRUNUT1IsIHZoZHIpOwogCQlpZiAoIWJoKQpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggN2IxN2ExNC4uNmM3NTExMCAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJCSAgIHU2NCBsZW4sIGdldF9ibG9ja190ICpnZXRfYmxvY2spCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcDsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfYmxrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF9ibGs7CiAJbG9uZyBsb25nIGxlbmd0aCA9IDAsIG1hcF9sZW4gPSAwOwogCXU2NCBsb2dpY2FsID0gMCwgcGh5cyA9IDAsIHNpemUgPSAwOwogCXUzMiBmbGFncyA9IEZJRU1BUF9FWFRFTlRfTUVSR0VEOwpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggYmQzYzA3My4uNDE2MGFmYSAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC03Myw2ICs3Myw3IEBACiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfYWNrX2Vycik7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfY2xlYXJfZXJyKTsKIEVYUE9SVF9TWU1CT0wobG9nX3dhaXRfY29tbWl0KTsKK0VYUE9SVF9TWU1CT0wobG9nX3N0YXJ0X2NvbW1pdCk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfc3RhcnRfY29tbWl0KTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9mb3JjZV9jb21taXRfbmVzdGVkKTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF93aXBlKTsKQEAgLTc1Niw2ICs3NTcsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC04MjAsNiArODIyLDcgQEAKIAogCXJldHVybiBqb3VybmFsOwogb3V0X2VycjoKKwlrZnJlZShqb3VybmFsLT5qX3didWYpOwogCWtmcmVlKGpvdXJuYWwpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiMGFiNTIxLi5mZWQ4NTM4OCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTkxMyw2ICs5MTMsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbCk7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CkBAIC05ODYsNiArOTg3LDcgQEAKIAogCXJldHVybiBqb3VybmFsOwogb3V0X2VycjoKKwlrZnJlZShqb3VybmFsLT5qX3didWYpOwogCWpiZDJfc3RhdHNfcHJvY19leGl0KGpvdXJuYWwpOwogCWtmcmVlKGpvdXJuYWwpOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDMyMDYyYzMuLjdjYjI5ODUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE1MzYsNiArMTUzNiw4IEBACiAJCW9sZF9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAorCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSk7CisKIAlkX2Ryb3AoZGVudHJ5KTsKIAllcnJvciA9IE5GU19QUk9UTyhkaXIpLT5saW5rKGlub2RlLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKGVycm9yID09IDApIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCA2YzMyMTAwLi5lMWQ0MTVlIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC00NTcsNiArNDU3LDcgQEAKIAl9OwogCXN0cnVjdCBycGNfdGFza19zZXR1cCB0YXNrX3NldHVwX2RhdGEgPSB7CiAJCS5ycGNfY2xpZW50ID0gTkZTX0NMSUVOVChpbm9kZSksCisJCS5ycGNfbWVzc2FnZSA9ICZtc2csCiAJCS5jYWxsYmFja19vcHMgPSAmbmZzX3dyaXRlX2RpcmVjdF9vcHMsCiAJCS53b3JrcXVldWUgPSBuZnNpb2Rfd29ya3F1ZXVlLAogCQkuZmxhZ3MgPSBSUENfVEFTS19BU1lOQywKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggZWQ3YzI2OS4uZmYzNzQ1NCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTcyLDEyICs3MiwxNyBAQAogLyogUHJldmVudCBsZWFrcyBvZiBORlN2NCBlcnJvcnMgaW50byB1c2VybGFuZCAqLwogc3RhdGljIGludCBuZnM0X21hcF9lcnJvcnMoaW50IGVycikKIHsKLQlpZiAoZXJyIDwgLTEwMDApIHsKKwlpZiAoZXJyID49IC0xMDAwKQorCQlyZXR1cm4gZXJyOworCXN3aXRjaCAoZXJyKSB7CisJY2FzZSAtTkZTNEVSUl9SRVNPVVJDRToKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJZGVmYXVsdDoKIAkJZHByaW50aygiJXMgY291bGQgbm90IGhhbmRsZSBORlN2NCBlcnJvciAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgLWVycik7Ci0JCXJldHVybiAtRUlPOworCQlicmVhazsKIAl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTzsKIH0KIAogLyoKQEAgLTMwNjAsOSArMzA2NSw2IEBACiAJaWYgKHRpbWVfYmVmb3JlKGNscC0+Y2xfbGFzdF9yZW5ld2FsLHRpbWVzdGFtcCkpCiAJCWNscC0+Y2xfbGFzdF9yZW5ld2FsID0gdGltZXN0YW1wOwogCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwotCWRwcmludGsoIiVzIGNhbGxpbmcgcHV0X3JwY2NyZWQgb24gcnBjX2NyZWQgJXBcbiIsIF9fZnVuY19fLAotCQkJCXRhc2stPnRrX21zZy5ycGNfY3JlZCk7Ci0JcHV0X3JwY2NyZWQodGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNF9yZW5ld19vcHMgPSB7CkBAIC00ODc3LDcgKzQ4NzksNiBAQAogCW5mczQxX3NlcXVlbmNlX2ZyZWVfc2xvdChjbHAsIHRhc2stPnRrX21zZy5ycGNfcmVzcCk7CiAJZHByaW50aygiJXMgcnBjX2NyZWQgJXBcbiIsIF9fZnVuY19fLCB0YXNrLT50a19tc2cucnBjX2NyZWQpOwogCi0JcHV0X3JwY2NyZWQodGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX2FyZ3ApOwogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfcmVzcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDgzYWQ0N2MuLjIwYjRlMzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTY4MSw3ICs1NjgxLDYgQEAKIAl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCS1FU0VSVkVSRkFVTFQJfSwKIAl7IE5GUzRFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlM0RVJSX0xPQ0tFRCwJLUVBR0FJTgkJfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCS1FUkVNT1RFSU8JfSwKIAl7IE5GUzRFUlJfU1lNTElOSywJLUVMT09QCQl9LAogCXsgTkZTNEVSUl9PUF9JTExFR0FMLAktRU9QTk9UU1VQUAl9LAogCXsgTkZTNEVSUl9ERUFETE9DSywJLUVERUFETEsJfSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggYTJjMThhYy4uOTBiZTU1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTEyNTMsNiArMTI1Myw3IEBACiAJCQlkZWZhdWx0OgogCQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiAgIHVucmVjb2duaXplZCAiCiAJCQkJCQkidHJhbnNwb3J0IHByb3RvY29sXG4iKTsKKwkJCQlrZnJlZShzdHJpbmcpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNTk0MTk1OC4uODRjMjUzOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtODcsNiArODcsNyBAQAogCQkJYnJlbHNlKGJoKTsKIAkJCUJVRygpOwogCQl9CisJCW1lbXNldChiaC0+Yl9kYXRhLCAwLCAxIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogCQliaC0+Yl9iZGV2ID0gTklMRlNfSV9OSUxGUyhpbm9kZSktPm5zX2JkZXY7CiAJCWJoLT5iX2Jsb2NrbnIgPSBibG9ja25yOwogCQlzZXRfYnVmZmVyX21hcHBlZChiaCk7CkBAIC0yNzYsOCArMjc3LDcgQEAKIAkJCQkgICAgICAgImludmFsaWQgb2xka2V5ICVsbGQgKG5ld2tleT0lbGxkKSIsCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2xka2V5LAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld2tleSk7Ci0JCWlmICghdGVzdF9zZXRfYnVmZmVyX2RpcnR5KG9iaCkgJiYgVGVzdFNldFBhZ2VEaXJ0eShvcGFnZSkpCi0JCQlCVUcoKTsKKwkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkob2JoKTsKIAogCQlzcGluX2xvY2tfaXJxKCZidG5jLT50cmVlX2xvY2spOwogCQlyYWRpeF90cmVlX2RlbGV0ZSgmYnRuYy0+cGFnZV90cmVlLCBvbGRrZXkpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCA2NTcyZWE0Li5kMjQwNTdkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtMjk3LDcgKzI5NywxOCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JYmgtPmJfcHJpdmF0ZSA9IHZkZXNjOworCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYmgtPmJfYXNzb2NfYnVmZmVycykpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjb25mbGljdGluZyAlcyBidWZmZXI6IGlubz0lbGx1LCAiCisJCSAgICAgICAiY25vPSVsbHUsIG9mZnNldD0lbGx1LCBibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfaW5vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfYmxvY2tuciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQogCWxpc3RfYWRkX3RhaWwoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsIGJ1ZmZlcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzM1LDI0ICszNDYsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJcmV0ID0gbmlsZnNfZ2NjYWNoZV93YWl0X2FuZF9tYXJrX2RpcnR5KGJoKTsKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKLQkJCQl2ZGVzYyA9IGJoLT5iX3ByaXZhdGU7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVAotCQkJCSAgICAgICAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogIgotCQkJCSAgICAgICAiaW5vPSVsbHUsIGNubz0lbGx1LCBvZmZzZXQ9JWxsdSwgIgotCQkJCSAgICAgICAiYmxvY2tucj0lbGx1LCB2YmxvY2tucj0lbGx1XG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywKLQkJCQkgICAgICAgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2NubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF92YmxvY2tucik7Ci0JCQl9CisJCQlXQVJOX09OKHJldCA9PSAtRUVYSVNUKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJcmV0dXJuIG5tZW1iczsKQEAgLTM2MCw3ICszNTcsNiBAQAogIGZhaWxlZDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNDcxLDcgKzQ2Nyw2IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsZWQ6Ci0JbmlsZnNfcmVtb3ZlX2FsbF9nY2lub2RlKG5pbGZzKTsKIAlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBHQyBmYWlsZWQgZHVyaW5nIHByZXBhcmF0aW9uOiAlczogZXJyPSVkXG4iLAogCSAgICAgICBtc2csIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU2MCw2ICs1NTUsOCBAQAogCWVsc2UKIAkJcmV0ID0gbmlsZnNfY2xlYW5fc2VnbWVudHMoaW5vZGUtPmlfc2IsIGFyZ3YsIGtidWZzKTsKIAorCWlmIChyZXQgPCAwKQorCQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCiAgb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCA2ODNkZjg5Li42ZWZmNjZhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI0NjgsMTcgKzI0NjgsMjIgQEAKIAkvKiBDbGVhciByZXF1ZXN0cyAoZXZlbiB3aGVuIHRoZSBjb25zdHJ1Y3Rpb24gZmFpbGVkKSAqLwogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAotCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwotCiAJaWYgKHJlcS0+bW9kZSA9PSBTQ19MU0VHX1NSKSB7CisJCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwogCQlzY2ktPnNjX3NlcV9kb25lID0gcmVxLT5zZXFfYWNjZXB0ZWQ7CiAJCW5pbGZzX3NlZ2N0b3Jfd2FrZXVwKHNjaSwgcmVxLT5zY19lcnIgPyA6IHJlcS0+c2JfZXJyKTsKIAkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ID0gMDsKLQl9IGVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOwotCWVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9EQVQpCi0JCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKKwl9IGVsc2UgeworCQlpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0ZJTEUpCisJCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOworCQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9EQVRfQklUOwogCisJCS8qIHJlLWVuYWJsZSB0aW1lciBpZiBjaGVja3BvaW50IGNyZWF0aW9uIHdhcyBub3QgZG9uZSAqLworCQlpZiAoc2NpLT5zY190aW1lciAmJiAoc2NpLT5zY19zdGF0ZSAmIE5JTEZTX1NFR0NUT1JfQ09NTUlUKSAmJgorCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgc2NpLT5zY190aW1lci0+ZXhwaXJlcykpCisJCQlhZGRfdGltZXIoc2NpLT5zY190aW1lcik7CisJfQogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKaW5kZXggODI4YTg4OS4uN2U1NGU1MiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwpAQCAtOTEsNiArOTEsNyBAQAogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CisJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwogCXByZXYgPSAmZG5lbnRyeS0+ZG47CiAJd2hpbGUgKChkbiA9ICpwcmV2KSAhPSBOVUxMKSB7Ci0JCWlmICgoZG4tPmRuX21hc2sgJiBldmVudC0+bWFzaykgPT0gMCkgeworCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGM4YTA3YzYuLjMxNjVkODUgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMzI0LDExICszMjQsMTEgQEAKIAlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQllbnRyeS0+Z3JvdXAgPSBncm91cDsKLQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKLQogCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwogCWlmICghbGVudHJ5KSB7CisJCWVudHJ5LT5ncm91cCA9IGdyb3VwOworCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwogCQlobGlzdF9hZGRfaGVhZCgmZW50cnktPmlfbGlzdCwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyk7CiAJCWxpc3RfYWRkKCZlbnRyeS0+Z19saXN0LCAmZ3JvdXAtPm1hcmtfZW50cmllcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwppbmRleCAzODE2ZDU3Li5iOGJmNTNiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKKysrIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAogCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZwogCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLwotCQkJaWYgKG9sZC0+bmFtZV9sZW4gJiYKKwkJCWlmICghb2xkLT5uYW1lX2xlbiB8fAogCQkJICAgICFzdHJjbXAob2xkLT5maWxlX25hbWUsIG5ldy0+ZmlsZV9uYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDUyYzQxNTEuLmFlMTdkMDIgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTc3NywzNiArNzc3LDU1IEBACiBzdGF0aWMgaW50CiBwaXBlX3JlYWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQkvKiBXZSBjb3VsZCBoYXZlIHBlcmhhcHMgdXNlZCBhdG9taWNfdCwgYnV0IHRoaXMgYW5kIGZyaWVuZHMKLQkgICBiZWxvdyBhcmUgdGhlIG9ubHkgcGxhY2VzLiAgU28gaXQgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUuICAqLworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBwaXBlX3Jkd3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDgzNzQ2OWEuLmFmNjQzYjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yNTk3LDggKzI1OTcsNyBAQAogCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgcGlkKTsKIAlkZW50cnkgPSBkX2hhc2hfYW5kX2xvb2t1cChtbnQtPm1udF9yb290LCAmbmFtZSk7CiAJaWYgKGRlbnRyeSkgewotCQlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGVudHJ5KTsKKwkJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGVudHJ5KTsKIAkJZF9kcm9wKGRlbnRyeSk7CiAJCWRwdXQoZGVudHJ5KTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL21lbWluZm8uYyBiL2ZzL3Byb2MvbWVtaW5mby5jCmluZGV4IGM3YmZmNGYuLmE2NTIzOWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvbWVtaW5mby5jCisrKyBiL2ZzL3Byb2MvbWVtaW5mby5jCkBAIC05OSw3ICs5OSw3IEBACiAJCSJWbWFsbG9jVXNlZDogICAgJThsdSBrQlxuIgogCQkiVm1hbGxvY0NodW5rOiAgICU4bHUga0JcbiIKICNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLQkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlOGx1IGtCXG4iCisJCSJIYXJkd2FyZUNvcnJ1cHRlZDogJTVsdSBrQlxuIgogI2VuZGlmCiAJCSwKIAkJSyhpLnRvdGFscmFtKSwKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMDA1MGZjNC4uZTAyMDE4MyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogCiBERUZJTkVfTVVURVgoc3lzZnNfbXV0ZXgpOwpAQCAtMjg1LDYgKzI4Niw5IEBACiAJCXN5c2ZzX3B1dChzZC0+c19zeW1saW5rLnRhcmdldF9zZCk7CiAJaWYgKHN5c2ZzX3R5cGUoc2QpICYgU1lTRlNfQ09QWV9OQU1FKQogCQlrZnJlZShzZC0+c19uYW1lKTsKKwlpZiAoc2QtPnNfaWF0dHIgJiYgc2QtPnNfaWF0dHItPmlhX3NlY2RhdGEpCisJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhLAorCQkJCQlzZC0+c19pYXR0ci0+aWFfc2VjZGF0YV9sZW4pOwogCWtmcmVlKHNkLT5zX2lhdHRyKTsKIAlzeXNmc19mcmVlX2lubyhzZC0+c19pbm8pOwogCWttZW1fY2FjaGVfZnJlZShzeXNmc19kaXJfY2FjaGVwLCBzZCk7CkBAIC04OTQsNyArODk4LDggQEAKIAogCW11dGV4X2xvY2soJnN5c2ZzX3JlbmFtZV9tdXRleCk7CiAJQlVHX09OKCFzZC0+c19wYXJlbnQpOwotCW5ld19wYXJlbnRfc2QgPSBuZXdfcGFyZW50X2tvYmotPnNkID8gbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OworCW5ld19wYXJlbnRfc2QgPSAobmV3X3BhcmVudF9rb2JqICYmIG5ld19wYXJlbnRfa29iai0+c2QpID8KKwkJbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OwogCiAJZXJyb3IgPSAwOwogCWlmIChzZC0+c19wYXJlbnQgPT0gbmV3X3BhcmVudF9zZCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA1NjFhOWMwLi5mNWVhNDY4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kLCAqbmV3X29kID0gTlVMTDsKIAogIHJldHJ5OgotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAoIXNkLT5zX2F0dHIub3BlbiAmJiBuZXdfb2QpIHsKIAkJc2QtPnNfYXR0ci5vcGVuID0gbmV3X29kOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJm9kLT5idWZmZXJzKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmIChvZCkgewogCQlrZnJlZShuZXdfb2QpOwpAQCAtMzE1LDggKzMxNSw5IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZnNfYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCA9IHNkLT5zX2F0dHIub3BlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9kLT5yZWZjbnQpKQpAQCAtMzI0LDcgKzMyNSw3IEBACiAJZWxzZQogCQlvZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJa2ZyZWUob2QpOwogfQpAQCAtNDU2LDggKzQ1Nyw5IEBACiB2b2lkIHN5c2ZzX25vdGlmeV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJb2QgPSBzZC0+c19hdHRyLm9wZW47CiAJaWYgKG9kKSB7CkBAIC00NjUsNyArNDY3LDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvZC0+cG9sbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX25vdGlmeV9kaXJlbnQpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCA5ZTQxZjkxLi4zZDRhMGM4IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwlpZiAob3AgIT0gUV9YUVVPVEFSTSAmJiAhWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQogCQlyZXR1cm4gLUVOT1NZUzsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggNGU0Mjc2YjkuLjVkMWEzYjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTg3Niw3ICs4NzYsNiBAQAogCQlpcC0+aV9nZHF1b3QgPSBOVUxMOwogCX0KIAl4ZnNfaXB1dChpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCUlSRUxFKGlwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggYWI2NGYzZS4uMDc4NTc5NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC04ODAsNiArODgwLDcgQEAKIAkJCQkgKiBOb3QgaW4gcmFuZ2UgLSBzYXZlIGxhc3Qgc2VhcmNoCiAJCQkJICogbG9jYXRpb24gYW5kIGFsbG9jYXRlIGEgbmV3IGlub2RlCiAJCQkJICovCisJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IodGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCQkJCXBhZy0+cGFnbF9sZWZ0cmVjID0gdHJlYy5pcl9zdGFydGlubzsKIAkJCQlwYWctPnBhZ2xfcmlnaHRyZWMgPSByZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3BhZ2lubyA9IHBhZ2lubzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCAwYzNkZDg2Li5jZDJkNzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC03Myw5ICs3MywxOCBAQAogI2RlZmluZSBGX1NFVFNJRwkxMAkvKiBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogZm9yIHNvY2tldHMuICovCiAjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgRl9HRVRMSzY0CisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBGX1NFVE9XTl9FWAotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMworI2RlZmluZSBGX1NFVE9XTl9FWAkxNQorI2RlZmluZSBGX0dFVE9XTl9FWAkxNgogI2VuZGlmCiAKICNkZWZpbmUgRl9PV05FUl9USUQJMApAQCAtMTM5LDEyICsxNDgsNiBAQAogCiAjaWZuZGVmIENPTkZJR182NEJJVAogCi0jaWZuZGVmIEZfR0VUTEs2NAotI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KLSNkZWZpbmUgRl9TRVRMSzY0CTEzCi0jZGVmaW5lIEZfU0VUTEtXNjQJMTQKLSNlbmRpZgotCiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0s2NAogI2lmbmRlZiBfX0FSQ0hfRkxPQ0s2NF9QQUQKICNkZWZpbmUgX19BUkNIX0ZMT0NLNjRfUEFECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDNmMzg0ZDQuLjFmZWVkNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0zNjQsNiArMzY0LDcgQEAKIHVuaWZkZWYteSArPSB2aWRlb2RldjIuaAogdW5pZmRlZi15ICs9IHZpZGVvZGV2LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fY29uZmlnLmgKK3VuaWZkZWYteSArPSB2aXJ0aW9faWRzLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fYmxrLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fbmV0LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fOXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCA0NDcxN2ViLi43OWEyMzQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMjkxLDggKzI5MSwxNSBAQAogaW50IGNwdWZyZXFfZ2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGNwdSk7CiBpbnQgY3B1ZnJlcV91cGRhdGVfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOwogCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAvKiBxdWVyeSB0aGUgY3VycmVudCBDUFUgZnJlcXVlbmN5IChpbiBrSHopLiBJZiB6ZXJvLCBjcHVmcmVxIGNvdWxkbid0IGRldGVjdCBpdCAqLwogdW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogcXVlcnkgdGhlIGxhc3Qga25vd24gQ1BVIGZyZXEgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhY2EzMWJmLi4yZWEzZTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTEyNCw3ICsxMjQsOSBAQAogCXN0cnVjdCBidXNfdHlwZQkJKmJ1czsKIAogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyIAkJKm1vZF9uYW1lOwkvKiB1c2VkIGZvciBidWlsdC1pbiBtb2R1bGVzICovCisJY29uc3QgY2hhcgkJKm1vZF9uYW1lOwkvKiB1c2VkIGZvciBidWlsdC1pbiBtb2R1bGVzICovCisKKwlib29sIHN1cHByZXNzX2JpbmRfYXR0cnM7CS8qIGRpc2FibGVzIGJpbmQvdW5iaW5kIHZpYSBzeXNmcyAqLwogCiAJaW50ICgqcHJvYmUpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCWludCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAppbmRleCBjYTFiZmU5Li45M2U3NDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKQEAgLTEzNyw2ICsxMzcsMTQgQEAKIAkgKiBieSBvdGhlciBtZWFucywgc28gd2UgaGF2ZSB0cnVuY2F0ZV9tdXRleC4KIAkgKi8KIAlzdHJ1Y3QgbXV0ZXggdHJ1bmNhdGVfbXV0ZXg7CisKKwkvKgorCSAqIFRyYW5zYWN0aW9ucyB0aGF0IGNvbnRhaW4gaW5vZGUncyBtZXRhZGF0YSBuZWVkZWQgdG8gY29tcGxldGUKKwkgKiBmc3luYyBhbmQgZmRhdGFzeW5jLCByZXNwZWN0aXZlbHkuCisJICovCisJYXRvbWljX3QgaV9zeW5jX3RpZDsKKwlhdG9taWNfdCBpX2RhdGFzeW5jX3RpZDsKKwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggYTM0YmRmNS4uZGU5YzcyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtNjY5LDEyICs2NjksNiBAQAogCS8qIHBlcmZvcm0gZmIgc3BlY2lmaWMgbW1hcCAqLwogCWludCAoKmZiX21tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKLQkvKiBzYXZlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdGUgKi8KLQl2b2lkICgqZmJfc2F2ZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi0JLyogcmVzdG9yZSBzYXZlZCBzdGF0ZSAqLwotCXZvaWQgKCpmYl9yZXN0b3JlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KIAkvKiBnZXQgY2FwYWJpbGl0eSBnaXZlbiB2YXIgKi8KIAl2b2lkICgqZmJfZ2V0X2NhcHMpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfYmxpdF9jYXBzICpjYXBzLAogCQkJICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IGQxMTc3MDQuLjQzMzYwYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtMTE3LDEyICsxMTcsMTIgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGlyOwogCXN0cnVjdCB0cmFjZV9ldmVudAkqZXZlbnQ7CiAJaW50CQkJZW5hYmxlZDsKLQlpbnQJCQkoKnJlZ2Z1bmMpKHZvaWQgKik7Ci0Jdm9pZAkJCSgqdW5yZWdmdW5jKSh2b2lkICopOworCWludAkJCSgqcmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOworCXZvaWQJCQkoKnVucmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCWludAkJCWlkOwotCWludAkJCSgqcmF3X2luaXQpKHZvaWQpOwotCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpOworCWludAkJCSgqcmF3X2luaXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKKwlpbnQJCQkoKnNob3dfZm9ybWF0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKiwKKwkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKik7CiAJaW50CQkJKCpkZWZpbmVfZmllbGRzKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJc3RydWN0IGxpc3RfaGVhZAlmaWVsZHM7CiAJaW50CQkJZmlsdGVyX2FjdGl2ZTsKQEAgLTEzMSwxNCArMTMxLDE5IEBACiAJdm9pZAkJCSpkYXRhOwogCiAJYXRvbWljX3QJCXByb2ZpbGVfY291bnQ7Ci0JaW50CQkJKCpwcm9maWxlX2VuYWJsZSkodm9pZCk7Ci0Jdm9pZAkJCSgqcHJvZmlsZV9kaXNhYmxlKSh2b2lkKTsKKwlpbnQJCQkoKnByb2ZpbGVfZW5hYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CisJdm9pZAkJCSgqcHJvZmlsZV9kaXNhYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiB9OwogCiAjZGVmaW5lIEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFCTIwNDgKIAotZXh0ZXJuIGNoYXIJCQkqdHJhY2VfcHJvZmlsZV9idWY7Ci1leHRlcm4gY2hhcgkJCSp0cmFjZV9wcm9maWxlX2J1Zl9ubWk7CitzdHJ1Y3QgcGVyZl90cmFjZV9idWYgeworCWNoYXIJYnVmW0ZUUkFDRV9NQVhfUFJPRklMRV9TSVpFXTsKKwlpbnQJcmVjdXJzaW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCBwZXJmX3RyYWNlX2J1ZgkqcGVyZl90cmFjZV9idWY7CitleHRlcm4gc3RydWN0IHBlcmZfdHJhY2VfYnVmCSpwZXJmX3RyYWNlX2J1Zl9ubWk7CiAKICNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVECQkzMgogI2RlZmluZSBNQVhfRklMVEVSX1NUUl9WQUwJMjU2CS8qIFNob3VsZCBoYW5kbGUgS1NZTV9TWU1CT0xfTEVOICovCkBAIC0xNTcsMTEgKzE2MiwxMiBAQAogCUZJTFRFUl9QVFJfU1RSSU5HLAogfTsKIAotZXh0ZXJuIGludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJICAgICAgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgIGludCBvZmZzZXQsIGludCBzaXplLCBpbnQgaXNfc2lnbmVkLAotCQkJICAgICAgaW50IGZpbHRlcl90eXBlKTsKIGV4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY29uc3QgY2hhciAqdHlwZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplLAorCQkJICAgICAgaW50IGlzX3NpZ25lZCwgaW50IGZpbHRlcl90eXBlKTsKK2V4dGVybiBpbnQgdHJhY2VfYWRkX2V2ZW50X2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiB2b2lkIHRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKICNkZWZpbmUgaXNfc2lnbmVkX3R5cGUodHlwZSkJKCgodHlwZSkoLTEpKSA8IDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDU3ZDQxYjAuLjdiNDBjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMzYxLDYgKzM2MSwyNCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCisvKioKKyAqIGkyY19sb2NrX2FkYXB0ZXIgLSBQcmV2ZW50IGFjY2VzcyB0byBhbiBJMkMgYnVzIHNlZ21lbnQKKyAqIEBhZGFwdGVyOiBUYXJnZXQgSTJDIGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfbG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKKy8qKgorICogaTJjX3VubG9ja19hZGFwdGVyIC0gUmVhdXRob3JpemUgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY191bmxvY2tfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKIC8qZmxhZ3MgZm9yIHRoZSBjbGllbnQgc3RydWN0OiAqLwogI2RlZmluZSBJMkNfQ0xJRU5UX1BFQwkweDA0CQkvKiBVc2UgUGFja2V0IEVycm9yIENoZWNraW5nICovCiAjZGVmaW5lIEkyQ19DTElFTlRfVEVOCTB4MTAJCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCAzYTQ2YjdiLi4xYjY3MmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtMjk2LDYgKzI5Niw4IEBACiBpbnQgZGlzYWJsZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqa3ApOwogaW50IGVuYWJsZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqa3ApOwogCit2b2lkIGR1bXBfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKmtwKTsKKwogI2Vsc2UgLyogIUNPTkZJR19LUFJPQkVTOiAqLwogCiBzdGF0aWMgaW5saW5lIGludCBrcHJvYmVzX2J1aWx0X2luKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggNjU0N2MzYy4uODJhOTEyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtMzcsNyArMzcsNiBAQAogdHlwZWRlZiBpbnQgKCpwYXJhbV9nZXRfZm4pKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOwogCiAvKiBGbGFnIGJpdHMgZm9yIGtlcm5lbF9wYXJhbS5mbGFncyAqLwotI2RlZmluZSBLUEFSQU1fS01BTExPQ0VECTEKICNkZWZpbmUgS1BBUkFNX0lTQk9PTAkJMgogCiBzdHJ1Y3Qga2VybmVsX3BhcmFtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk0OTU4YzEuLjgxMmE1ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNTU3LDcgKzU1Nyw3IEBACiAgKglDYWxsYmFjayB1c2VzIHdoZW4gdGhlIHRyYW5zbWl0dGVyIGhhcyBub3QgbWFkZSBhbnkgcHJvZ3Jlc3MKICAqCWZvciBkZXYtPndhdGNoZG9nIHRpY2tzLgogICoKLSAqIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKmdldF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisgKiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogKCpuZG9fZ2V0X3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAqCUNhbGxlZCB3aGVuIGEgdXNlciB3YW50cyB0byBnZXQgdGhlIG5ldHdvcmsgZGV2aWNlIHVzYWdlCiAgKglzdGF0aXN0aWNzLiBJZiBub3QgZGVmaW5lZCwgdGhlIGNvdW50ZXJzIGluIGRldi0+c3RhdHMgd2lsbAogICoJYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZjQ5MGU3YS4uODRjZjFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM3OSw5ICszNzksNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQQkweDQzOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERQkweDQzOWMKLS8qIEFNRCBTQiBDaGlwc2V0ICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERQkgMHg3ODBjCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFIDB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSQkJMHgxMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIJMHgwMDA1CkBAIC00ODUsNiArNDgyLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNX1BDSUUgMHgwMzYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCiAKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9JQk0JCTB4MTAxNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JUCTB4MDNkNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU5JU1lTCQkweDEwMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTklTWVNfRE1BX0RJUkVDVE9SIDB4MDAxQwogCkBAIC01NDMsNyArNTQzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UJMHg3NDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQVBJQwkweDc0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMl9CUklER0UJMHg3NDU4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTCTB4NzgwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTCTB4NzgwYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzVfSURFICAgIDB4MjA4RgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBICAgIDB4MjA5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggIDB4MjA5MQpAQCAtNTUzLDkgKzU1MywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVURDICAgIDB4MjA5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVU9DICAgIDB4MjA5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFICAgIDB4MjA5QQotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX1ZJREVPICAweDIwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTICAgIDB4MjA4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERQkJMHg3ODBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUJMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UCQkweDEwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWAkweDIwMDAKQEAgLTE5NTUsNiArMTk1Niw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EU0VSSUFMCTB4MDEwMCAvKiAyeCAxNjU1MCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EJMHgwMTAxIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IJMHgwMTAyIC8qIDJ4IDE2NTUwLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19BCTB4MDEyMCAvKiAyeCAxNjU1MEEsIGhhbGYgb2YgNCBwb3J0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IJMHgwMTIxIC8qIDJ4IDE2NTUwQSwgaGFsZiBvZiA0IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQQkweDAxODAgLyogNHggMTY1NTBBLCBoYWxmIG9mIDggcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19CCTB4MDE4MSAvKiA0eCAxNjU1MEEsIGhhbGYgb2YgOCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9QT1JUX1BMVVMJMHgwMjAwIC8qIDJ4IDE2NjUwICovCkBAIC0yMTYyLDYgKzIxNjUsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzQyMF8zICAgICAgMHg3MDBECiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTczMDBfMyAgICAgIDB4NzAwRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3ODAwXzMgICAgICAweDcwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTczMDAgICAgICAgMHg3MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NDIwICAgICAgIDB4NzAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzUwMCAgICAgICAweDcwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAgICAgICAgMHg3MDEzCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QREMJCTB4MTVlOQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAppbmRleCA5MWEyYjQzLi5lM2ZiMjU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKQEAgLTEwNiw2ICsxMDYsOCBAQAogCVBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgkJPSA1LAogCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKCQk9IDYsCisJUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTCQk9IDcsCisJUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTCQk9IDgsCiAKIAlQRVJGX0NPVU5UX1NXX01BWCwJCQkvKiBub24tQUJJICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCBjZWFkNjRlLi5iNWNkYWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTA3LDYgKzEwNyw4IEBACiAJUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUwkJPSA0LAogCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOCQk9IDUsCiAJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUoJCT0gNiwKKwlQRVJGX0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMJCT0gNywKKwlQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMJCT0gOCwKIAogCVBFUkZfQ09VTlRfU1dfTUFYLAkJCS8qIG5vbi1BQkkgKi8KIH07CkBAIC0yMzMsNyArMjM1LDcgQEAKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRElTQUJMRQkJX0lPICgnJCcsIDEpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0gJCV9JTyAoJyQnLCAyKQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19SRVNFVAkJX0lPICgnJCcsIDMpCi0jZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1BFUklPRAkJX0lPVygnJCcsIDQsIHU2NCkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUEVSSU9ECQlfSU9XKCckJywgNCwgX191NjQpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVIJX0lPVygnJCcsIDYsIGNoYXIgKikKIApAQCAtNDg2LDggKzQ4OCw4IEBACiAJCQl1bnNpZ25lZCBsb25nCWV2ZW50X2Jhc2U7CiAJCQlpbnQJCWlkeDsKIAkJfTsKLQkJdW5pb24geyAvKiBzb2Z0d2FyZSAqLwotCQkJYXRvbWljNjRfdAljb3VudDsKKwkJc3RydWN0IHsgLyogc29mdHdhcmUgKi8KKwkJCXM2NAkJcmVtYWluaW5nOwogCQkJc3RydWN0IGhydGltZXIJaHJ0aW1lcjsKIAkJfTsKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCkBAIC03MzcsNyArNzM5LDYgQEAKIAlpbnQJCQkJbm1pOwogCWludAkJCQlzYW1wbGU7CiAJaW50CQkJCWxvY2tlZDsKLQl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CiB9OwogCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA0NmU5YWIzLi45NjQyYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtNzYsMTEgKzc2LDcgQEAKIAogZXh0ZXJuIHZvaWQgY2FsbF9yY3Vfc2NoZWQoc3RydWN0IHJjdV9oZWFkICpoZWFkLAogCQkJICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCi17Ci0Jc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7Ci19CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZGY3YjIzYS4uYmNkZDY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zNTQsOCArMzU0LDggQEAKIAkJCQlpcHZzX3Byb3BlcnR5OjEsCiAJCQkJcGVla2VkOjEsCiAJCQkJbmZfdHJhY2U6MTsKKwlfX2JlMTYJCQlwcm90b2NvbDoxNjsKIAlrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzMSk7Ci0JX19iZTE2CQkJcHJvdG9jb2w7CiAKIAl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCkBAIC0zNjcsNyArMzY3LDYgQEAKICNlbmRpZgogCiAJaW50CQkJaWlmOwotCV9fdTE2CQkJcXVldWVfbWFwcGluZzsKICNpZmRlZiBDT05GSUdfTkVUX1NDSEVECiAJX191MTYJCQl0Y19pbmRleDsJLyogdHJhZmZpYyBjb250cm9sIGluZGV4ICovCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCkBAIC0zNzYsNiArMzc1LDcgQEAKICNlbmRpZgogCiAJa21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKGZsYWdzMik7CisJX191MTYJCQlxdWV1ZV9tYXBwaW5nOjE2OwogI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiAJX191OAkJCW5kaXNjX25vZGV0eXBlOjI7CiAjZW5kaWYKQEAgLTE3NTcsNiArMTc1Nyw4IEBACiAJCQkJCQkgICAgIGludCB0b19vZmZzZXQsCiAJCQkJCQkgICAgIGludCBzaXplKTsKIGV4dGVybiB2b2lkCSAgICAgICBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJICAgICAgIHNrYl9raWxsX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHVuc2lnbmVkIGludCBmbGFncyk7CiBleHRlcm4gX193c3VtCSAgICAgICBza2JfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDQ4OTAxOWUuLmI4NTA4ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtNjIsNyArNjIsNyBAQAogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJSQ0hSCiBleHRlcm4gY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqLGludCk7CiAjZW5kaWYKLWV4dGVybiBjaGFyICogc3Ryc3RyaXAoY2hhciAqKTsKK2V4dGVybiBjaGFyICogX19tdXN0X2NoZWNrIHN0cnN0cmlwKGNoYXIgKik7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgogZXh0ZXJuIGNoYXIgKiBzdHJzdHIoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBhOTkwYWNlLi5iNTA5NzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0xMDAsMjMgKzEwMCwyMyBAQAogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKICNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEUoc25hbWUpCQkJCQkgICAgICAgXAotc3RhdGljIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCitzdGF0aWMgaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCiAJcmV0dXJuIHJlZ19wcm9mX3N5c2NhbGxfZW50ZXIoInN5cyIjc25hbWUpOwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCi1zdGF0aWMgdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGVfIyNzbmFtZSh2b2lkKQkJCQkgICAgICAgXAorc3RhdGljIHZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAogCXVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJCSAgICAgICBcCiB9CiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCi1zdGF0aWMgaW50IHByb2Zfc3lzZXhpdF9lbmFibGVfIyNzbmFtZSh2b2lkKQkJCQkgICAgICAgXAorc3RhdGljIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpICAgICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAogCXJldHVybiByZWdfcHJvZl9zeXNjYWxsX2V4aXQoInN5cyIjc25hbWUpOwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCi1zdGF0aWMgdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCitzdGF0aWMgdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZV8jI3NuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKSAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl1bnJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkJCSAgICAgICBcCiB9CkBAIC0xNTcsNyArMTU3LDcgQEAKIAlzdHJ1Y3QgdHJhY2VfZXZlbnQgZW50ZXJfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewkJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZW50ZXIsCQlcCiAJfTsJCQkJCQkJCVwKLQlzdGF0aWMgaW50IGluaXRfZW50ZXJfIyNzbmFtZSh2b2lkKQkJCQlcCisJc3RhdGljIGludCBpbml0X2VudGVyXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQlcCiAJewkJCQkJCQkJXAogCQlpbnQgbnVtLCBpZDsJCQkJCQlcCiAJCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucigic3lzIiNzbmFtZSk7CQkJXApAQCAtMTkzLDcgKzE5Myw3IEBACiAJc3RydWN0IHRyYWNlX2V2ZW50IGV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewkJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZXhpdCwJCVwKIAl9OwkJCQkJCQkJXAotCXN0YXRpYyBpbnQgaW5pdF9leGl0XyMjc25hbWUodm9pZCkJCQkJXAorCXN0YXRpYyBpbnQgaW5pdF9leGl0XyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQlcCiAJewkJCQkJCQkJXAogCQlpbnQgbnVtLCBpZDsJCQkJCQlcCiAJCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucigic3lzIiNzbmFtZSk7CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IGZjMGJmM2UuLjU3ZTYzNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCi0JCQkJfCAxKlNEX1BSRUZFUl9MT0NBTAkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDEqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAogCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKaW5kZXggYzEzNGRkMS4uMDkwNzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCkBAIC03LDcgKzcsNyBAQAogCiAvKgogICogVHJhY2Ugc2VxdWVuY2VzIGFyZSB1c2VkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gY2FsbCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucwotICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUuCisgKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UgKHVwIHRvIGEgbWF4IG9mIFBBR0VfU0laRSkuCiAgKi8KIAogc3RydWN0IHRyYWNlX3NlcSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlYTcyMjZhLi4wOTVlMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnRpbyBjaGFubmVscyBwZXIgcGFydGl0aW9uICgxIGZvciBub3cpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMDlkNzMwMC4uMTQxOGYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE1Y2I2NjYuLmZkMjk0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogRmVhdHVyZSBiaXRzICovCkBAIC0xMywxMSArMTQsOCBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfUk8JCTUJLyogRGlzayBpcyByZWFkLW9ubHkgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCi0jZGVmaW5lIFZJUlRJT19CTEtfRl9JREVOVElGWQk4CS8qIEFUQSBJREVOVElGWSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCiAKLSNkZWZpbmUgVklSVElPX0JMS19JRF9CWVRFUwkoc2l6ZW9mKF9fdTE2WzI1Nl0pKQkvKiBJREVOVElGWSBEQVRBICovCi0KIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KIAlfX3U2NCBjYXBhY2l0eTsKQEAgLTMzLDcgKzMxLDYgQEAKIAl9IGdlb21ldHJ5OwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7Ci0JX191OCBpZGVudGlmeVtWSVJUSU9fQkxLX0lEX0JZVEVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggYjVmNTE5OC4uZmU4ODUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDFmNDE3MzQuLjA4NWU0MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCmluZGV4IDQ4MTIxYzMuLmM0ZDVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX1JOR19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKaW5kZXggZTI2ODEyMi4uZmIwMGIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKQEAgLTE1OSw4ICsxNTksNyBAQAogICogQHFpZDogdGhlICZwOV9xaWQgc2VydmVyIGlkZW50aWZpZXIgdGhpcyBoYW5kbGUgcG9pbnRzIHRvCiAgKiBAaW91bml0OiB0aGUgc2VydmVyIHJlcG9ydGVkIG1heGltdW0gdHJhbnNhY3Rpb24gc2l6ZSBmb3IgdGhpcyBmaWxlCiAgKiBAdWlkOiB0aGUgbnVtZXJpYyB1aWQgb2YgdGhlIGxvY2FsIHVzZXIgd2hvIG93bnMgdGhpcyBoYW5kbGUKLSAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAodW51c2VkPykKLSAqIEByZGlyX2Zwb3M6IHRyYWNrcyBvZmZzZXQgb2YgZmlsZSBwb3NpdGlvbiB3aGVuIHJlYWRpbmcgZGlyZWN0b3J5IGNvbnRlbnRzCisgKiBAcmRpcjogcmVhZGRpciBhY2NvdW50aW5nIHN0cnVjdHVyZSAoYWxsb2NhdGVkIG9uIGRlbWFuZCkKICAqIEBmbGlzdDogcGVyLWNsaWVudC1pbnN0YW5jZSBmaWQgdHJhY2tpbmcKICAqIEBkbGlzdDogcGVyLWRlbnRyeSBmaWQgdHJhY2tpbmcKICAqCkBAIC0xNzQsOSArMTczLDkgQEAKIAlzdHJ1Y3QgcDlfcWlkIHFpZDsKIAl1MzIgaW91bml0OwogCXVpZF90IHVpZDsKLQl2b2lkICphdXg7CiAKLQlpbnQgcmRpcl9mcG9zOworCXZvaWQgKnJkaXI7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7CS8qIGxpc3Qgb2YgYWxsIGZpZHMgYXR0YWNoZWQgdG8gYSBkZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCmluZGV4IGI2M2I4MGYuLmY5M2FkOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCV9fdTE2CQkJdHdfbnVtOwogCWttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFncyk7CiAJLyogQW5kIHRoZXNlIGFyZSBvdXJzLiAqLwotCV9fdTgJCQl0d19pcHY2b25seToxLAotCQkJCXR3X3RyYW5zcGFyZW50OjE7Ci0JLyogMTQgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLworCXVuc2lnbmVkIGludAkJdHdfaXB2Nm9ubHkgICAgIDogMSwKKwkJCQl0d190cmFuc3BhcmVudCAgOiAxLAorCQkJCXR3X3BhZAkJOiAxNCwJLyogMTQgYml0cyBob2xlICovCisJCQkJdHdfaXB2Nl9vZmZzZXQgIDogMTY7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7Ci0JX191MTYJCQl0d19pcHY2X29mZnNldDsKIAl1bnNpZ25lZCBsb25nCQl0d190dGQ7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQJKnR3X3RiOwogCXN0cnVjdCBobGlzdF9ub2RlCXR3X2RlYXRoX25vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCmluZGV4IGVmOTFmZTkuLjRkMjJmYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCkBAIC0yMTAsNyArMjEwLDggQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1faXB2NF9wb2xpY3lbXTsKIGV4dGVybiB2b2lkCQlpcF9maWJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgZmliX3ZhbGlkYXRlX3NvdXJjZShfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LCB1OCB0b3MsIGludCBvaWYsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwgdTMyICppdGFnKTsKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgKnNwZWNfZHN0LAorCQkJICAgICAgIHUzMiAqaXRhZywgdTMyIG1hcmspOwogZXh0ZXJuIHZvaWQgZmliX3NlbGVjdF9kZWZhdWx0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsCiAJCQkgICAgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDQ2Njg1OWIuLmM3NWI5NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMTY2OSw2ICsxNjY5LDggQEAKICAqIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV9yeF9pcnFzYWZlKCkgbWF5IG5vdCBiZSBtaXhlZCBmb3IgYQogICogc2luZ2xlIGhhcmR3YXJlLgogICoKKyAqIE5vdGUgdGhhdCByaWdodCBub3csIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4KKyAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb24KICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCBjYmRkNjI4Li41Y2Y3MjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0yNTUsMTEgKzI1NSw5IEBACiB9CiAKIC8qIFRoZXNlIGFyZSBmb3IgTkFULiAgSWNreS4gKi8KLS8qIFVwZGF0ZSBUQ1Agd2luZG93IHRyYWNraW5nIGRhdGEgd2hlbiBOQVQgbWFuZ2xlcyB0aGUgcGFja2V0ICovCi1leHRlcm4gdm9pZCBuZl9jb25udHJhY2tfdGNwX3VwZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBpbnQgZGlyLAotCQkJCSAgICBzMTYgb2Zmc2V0KTsKK2V4dGVybiBzMTYgKCpuZl9jdF9uYXRfb2Zmc2V0KShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKKwkJCSAgICAgICB1MzIgc2VxKTsKIAogLyogRmFrZSBjb25udHJhY2sgZW50cnkgZm9yIHVudHJhY2tlZCBjb25uZWN0aW9ucyAqLwogZXh0ZXJuIHN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaAppbmRleCAyMzdhOTYxLi40MjIyMjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmgKQEAgLTMyLDQgKzMyLDggQEAKICAqIHRvIHBvcnQgY3QtPm1hc3Rlci0+c2F2ZWRfcHJvdG8uICovCiBleHRlcm4gdm9pZCBuZl9uYXRfZm9sbG93X21hc3RlcihzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKKworZXh0ZXJuIHMxNiBuZl9uYXRfZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCisJCQkgICAgIHUzMiBzZXEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggMTYyMTkzNS4uOWY5NjM5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMjI2LDEyICsyMjYsMTIgQEAKICNkZWZpbmUgc2tfcHJvdAkJCV9fc2tfY29tbW9uLnNrY19wcm90CiAjZGVmaW5lIHNrX25ldAkJCV9fc2tfY29tbW9uLnNrY19uZXQKIAlrbWVtY2hlY2tfYml0ZmllbGRfYmVnaW4oZmxhZ3MpOwotCXVuc2lnbmVkIGNoYXIJCXNrX3NodXRkb3duIDogMiwKLQkJCQlza19ub19jaGVjayA6IDIsCi0JCQkJc2tfdXNlcmxvY2tzIDogNDsKKwl1bnNpZ25lZCBpbnQJCXNrX3NodXRkb3duICA6IDIsCisJCQkJc2tfbm9fY2hlY2sgIDogMiwKKwkJCQlza191c2VybG9ja3MgOiA0LAorCQkJCXNrX3Byb3RvY29sICA6IDgsCisJCQkJc2tfdHlwZSAgICAgIDogMTY7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7Ci0JdW5zaWduZWQgY2hhcgkJc2tfcHJvdG9jb2w7Ci0JdW5zaWduZWQgc2hvcnQJCXNrX3R5cGU7CiAJaW50CQkJc2tfcmN2YnVmOwogCXNvY2tldF9sb2NrX3QJCXNrX2xvY2s7CiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IGQ2OTZhNjkuLmUwZjZmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtMjYyLDYgKzI2Miw4IEBACiAJc3RydWN0IGRldmljZQkJCWRldjsKIAkvKiBkYXRhIGludGVybmFsIHRvIHRoZSBzb2NrZXQgZHJpdmVyICovCiAJdm9pZAkJCQkqZHJpdmVyX2RhdGE7CisJLyogc3RhdHVzIG9mIHRoZSBjYXJkIGR1cmluZyByZXN1bWUgZnJvbSBhIHN5c3RlbSBzbGVlcCBzdGF0ZSAqLworCWludAkJCQlyZXN1bWVfc3RhdHVzOwogfTsKIAogCkBAIC0yODAsNiArMjgyLDggQEAKIAogLyogc29ja2V0IGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBjYWxsYmFja3MgaW4gdGhlaXIgLmRydiBzdHJ1Y3QgKi8KIGV4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIAogLyogc29ja2V0IGRyaXZlcnMgdXNlIHRoaXMgY2FsbGJhY2sgaW4gdGhlaXIgSVJRIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2tkZXAuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrZGVwLmgKcmVuYW1lIHRvIGluY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaAppbmRleCBiY2YxZDIwLi5hODcwYmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCkBAIC0xLDggKzEsOCBAQAogI3VuZGVmIFRSQUNFX1NZU1RFTQotI2RlZmluZSBUUkFDRV9TWVNURU0gbG9ja2RlcAorI2RlZmluZSBUUkFDRV9TWVNURU0gbG9jawogCi0jaWYgIWRlZmluZWQoX1RSQUNFX0xPQ0tERVBfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKLSNkZWZpbmUgX1RSQUNFX0xPQ0tERVBfSAorI2lmICFkZWZpbmVkKF9UUkFDRV9MT0NLX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9MT0NLX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CkBAIC05MCw3ICs5MCw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jZW5kaWYgLyogX1RSQUNFX0xPQ0tERVBfSCAqLworI2VuZGlmIC8qIF9UUkFDRV9MT0NLX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCiAjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBjOWJiY2FiLi40OTQ1ZDFjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC00MDIsMTIgKzQwMiwxMiBAQAogCQkJCQkJCQkJXAogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKHByb3RvKTsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNjYWxsKHZvaWQpCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCiB7CQkJCQkJCQkJXAogCXJldHVybiByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbCh2b2lkKQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCiB7CQkJCQkJCQkJXAogCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CQkJXAogfQpAQCAtNDI2LDcgKzQyNiw3IEBACiAgKglldmVudF90cmFjZV9wcmludGsoX1JFVF9JUF8sICI8Y2FsbD46ICIgPGZtdD4pOwogICogfQogICoKLSAqIHN0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpCiAgKiB7CiAgKglpbnQgcmV0OwogICoKQEAgLTQzNyw3ICs0MzcsNyBAQAogICoJcmV0dXJuIHJldDsKICAqIH0KICAqCi0gKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX2V2ZW50XzxjYWxsPik7CiAgKiB9CkBAIC00NzIsNyArNDcyLDcgQEAKICAqCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7CiAgKiB9CiAgKgotICogc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJaW50IHJldDsKICAqCkBAIC00ODMsNyArNDgzLDcgQEAKICAqCXJldHVybiByZXQ7CiAgKiB9CiAgKgotICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkKICAqIHsKICAqCXVucmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9yYXdfZXZlbnRfPGNhbGw+KTsKICAqIH0KQEAgLTQ5Miw3ICs0OTIsNyBAQAogICoJLnRyYWNlCQkJPSBmdHJhY2VfcmF3X291dHB1dF88Y2FsbD4sIDwtLSBzdGFnZSAyCiAgKiB9OwogICoKLSAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XzxjYWxsPih2b2lkKQorICogc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJaW50IGlkOwogICoKQEAgLTU4OSw3ICs1ODksNyBAQAogCQkJCQkJICBldmVudCwgaXJxX2ZsYWdzLCBwYyk7IFwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCh2b2lkICpwdHIpCQkJXAorc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAogewkJCQkJCQkJCVwKIAlpbnQgcmV0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC02MDAsNyArNjAwLDcgQEAKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwodm9pZCAqcHRyKQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAogfQkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNyBAQAogCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfIyNjYWxsLAkJXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKIHsJCQkJCQkJCQlcCiAJaW50IGlkOwkJCQkJCQkJXAogCQkJCQkJCQkJXApAQCAtNjQ5LDYgKzY0OSw3IEBACiAgKglzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfPGNhbGw+OwogICoJZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CiAgKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OworICoJc3RydWN0IHBlcmZfdHJhY2VfYnVmICp0cmFjZV9idWY7CiAgKgl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CiAgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKICAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwpAQCAtNjczLDE0ICs2NzQsMjUgQEAKICAqCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogICoKICAqCWlmIChpbl9ubWkoKSkKLSAqCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworICoJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwogICoJZWxzZQotICoJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmKTsKKyAqCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwogICoKLSAqCWlmICghcmF3X2RhdGEpCisgKglpZiAoIXRyYWNlX2J1ZikKICAqCQlnb3RvIGVuZDsKICAqCi0gKglyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBfX2NwdSk7CisgKgl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKKyAqCisgKiAJLy8gQXZvaWQgcmVjdXJzaW9uIGZyb20gcGVyZiB0aGF0IGNvdWxkIG1lc3MgdXAgdGhlIGJ1ZmZlcgorICogCWlmICh0cmFjZV9idWYtPnJlY3Vyc2lvbisrKQorICoJCWdvdG8gZW5kX3JlY3Vyc2lvbjsKKyAqCisgKiAJcmF3X2RhdGEgPSB0cmFjZV9idWYtPmJ1ZjsKKyAqCisgKgkvLyBNYWtlIHJlY3Vyc2lvbiB1cGRhdGUgdmlzaWJsZSBiZWZvcmUgZW50ZXJpbmcgcGVyZl90cF9ldmVudAorICoJLy8gc28gdGhhdCB3ZSBwcm90ZWN0IGZyb20gcGVyZiByZWN1cnNpb25zLgorICoKKyAqCWJhcnJpZXIoKTsKICAqCiAgKgkvL3plcm8gZGVhZCBieXRlcyBmcm9tIGFsaWdubWVudCB0byBhdm9pZCBzdGFjayBsZWFrIHRvIHVzZXJzcGFjZToKICAqCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKQEAgLTcxMyw4ICs3MjUsOSBAQAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF8jI2NhbGw7CQlcCi0JZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CVwKKwlleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OwkJCQlcCisJc3RydWN0IHBlcmZfdHJhY2VfYnVmICp0cmFjZV9idWY7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCkBAIC03MzksMTQgKzc1MiwyMCBAQAogCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQkJXAogCQkJCQkJCQkJXAogCWlmIChpbl9ubWkoKSkJCQkJCQkJXAotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOwkJXAorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsJXAogCWVsc2UJCQkJCQkJCVwKLQkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOwkJXAorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwkJXAogCQkJCQkJCQkJXAotCWlmICghcmF3X2RhdGEpCQkJCQkJCVwKKwlpZiAoIXRyYWNlX2J1ZikJCQkJCQkJXAogCQlnb3RvIGVuZDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cihyYXdfZGF0YSwgX19jcHUpOwkJCVwKKwl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsJCQlcCisJaWYgKHRyYWNlX2J1Zi0+cmVjdXJzaW9uKyspCQkJCQlcCisJCWdvdG8gZW5kX3JlY3Vyc2lvbjsJCQkJCVwKKwkJCQkJCQkJCVwKKwliYXJyaWVyKCk7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyYXdfZGF0YSA9IHRyYWNlX2J1Zi0+YnVmOwkJCQkJXAogCQkJCQkJCQkJXAogCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsJCVwKIAllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilyYXdfZGF0YTsJCQlcCkBAIC03NjEsNiArNzgwLDggQEAKIAlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAogCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCiAJCQkJCQkJCQlcCitlbmRfcmVjdXJzaW9uOgkJCQkJCQkJXAorCXRyYWNlX2J1Zi0+cmVjdXJzaW9uLS07CQkJCQkJXAogZW5kOgkJCQkJCQkJCVwKIAlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmggYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAppbmRleCBlOTcyZjBhLi41MWVlMTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAorKysgYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaApAQCAtMzksMTYgKzM5LDE5IEBACiB2b2lkIHNldF9zeXNjYWxsX2V4aXRfaWQoaW50IG51bSwgaW50IGlkKTsKIGV4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9lbnRlcjsKIGV4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9leGl0OwotZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9lbnRlcih2b2lkICpwdHIpOwotZXh0ZXJuIHZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9lbnRlcih2b2lkICpwdHIpOwotZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9leGl0KHZvaWQgKnB0cik7Ci1leHRlcm4gdm9pZCB1bnJlZ19ldmVudF9zeXNjYWxsX2V4aXQodm9pZCAqcHRyKTsKKwogZXh0ZXJuIGludCBzeXNjYWxsX2VudGVyX2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCiAJCQkJc3RydWN0IHRyYWNlX3NlcSAqcyk7CiBleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAogCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOwogZXh0ZXJuIGludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGV4dGVybiBpbnQgc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiB2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOworZXh0ZXJuIHZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitleHRlcm4gaW50CitmdHJhY2VfZm9ybWF0X3N5c2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpOwogZW51bSBwcmludF9saW5lX3QgcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDA5YzVjNjQuLjllMDNlZjggMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgQVVESVRTWVNDQUxMCiAJYm9vbCAiRW5hYmxlIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBQUEM2NCB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjR8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjQgfHwgU1VQRVJIKQogCWRlZmF1bHQgeSBpZiBTRUNVUklUWV9TRUxJTlVYCiAJaGVscAogCSAgRW5hYmxlIGxvdy1vdmVyaGVhZCBzeXN0ZW0tY2FsbCBhdWRpdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0CkBAIC05MzcsNyArOTM3LDcgQEAKIAkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdmFyaW91cyBwZXJmb3JtYW5jZSBldmVudHMgcHJvdmlkZWQKIAkgIGJ5IHNvZnR3YXJlIGFuZCBoYXJkd2FyZS4KIAotCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWxkLWluIG9yIHZpYSB0aGUKKwkgIFNvZnR3YXJlIGV2ZW50cyBhcmUgc3VwcG9ydGVkIGVpdGhlciBidWlsdC1pbiBvciB2aWEgdGhlCiAJICB1c2Ugb2YgZ2VuZXJpYyB0cmFjZXBvaW50cy4KIAogCSAgTW9zdCBtb2Rlcm4gQ1BVcyBzdXBwb3J0IHBlcmZvcm1hbmNlIGV2ZW50cyB2aWEgcGVyZm9ybWFuY2UKQEAgLTk0OSw3ICs5NDksNyBAQAogCSAgdXNlZCB0byBwcm9maWxlIHRoZSBjb2RlIHRoYXQgcnVucyBvbiB0aGF0IENQVS4KIAogCSAgVGhlIExpbnV4IFBlcmZvcm1hbmNlIEV2ZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZgotCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGNldmVudCBhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCisJICB0aGVzZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgZXZlbnQgY2FwYWJpbGl0aWVzLCBhdmFpbGFibGUgdmlhIGEKIAkgIHN5c3RlbSBjYWxsIGFuZCB1c2VkIGJ5IHRoZSAicGVyZiIgdXRpbGl0eSBpbiB0b29scy9wZXJmLy4gSXQKIAkgIHByb3ZpZGVzIHBlciB0YXNrIGFuZCBwZXIgQ1BVIGNvdW50ZXJzLCBhbmQgaXQgcHJvdmlkZXMgZXZlbnQKIAkgIGNhcGFiaWxpdGllcyBvbiB0b3Agb2YgdGhvc2UuCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggY2E4M2I3My4uMDI0OWY0YiAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTcxMCwxNCArMTcxMCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwogCWlmIChjZnQtPndyaXRlX3U2NCkgewotCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXU2NCB2YWwgPSBzaW1wbGVfc3RydG91bGwoc3Ryc3RyaXAoYnVmZmVyKSwgJmVuZCwgMCk7CiAJCWlmICgqZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHZhbCA9IGNmdC0+d3JpdGVfdTY0KGNncnAsIGNmdCwgdmFsKTsKIAl9IGVsc2UgewotCQlzNjQgdmFsID0gc2ltcGxlX3N0cnRvbGwoYnVmZmVyLCAmZW5kLCAwKTsKKwkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3M2NChjZ3JwLCBjZnQsIHZhbCk7CkBAIC0xNzUzLDggKzE3NTIsNyBAQAogCX0KIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwotCXJldHZhbCA9IGNmdC0+d3JpdGVfc3RyaW5nKGNncnAsIGNmdCwgYnVmZmVyKTsKKwlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIHN0cnN0cmlwKGJ1ZmZlcikpOwogCWlmICghcmV0dmFsKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCAyNjZmODkyLi4zZjQ1ZTNjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTM2MCwxMCArMzYwLDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7CiAKLQlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkgeworCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfU0lELCBwaWQpOwotCQlwcm9jX3NpZF9jb25uZWN0b3IoY3Vycik7Ci0JfQogCiAJaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwaWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNGMyMGZmZi4uMTY2YjhjNCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC05MSw3ICs5MSw3IEBACiAJaW50IGNwdTsKIAlpbnQgdG90YWwgPSAwOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJdG90YWwgKz0gcGVyX2NwdShwcm9jZXNzX2NvdW50cywgY3B1KTsKIAogCXJldHVybiB0b3RhbDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggNDk0OWQzMy4uZmI2NWU4MiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9mdXRleCh1bmlvbiBmdXRleF9rZXkgKmtleTEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MikKIHsKLQlyZXR1cm4gKGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKKwlyZXR1cm4gKGtleTEgJiYga2V5MgorCQkmJiBrZXkxLT5ib3RoLndvcmQgPT0ga2V5Mi0+Ym90aC53b3JkCiAJCSYmIGtleTEtPmJvdGgucHRyID09IGtleTItPmJvdGgucHRyCiAJCSYmIGtleTEtPmJvdGgub2Zmc2V0ID09IGtleTItPmJvdGgub2Zmc2V0KTsKIH0KQEAgLTEwMjgsNyArMTAyOSw2IEBACiB2b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksCiAJCQkgICBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQogewotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAJZ2V0X2Z1dGV4X2tleV9yZWZzKGtleSk7CiAJcS0+a2V5ID0gKmtleTsKIApAQCAtMTIyNiw2ICsxMjI2LDcgQEAKIAkJICovCiAJCWlmIChyZXQgPT0gMSkgewogCQkJV0FSTl9PTihwaV9zdGF0ZSk7CisJCQlkcm9wX2NvdW50Kys7CiAJCQl0YXNrX2NvdW50Kys7CiAJCQlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwyLCB1YWRkcjIpOwogCQkJaWYgKCFyZXQpCkBAIC0xMzA0LDYgKzEzMDUsNyBAQAogCQkJaWYgKHJldCA9PSAxKSB7CiAJCQkJLyogV2UgZ290IHRoZSBsb2NrLiAqLwogCQkJCXJlcXVldWVfcGlfd2FrZV9mdXRleCh0aGlzLCAma2V5MiwgaGIyKTsKKwkJCQlkcm9wX2NvdW50Kys7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKHJldCkgewogCQkJCS8qIC1FREVBRExLICovCkBAIC0xNzkxLDYgKzE3OTMsNyBAQAogCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAl9CiAKK3JldHJ5OgogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0xODA4LDkgKzE4MTEsMTQgQEAKIAkJZ290byBvdXRfcHV0X2tleTsKIAogCS8qCi0JICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgYW5vdGhlciB0aHJlYWQgbWF5Ci0JICogaGF2ZSBoYW5kbGVkIGl0IGZvciB1cyBhbHJlYWR5LgorCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IHdlIG1pZ2h0IGJlIHRoZQorCSAqIHZpY3RpbSBvZiBhIHNwdXJpb3VzIHdha2V1cCBhcyB3ZWxsLgogCSAqLworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OworCX0KKwogCXJldCA9IC1FUkVTVEFSVFNZUzsKIAlpZiAoIWFic190aW1lKQogCQlnb3RvIG91dF9wdXRfa2V5OwpAQCAtMjExOCw5ICsyMTI2LDExIEBACiAJCSAqLwogCQlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKIAorCQkvKiBIYW5kbGUgc3B1cmlvdXMgd2FrZXVwcyBncmFjZWZ1bGx5ICovCisJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJaWYgKHRpbWVvdXQgJiYgIXRpbWVvdXQtPnRhc2spCiAJCQlyZXQgPSAtRVRJTUVET1VUOwotCQllbHNlCisJCWVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0ID0gLUVSRVNUQVJUTk9JTlRSOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IDExNGU3MDQuLmJkNzI3M2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTEyMSw3ICsxMjEsOSBAQAogCQlpZiAoIShzdGF0dXMgJiBJUlFfU1BVUklPVVNfRElTQUJMRUQpKQogCQkJY29udGludWU7CiAKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJdHJ5X29uZV9pcnEoaSwgZGVzYyk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDUyNDBkNzUuLjg0NDk1OTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtOTAsNiArOTAsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGtwcm9iZV9ibGFja3BvaW50IGtwcm9iZV9ibGFja2xpc3RbXSA9IHsKIAl7InByZWVtcHRfc2NoZWR1bGUiLH0sCisJeyJuYXRpdmVfZ2V0X2RlYnVncmVnIix9LAorCXsiaXJxX2VudHJpZXNfc3RhcnQiLH0sCisJeyJjb21tb25faW50ZXJydXB0Iix9LAogCXtOVUxMfSAgICAvKiBUZXJtaW5hdG9yICovCiB9OwogCkBAIC02NzMsNiArNjc2LDQwIEBACiAJcmV0dXJuIChrcHJvYmVfb3Bjb2RlX3QgKikoKChjaGFyICopYWRkcikgKyBwLT5vZmZzZXQpOwogfQogCisvKiBDaGVjayBwYXNzZWQga3Byb2JlIGlzIHZhbGlkIGFuZCByZXR1cm4ga3Byb2JlIGluIGtwcm9iZV90YWJsZS4gKi8KK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlICogX19rcHJvYmVzIF9fZ2V0X3ZhbGlkX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXN0cnVjdCBrcHJvYmUgKm9sZF9wLCAqbGlzdF9wOworCisJb2xkX3AgPSBnZXRfa3Byb2JlKHAtPmFkZHIpOworCWlmICh1bmxpa2VseSghb2xkX3ApKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwICE9IG9sZF9wKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxpc3RfcCwgJm9sZF9wLT5saXN0LCBsaXN0KQorCQkJaWYgKGxpc3RfcCA9PSBwKQorCQkJLyoga3Byb2JlIHAgaXMgYSB2YWxpZCBwcm9iZSAqLworCQkJCWdvdG8gdmFsaWQ7CisJCXJldHVybiBOVUxMOworCX0KK3ZhbGlkOgorCXJldHVybiBvbGRfcDsKK30KKworLyogUmV0dXJuIGVycm9yIGlmIHRoZSBrcHJvYmUgaXMgYmVpbmcgcmUtcmVnaXN0ZXJlZCAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfa3Byb2JlX3JlcmVnKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGtwcm9iZSAqb2xkX3A7CisKKwltdXRleF9sb2NrKCZrcHJvYmVfbXV0ZXgpOworCW9sZF9wID0gX19nZXRfdmFsaWRfa3Byb2JlKHApOworCWlmIChvbGRfcCkKKwkJcmV0ID0gLUVJTlZBTDsKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IF9fa3Byb2JlcyByZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTY4NSw2ICs3MjIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcC0+YWRkciA9IGFkZHI7CiAKKwlyZXQgPSBjaGVja19rcHJvYmVfcmVyZWcocCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWlmICgha2VybmVsX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZykgcC0+YWRkcikgfHwKIAkgICAgaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpKSB7CkBAIC03NTQsMjYgKzc5NSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9rcHJvYmUpOwogCi0vKiBDaGVjayBwYXNzZWQga3Byb2JlIGlzIHZhbGlkIGFuZCByZXR1cm4ga3Byb2JlIGluIGtwcm9iZV90YWJsZS4gKi8KLXN0YXRpYyBzdHJ1Y3Qga3Byb2JlICogX19rcHJvYmVzIF9fZ2V0X3ZhbGlkX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQotewotCXN0cnVjdCBrcHJvYmUgKm9sZF9wLCAqbGlzdF9wOwotCi0Jb2xkX3AgPSBnZXRfa3Byb2JlKHAtPmFkZHIpOwotCWlmICh1bmxpa2VseSghb2xkX3ApKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwICE9IG9sZF9wKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxpc3RfcCwgJm9sZF9wLT5saXN0LCBsaXN0KQotCQkJaWYgKGxpc3RfcCA9PSBwKQotCQkJLyoga3Byb2JlIHAgaXMgYSB2YWxpZCBwcm9iZSAqLwotCQkJCWdvdG8gdmFsaWQ7Ci0JCXJldHVybiBOVUxMOwotCX0KLXZhbGlkOgotCXJldHVybiBvbGRfcDsKLX0KLQogLyoKICAqIFVucmVnaXN0ZXIgYSBrcHJvYmUgd2l0aG91dCBhIHNjaGVkdWxlciBzeW5jaHJvbml6YXRpb24uCiAgKi8KQEAgLTExNDEsNiArMTE2MiwxMyBAQAogCWFyY2hfcmVtb3ZlX2twcm9iZShwKTsKIH0KIAordm9pZCBfX2twcm9iZXMgZHVtcF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqa3ApCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiRHVtcGluZyBrcHJvYmU6XG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJOYW1lOiAlc1xuQWRkcmVzczogJXBcbk9mZnNldDogJXhcbiIsCisJICAgICAgIGtwLT5zeW1ib2xfbmFtZSwga3AtPmFkZHIsIGtwLT5vZmZzZXQpOworfQorCiAvKiBNb2R1bGUgbm90aWZpZXIgY2FsbCBiYWNrLCBjaGVja2luZyBrcHJvYmVzIG9uIHRoZSBtb2R1bGUgKi8KIHN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZXNfbW9kdWxlX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCA1ZmU3MDk5Li5hYjdhZTU3IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE1MCwyOSArMTUwLDYgQEAKIEVYUE9SVF9TWU1CT0woa3RocmVhZF9jcmVhdGUpOwogCiAvKioKLSAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KLSAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgotICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAotICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCi0gKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCi0gKi8KLXZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqaywgdW5zaWduZWQgaW50IGNwdSkKLXsKLQkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCi0JaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUoaywgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2V0X3Rhc2tfY3B1KGssIGNwdSk7Ci0Jay0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlrLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwotCWstPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKLX0KLUVYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKLQotLyoqCiAgKiBrdGhyZWFkX3N0b3AgLSBzdG9wIGEgdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KICAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDlhZjU2NzIuLmY1ZGNkMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgImxvY2tkZXBfaW50ZXJuYWxzLmgiCiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9sb2NrZGVwLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2xvY2suaD4KIAogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCiBpbnQgcHJvdmVfbG9ja2luZyA9IDE7CmRpZmYgLS1naXQgYS9rZXJuZWwvbm90aWZpZXIuYyBiL2tlcm5lbC9ub3RpZmllci5jCmluZGV4IDYxZDVhYTUuLmFjZDI0ZTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ub3RpZmllci5jCisrKyBiL2tlcm5lbC9ub3RpZmllci5jCkBAIC01NTgsNyArNTU4LDcgQEAKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKGRpZV9jaGFpbik7CiAKLWludCBub3RyYWNlIG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAoraW50IG5vdHJhY2UgX19rcHJvYmVzIG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAogCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIsIGludCB0cmFwLCBpbnQgc2lnKQogewogCXN0cnVjdCBkaWVfYXJncyBhcmdzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDlkYTU4ZWEuLmQ2NTZjMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTIxOCwxNSArMjE4LDExIEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCWlmIChrcC0+ZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQlrZnJlZSgqKGNoYXIgKiopa3AtPmFyZyk7Ci0KIAkvKiBUaGlzIGlzIGEgaGFjay4gIFdlIGNhbid0IG5lZWQgdG8gc3RyZHVwIGluIGVhcmx5IGJvb3QsIGFuZCB3ZQogCSAqIGRvbid0IG5lZWQgdG87IHRoaXMgbWFuZ2xlZCBjb21tYW5kbGluZSBpcyBwcmVzZXJ2ZWQuICovCiAJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKLQkJa3AtPmZsYWdzIHw9IEtQQVJBTV9LTUFMTE9DRUQ7CiAJCSooY2hhciAqKilrcC0+YXJnID0ga3N0cmR1cCh2YWwsIEdGUF9LRVJORUwpOwotCQlpZiAoIWtwLT5hcmcpCisJCWlmICghKihjaGFyICoqKWtwLT5hcmcpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UKIAkJKihjb25zdCBjaGFyICoqKWtwLT5hcmcgPSB2YWw7CkBAIC0zMDQsNiArMzAwLDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgsCiAJCSAgICAgICB2b2lkICplbGVtLCBpbnQgZWxlbXNpemUsCiAJCSAgICAgICBpbnQgKCpzZXQpKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApLAorCQkgICAgICAgdTE2IGZsYWdzLAogCQkgICAgICAgdW5zaWduZWQgaW50ICpudW0pCiB7CiAJaW50IHJldDsKQEAgLTMxMyw2ICszMTAsNyBAQAogCS8qIEdldCB0aGUgbmFtZSByaWdodCBmb3IgZXJyb3JzLiAqLwogCWtwLm5hbWUgPSBuYW1lOwogCWtwLmFyZyA9IGVsZW07CisJa3AuZmxhZ3MgPSBmbGFnczsKIAogCS8qIE5vIGVxdWFscyBzaWduPyAqLwogCWlmICghdmFsKSB7CkBAIC0zNTgsNyArMzU2LDggQEAKIAl1bnNpZ25lZCBpbnQgdGVtcF9udW07CiAKIAlyZXR1cm4gcGFyYW1fYXJyYXkoa3AtPm5hbWUsIHZhbCwgMSwgYXJyLT5tYXgsIGFyci0+ZWxlbSwKLQkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBhcnItPm51bSA/OiAmdGVtcF9udW0pOworCQkJICAgYXJyLT5lbGVtc2l6ZSwgYXJyLT5zZXQsIGtwLT5mbGFncywKKwkJCSAgIGFyci0+bnVtID86ICZ0ZW1wX251bSk7CiB9CiAKIGludCBwYXJhbV9hcnJheV9nZXQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKQEAgLTYwNSwxMSArNjA0LDcgQEAKIAogdm9pZCBkZXN0cm95X3BhcmFtcyhjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwYXJhbXMsIHVuc2lnbmVkIG51bSkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJaWYgKHBhcmFtc1tpXS5mbGFncyAmIEtQQVJBTV9LTUFMTE9DRUQpCi0JCQlrZnJlZSgqKGNoYXIgKiopcGFyYW1zW2ldLmFyZyk7CisJLyogRklYTUU6IFRoaXMgc2hvdWxkIGZyZWUga21hbGxvY2VkIGNoYXJwIHBhcmFtZXRlcnMuICBJdCBkb2Vzbid0LiAqLwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggOThkYzU2Yi4uMzg1MmUyNiAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMzU3LDcgKzEzNTcsNyBAQAogCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwogCiAJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCiAJCQljb250aW51ZTsKIApAQCAtMjY5NiwyMCArMjY5NiwyMSBAQAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfbG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCWludCBjcHU7CisJaW50IGN1ciwgY3B1ID0gZ2V0X2NwdSgpOwogCiAJaGFuZGxlLT5sb2NrZWQgPSAwOwogCi0JbG9jYWxfaXJxX3NhdmUoaGFuZGxlLT5mbGFncyk7Ci0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWZvciAoOzspIHsKKwkJY3VyID0gYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpOworCQlpZiAoY3VyID09IC0xKSB7CisJCQloYW5kbGUtPmxvY2tlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3VyID09IGNwdSkKKwkJCWJyZWFrOwogCi0JaWYgKGluX25taSgpICYmIGF0b21pY19yZWFkKCZkYXRhLT5sb2NrKSA9PSBjcHUpCi0JCXJldHVybjsKLQotCXdoaWxlIChhdG9taWNfY21weGNoZygmZGF0YS0+bG9jaywgLTEsIGNwdSkgIT0gLTEpCiAJCWNwdV9yZWxheCgpOwotCi0JaGFuZGxlLT5sb2NrZWQgPSAxOworCX0KIH0KIAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfdW5sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKQEAgLTI3NTUsNyArMjc1Niw3IEBACiAJaWYgKGF0b21pY194Y2hnKCZkYXRhLT53YWtldXAsIDApKQogCQlwZXJmX291dHB1dF93YWtldXAoaGFuZGxlKTsKIG91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShoYW5kbGUtPmZsYWdzKTsKKwlwdXRfY3B1KCk7CiB9CiAKIHZvaWQgcGVyZl9vdXRwdXRfY29weShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCkBAIC0zOTk4LDggKzM5OTksOSBAQAogCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCiAJaWYgKHJlZ3MpIHsKLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCQlpZiAoIShldmVudC0+YXR0ci5leGNsdWRlX2lkbGUgJiYgY3VycmVudC0+cGlkID09IDApKQorCQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAl9CiAKIAlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CkBAIC00MDA4LDYgKzQwMTAsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2Q7CisKKwkJaWYgKGh3Yy0+cmVtYWluaW5nKSB7CisJCQlpZiAoaHdjLT5yZW1haW5pbmcgPCAwKQorCQkJCXBlcmlvZCA9IDEwMDAwOworCQkJZWxzZQorCQkJCXBlcmlvZCA9IGh3Yy0+cmVtYWluaW5nOworCQkJaHdjLT5yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJfQorCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJa3RpbWVfdCByZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcik7CisJCWh3Yy0+cmVtYWluaW5nID0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKKworCQlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKKwl9Cit9CisKIC8qCiAgKiBTb2Z0d2FyZSBldmVudDogY3B1IHdhbGwgdGltZSBjbG9jawogICovCkBAIC00MDMwLDIyICs0MDY4LDE0IEBACiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAljcHVfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQpOwogfQogCkBAIC00MDgyLDIyICs0MTEyLDE1IEBACiAJbm93ID0gZXZlbnQtPmN0eC0+dGltZTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAl0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBldmVudC0+Y3R4LT50aW1lKTsKIAogfQpAQCAtNDMxOSw2ICs0MzQyLDggQEAKIAljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKOgogCWNhc2UgUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTOgogCWNhc2UgUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUzoKKwljYXNlIFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUzoKKwljYXNlIFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUzoKIAkJaWYgKCFldmVudC0+cGFyZW50KSB7CiAJCQlhdG9taWNfaW5jKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pOwogCQkJZXZlbnQtPmRlc3Ryb3kgPSBzd19wZXJmX2V2ZW50X2Rlc3Ryb3k7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKaW5kZXggMDRiM2E4My4uMDRhOWU5MCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCisrKyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwpAQCAtNjkzLDIxICs2OTMsMjIgQEAKIAkvKiBUaGUgc25hcHNob3QgZGV2aWNlIHNob3VsZCBub3QgYmUgb3BlbmVkIHdoaWxlIHdlJ3JlIHJ1bm5pbmcgKi8KIAlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZzbmFwc2hvdF9kZXZpY2VfYXZhaWxhYmxlLCAtMSwgMCkpIHsKIAkJZXJyb3IgPSAtRUJVU1k7CisJCXN3c3VzcF9jbG9zZShGTU9ERV9SRUFEKTsKIAkJZ290byBVbmxvY2s7CiAJfQogCiAJcG1fcHJlcGFyZV9jb25zb2xlKCk7CiAJZXJyb3IgPSBwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1JFU1RPUkVfUFJFUEFSRSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBjbG9zZV9maW5pc2g7CiAKIAllcnJvciA9IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gRmluaXNoOworCQlnb3RvIGNsb3NlX2ZpbmlzaDsKIAogCWVycm9yID0gY3JlYXRlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBjbG9zZV9maW5pc2g7CiAKIAlwcl9kZWJ1ZygiUE06IFByZXBhcmluZyBwcm9jZXNzZXMgZm9yIHJlc3RvcmUuXG4iKTsKIAllcnJvciA9IHByZXBhcmVfcHJvY2Vzc2VzKCk7CkBAIC03MTksNiArNzIwLDcgQEAKIAlwcl9kZWJ1ZygiUE06IFJlYWRpbmcgaGliZXJuYXRpb24gaW1hZ2UuXG4iKTsKIAogCWVycm9yID0gc3dzdXNwX3JlYWQoJmZsYWdzKTsKKwlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CiAJaWYgKCFlcnJvcikKIAkJaGliZXJuYXRpb25fcmVzdG9yZShmbGFncyAmIFNGX1BMQVRGT1JNX01PREUpOwogCkBAIC03MzcsNiArNzM5LDkgQEAKIAltdXRleF91bmxvY2soJnBtX211dGV4KTsKIAlwcl9kZWJ1ZygiUE06IFJlc3VtZSBmcm9tIGRpc2sgZmFpbGVkLlxuIik7CiAJcmV0dXJuIGVycm9yOworY2xvc2VfZmluaXNoOgorCXN3c3VzcF9jbG9zZShGTU9ERV9SRUFEKTsKKwlnb3RvIEZpbmlzaDsKIH0KIAogbGF0ZV9pbml0Y2FsbChzb2Z0d2FyZV9yZXN1bWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCmluZGV4IDE3ZDhiYjFhLi4yNTU5NmU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBUaGUgdGltZSBpdCB0YWtlcyBpcyBzeXN0ZW0tc3BlY2lmaWMgdGhvdWdoLCBzbyB3aGVuIHdlIHRlc3QgdGhpcwogICogZHVyaW5nIHN5c3RlbSBib290dXAgd2UgYWxsb3cgYSBMT1Qgb2YgdGltZS4KICAqLwotI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwk1CisjZGVmaW5lIFRFU1RfU1VTUEVORF9TRUNPTkRTCTEwCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGVzdF9zdGFydF90aW1lOwogCkBAIC00OSw3ICs0OSw4IEBACiAJICogaGFzIHNvbWUgcGVyZm9ybWFuY2UgaXNzdWVzLiAgVGhlIHN0YWNrIGR1bXAgb2YgYSBXQVJOX09OCiAJICogaXMgbW9yZSBsaWtlbHkgdG8gZ2V0IHRoZSByaWdodCBhdHRlbnRpb24gdGhhbiBhIHByaW50ay4uLgogCSAqLwotCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLCAiQ29tcG9uZW50OiAlc1xuIiwgbGFiZWwpOworCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLAorCSAgICAgIkNvbXBvbmVudDogJXMsIHRpbWU6ICV1XG4iLCBsYWJlbCwgbXNlYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCBiMTAxY2RjLi44OTBmNmIxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTMxNCw3ICszMTQsNiBAQAogewogCXVuc2lnbmVkIGludCBtOwogCWludCByZXQ7Ci0JaW50IGVycm9yID0gMDsKIAlpbnQgbnJfcGFnZXM7CiAJaW50IGVycjI7CiAJc3RydWN0IGJpbyAqYmlvOwpAQCAtMzI5LDI2ICszMjgsMjcgQEAKIAlucl9wYWdlcyA9IDA7CiAJYmlvID0gTlVMTDsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKLQlkbyB7CisJd2hpbGUgKDEpIHsKIAkJcmV0ID0gc25hcHNob3RfcmVhZF9uZXh0KHNuYXBzaG90LCBQQUdFX1NJWkUpOwotCQlpZiAocmV0ID4gMCkgewotCQkJZXJyb3IgPSBzd2FwX3dyaXRlX3BhZ2UoaGFuZGxlLCBkYXRhX29mKCpzbmFwc2hvdCksCi0JCQkJCQkmYmlvKTsKLQkJCWlmIChlcnJvcikKLQkJCQlicmVhazsKLQkJCWlmICghKG5yX3BhZ2VzICUgbSkpCi0JCQkJcHJpbnRrKCJcYlxiXGJcYiUzZCUlIiwgbnJfcGFnZXMgLyBtKTsKLQkJCW5yX3BhZ2VzKys7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPiAwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCXJldCA9IHN3YXBfd3JpdGVfcGFnZShoYW5kbGUsIGRhdGFfb2YoKnNuYXBzaG90KSwgJmJpbyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJaWYgKCEobnJfcGFnZXMgJSBtKSkKKwkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7CisJCW5yX3BhZ2VzKys7CisJfQogCWVycjIgPSB3YWl0X29uX2Jpb19jaGFpbigmYmlvKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0b3ApOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyMjsKLQlpZiAoIWVycm9yKQorCWlmICghcmV0KQorCQlyZXQgPSBlcnIyOworCWlmICghcmV0KQogCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7CisJZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fd3JpdGUsICJXcm90ZSIpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTUzNiw3ICs1MzYsOCBAQAogCQlzbmFwc2hvdF93cml0ZV9maW5hbGl6ZShzbmFwc2hvdCk7CiAJCWlmICghc25hcHNob3RfaW1hZ2VfbG9hZGVkKHNuYXBzaG90KSkKIAkJCWVycm9yID0gLUVOT0RBVEE7Ci0JfQorCX0gZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fcmVhZCwgIlJlYWQiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC01NzIsOCArNTczLDYgQEAKIAkJZXJyb3IgPSBsb2FkX2ltYWdlKCZoYW5kbGUsICZzbmFwc2hvdCwgaGVhZGVyLT5wYWdlcyAtIDEpOwogCXJlbGVhc2Vfc3dhcF9yZWFkZXIoJmhhbmRsZSk7CiAKLQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2LCBGTU9ERV9SRUFEKTsKLQogCWlmICghZXJyb3IpCiAJCXByX2RlYnVnKCJQTTogSW1hZ2Ugc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CiAJZWxzZQpAQCAtNTk2LDcgKzU5NSw3IEBACiAJCWVycm9yID0gYmlvX3JlYWRfcGFnZShzd3N1c3BfcmVzdW1lX2Jsb2NrLAogCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCQkJZ290byBwdXQ7CiAKIAkJaWYgKCFtZW1jbXAoU1dTVVNQX1NJRywgc3dzdXNwX2hlYWRlci0+c2lnLCAxMCkpIHsKIAkJCW1lbWNweShzd3N1c3BfaGVhZGVyLT5zaWcsIHN3c3VzcF9oZWFkZXItPm9yaWdfc2lnLCAxMCk7CkBAIC02MDQsOCArNjAzLDEwIEBACiAJCQllcnJvciA9IGJpb193cml0ZV9wYWdlKHN3c3VzcF9yZXN1bWVfYmxvY2ssCiAJCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQl9CisKK3B1dDoKIAkJaWYgKGVycm9yKQogCQkJYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfUkVBRCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IDcwNWYwMmEuLmYzMDc3YzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtNTksNyArNTksNyBAQAogCQlOVU1fUkNVX0xWTF8yLCBcCiAJCU5VTV9SQ1VfTFZMXzMsIC8qID09IE1BWF9SQ1VfTFZMUyAqLyBcCiAJfSwgXAotCS5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVCwgXAorCS5zaWduYWxlZCA9IFJDVV9HUF9JRExFLCBcCiAJLmdwbnVtID0gLTMwMCwgXAogCS5jb21wbGV0ZWQgPSAtMzAwLCBcCiAJLm9ub2ZmbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKQEAgLTY1NywxNCArNjU3LDE3IEBACiAJICogaXJxcyBkaXNhYmxlZC4KIAkgKi8KIAlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCisJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgbm93IE9LLiAqLworCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtNzA2LDYgKzcwOSw3IEBACiB7CiAJV0FSTl9PTl9PTkNFKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSk7CiAJcnNwLT5jb21wbGV0ZWQgPSByc3AtPmdwbnVtOworCXJzcC0+c2lnbmFsZWQgPSBSQ1VfR1BfSURMRTsKIAlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKIAlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7ICAvKiByZWxlYXNlcyByb290IG5vZGUncyBybnAtPmxvY2suICovCiB9CkBAIC05MTMsNyArOTE3LDIwIEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLAorCQkgKiBhbmQgaWYgYWxsIENQVXMgaGF2ZSBjaGVja2VkIGluLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZQorCQkgKiB0aGUgcXVpZXNjZW50IHN0YXRlIHVwIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICBCdXQgdGhhdAorCQkgKiBpcyBpbmNvbnZlbmllbnQgYXQgdGhlIG1vbWVudCBkdWUgdG8gZGVhZGxvY2sgaXNzdWVzIGlmCisJCSAqIHRoaXMgc2hvdWxkIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuICBTbyBzZXQgdGhlCisJCSAqIG9mZmxpbmVkIENQVSdzIGJpdCBpbiAtPnFzbWFzayBpbiBvcmRlciB0byBmb3JjZSB0aGUKKwkJICogbmV4dCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpbnZvY2F0aW9uIHRvIGNsZWFuIHVwIHRoaXMKKwkJICogbWVzcyBpbiBhIGRlYWRsb2NrLWZyZWUgbWFubmVyLgorCQkgKi8KKwkJaWYgKHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCkgJiYgIXJucC0+cXNtYXNrKQorCQkJcm5wLT5xc21hc2sgfD0gbWFzazsKKwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwpAQCAtOTU4LDcgKzk3NSw3IEBACiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhvdHRsZSBhcyBzcGVjaWZpZWQgYnkgcmRwLT5ibGltaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9oZWFkICpuZXh0LCAqbGlzdCwgKip0YWlsOwpAQCAtMTAxMSw2ICsxMDI4LDEzIEBACiAJaWYgKHJkcC0+YmxpbWl0ID09IExPTkdfTUFYICYmIHJkcC0+cWxlbiA8PSBxbG93bWFyaykKIAkJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAKKwkvKiBSZXNldCAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgdHJpZ2dlciBpZiBlbm91Z2ggQ0JzIGhhdmUgZHJhaW5lZC4gKi8KKwlpZiAocmRwLT5xbGVuID09IDAgJiYgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICE9IDApIHsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJfSBlbHNlIGlmIChyZHAtPnFsZW4gPCByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgLSBxaGltYXJrKQorCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBSZS1yYWlzZSB0aGUgUkNVIHNvZnRpcnEgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyByZW1haW5pbmcuICovCkBAIC0xMTQyLDkgKzExNjYsMTAgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CiAJc3dpdGNoIChzaWduYWxlZCkgeworCWNhc2UgUkNVX0dQX0lETEU6CiAJY2FzZSBSQ1VfR1BfSU5JVDoKIAotCQlicmVhazsgLyogZ3JhY2UgcGVyaW9kIHN0aWxsIGluaXRpYWxpemluZywgaWdub3JlLiAqLworCQlicmVhazsgLyogZ3JhY2UgcGVyaW9kIGlkbGUgb3IgaW5pdGlhbGl6aW5nLCBpZ25vcmUuICovCiAKIAljYXNlIFJDVV9TQVZFX0RZTlRJQ0s6CiAKQEAgLTExNTgsNyArMTE4Myw4IEBACiAKIAkJLyogVXBkYXRlIHN0YXRlLCByZWNvcmQgY29tcGxldGlvbiBjb3VudGVyLiAqLwogCQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JCWlmIChsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCkgeworCQlpZiAobGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQgJiYKKwkJICAgIHJzcC0+c2lnbmFsZWQgPT0gUkNVX1NBVkVfRFlOVElDSykgewogCQkJcnNwLT5zaWduYWxlZCA9IFJDVV9GT1JDRV9RUzsKIAkJCWR5bnRpY2tfcmVjb3JkX2NvbXBsZXRlZChyc3AsIGxhc3Rjb21wKTsKIAkJfQpAQCAtMTIyNCw3ICsxMjUwLDcgQEAKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlYWR5LCBpbnZva2UgdGhlbS4gKi8KLQlyY3VfZG9fYmF0Y2gocmRwKTsKKwlyY3VfZG9fYmF0Y2gocnNwLCByZHApOwogfQogCiAvKgpAQCAtMTI4OCwxMCArMTMxNCwyMCBAQAogCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiByZWxlYXNlcyBybnBfcm9vdC0+bG9jay4gKi8KIAl9CiAKLQkvKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLiAqLwotCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHFoaW1hcmspKSB7CisJLyoKKwkgKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLgorCSAqIEVuZm9yY2UgaHlzdGVyZXNpcywgYW5kIGRvbid0IGludm9rZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKQorCSAqIGlmIHNvbWUgb3RoZXIgQ1BVIGhhcyByZWNlbnRseSBkb25lIHNvLiAgQWxzbywgZG9uJ3QgYm90aGVyCisJICogaW52b2tpbmcgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaWYgdGhlIG5ld2x5IGVucXVldWVkIGNhbGxiYWNrCisJICogaXMgdGhlIG9ubHkgb25lIHdhaXRpbmcgZm9yIGEgZ3JhY2UgcGVyaW9kIHRvIGNvbXBsZXRlLgorCSAqLworCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayArIHFoaW1hcmspKSB7CiAJCXJkcC0+YmxpbWl0ID0gTE9OR19NQVg7Ci0JCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlpZiAocnNwLT5uX2ZvcmNlX3FzID09IHJkcC0+bl9mb3JjZV9xc19zbmFwICYmCisJCSAgICAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICE9IGhlYWQpCisJCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKIAl9IGVsc2UgaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xNTIzLDYgKzE1NTksOCBAQAogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KIAlyZHAtPnByZWVtcHRhYmxlID0gcHJlZW1wdGFibGU7CiAJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IGxhc3Rjb21wIC0gMTsKKwlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOworCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IGI0MGFjNTcuLjE4OTkwMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtMTY3LDYgKzE2NywxMCBAQAogCXN0cnVjdCByY3VfaGVhZCAqbnh0bGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipueHR0YWlsW1JDVV9ORVhUX1NJWkVdOwogCWxvbmcJCXFsZW47CQkvKiAjIG9mIHF1ZXVlZCBjYWxsYmFja3MgKi8KKwlsb25nCQlxbGVuX2xhc3RfZnFzX2NoZWNrOworCQkJCQkvKiBxbGVuIGF0IGxhc3QgY2hlY2sgZm9yIFFTIGZvcmNpbmcgKi8KKwl1bnNpZ25lZCBsb25nCW5fZm9yY2VfcXNfc25hcDsKKwkJCQkJLyogZGlkIG90aGVyIENQVSBmb3JjZSBRUyByZWNlbnRseT8gKi8KIAlsb25nCQlibGltaXQ7CQkvKiBVcHBlciBsaW1pdCBvbiBhIHByb2Nlc3NlZCBiYXRjaCAqLwogCiAjaWZkZWYgQ09ORklHX05PX0haCkBAIC0xOTcsOSArMjAxLDEwIEBACiB9OwogCiAvKiBWYWx1ZXMgZm9yIHNpZ25hbGVkIGZpZWxkIGluIHN0cnVjdCByY3Vfc3RhdGUuICovCi0jZGVmaW5lIFJDVV9HUF9JTklUCQkwCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KLSNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkxCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLwotI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTIJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCisjZGVmaW5lIFJDVV9HUF9JRExFCQkwCS8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi8KKyNkZWZpbmUgUkNVX0dQX0lOSVQJCTEJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLworI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTIJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCisjZGVmaW5lIFJDVV9GT1JDRV9RUwkJMwkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KICNpZmRlZiBDT05GSUdfTk9fSFoKICNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9EWU5USUNLCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCkBAIC0zMDIsOSArMzA3LDkgQEAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOworc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV9jcHUoaW50IGNwdSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCBjMGNiNzgzLi5lZjJhNThjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtMzA0LDIxICszMDQsMjUgQEAKICAqIHBhcmVudCBpcyB0byByZW1vdmUgdGhlIG5lZWQgZm9yIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKCkgdG8KICAqIG1ha2UgbW9yZSB0aGFuIHR3byBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSB0YXJnZXQgcmN1X25vZGUncyBsb2NrLgogICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UKKyAqIHBlcmlvZCBvbiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KKyAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBybnAtPmxvY2sgd2l0aCBpcnFzIGRpc2FibGVkLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwX3Jvb3Q7CisJaW50IHJldHZhbCA9IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRwOwogCiAJaWYgKHJucCA9PSBybnBfcm9vdCkgewogCQlXQVJOX09OQ0UoMSwgIkxhc3QgQ1BVIHRob3VnaHQgdG8gYmUgb2ZmbGluZWQ/Iik7Ci0JCXJldHVybjsgIC8qIFNob3VsZG4ndCBoYXBwZW46IGF0IGxlYXN0IG9uZSBDUFUgb25saW5lLiAqLworCQlyZXR1cm4gMDsgIC8qIFNob3VsZG4ndCBoYXBwZW46IGF0IGxlYXN0IG9uZSBDUFUgb25saW5lLiAqLwogCX0KIAlXQVJOX09OX09OQ0Uocm5wICE9IHJkcC0+bXlub2RlICYmCiAJCSAgICAgKCFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbMF0pIHx8CkBAIC0zNDIsNiArMzQ2LDggQEAKIAkJCXNwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCX0KIAl9CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgpAQCAtMzkzLDYgKzM5OSwxNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCiAvKgorICogV2FpdCBmb3IgYW4gcmN1LXByZWVtcHQgZ3JhY2UgcGVyaW9kLiAgV2UgYXJlIHN1cHBvc2VkIHRvIGV4cGVkaXRlIHRoZQorICogZ3JhY2UgcGVyaW9kLCBidXQgdGhpcyBpcyB0aGUgY3J1ZGUgc2xvdyBjb21wYXRhYmlsaXR5IGhhY2ssIHNvIGp1c3QKKyAqIGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKS4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCit7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKTsKKworLyoKICAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1tZWRpYXRlIHByZWVtcHRhYmxlLVJDVS1yZWxhdGVkIHdvcmsKICAqIHRvIGJlIGRvbmUuCiAgKi8KQEAgLTUyMSwxMiArNTM4LDE1IEBACiAKIC8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQotICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kCisgKiBzdWNoIG5vbi1leGlzdGVudCB0YXNrcyBjYW5ub3QgcG9zc2libHkgaGF2ZSBiZWVuIGJsb2NraW5nIHRoZSBjdXJyZW50CisgKiBncmFjZSBwZXJpb2QuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NjUsNiArNTg1LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBtYWtlIGl0IGhhcHBlbiBxdWlja2x5LgorICogQnV0IGJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgd29yayB0byBkby4KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGU4ODY4OTUuLjNjMTFhZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMDksNiArMzA5LDggQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNrX2dyb3VwX2xvY2spOwogCisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2VtcHR5KHZvaWQpCiB7CkBAIC0zMTYsNyArMzE4LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJKDIqTklDRV8wX0xPQUQpCiAjZWxzZSAvKiAhQ09ORklHX1VTRVJfU0NIRUQgKi8KQEAgLTE1NjQsMTEgKzE1NjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAotc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyBycV93ZWlnaHRbTlJfQ1BVU107Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSwgdXBkYXRlX3NoYXJlc19kYXRhKTsKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHVuc2lnbmVkIGxvbmcgKnVwZGF0ZV9zaGFyZXNfZGF0YTsKIAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7CiAKQEAgLTE1NzgsMTIgKzE1NzUsMTIgQEAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9zaGFyZXMsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2RfcnFfd2VpZ2h0LAotCQkJCSAgICBzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2QpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaGFyZXMsIHJxX3dlaWdodDsKIAlpbnQgYm9vc3QgPSAwOwogCi0JcnFfd2VpZ2h0ID0gdXNkLT5ycV93ZWlnaHRbY3B1XTsKKwlycV93ZWlnaHQgPSB1c2RfcnFfd2VpZ2h0W2NwdV07CiAJaWYgKCFycV93ZWlnaHQpIHsKIAkJYm9vc3QgPSAxOwogCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKQEAgLTE2MTgsNyArMTYxNSw3IEBACiBzdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDAsIHNoYXJlcyA9IDA7Ci0Jc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkOworCXVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CkBAIC0xNjI3LDExICsxNjI0LDExIEBACiAJCXJldHVybiAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVzZCA9ICZfX2dldF9jcHVfdmFyKHVwZGF0ZV9zaGFyZXNfZGF0YSk7CisJdXNkX3JxX3dlaWdodCA9IHBlcl9jcHVfcHRyKHVwZGF0ZV9zaGFyZXNfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpIHsKIAkJd2VpZ2h0ID0gdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7Ci0JCXVzZC0+cnFfd2VpZ2h0W2ldID0gd2VpZ2h0OworCQl1c2RfcnFfd2VpZ2h0W2ldID0gd2VpZ2h0OwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gdGFza3Mgb24gdGhlIGNwdSBwcmV0ZW5kIHRoZXJlCkBAIC0xNjUyLDcgKzE2NDksNyBAQAogCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkKLQkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2QpOworCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZF9ycV93ZWlnaHQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0xOTk2LDYgKzE5OTMsMzggQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnByaW9fY2hhbmdlZChycSwgcCwgb2xkcHJpbywgcnVubmluZyk7CiB9CiAKKy8qKgorICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgorICogQHA6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCisgKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCisgKgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCisgKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKKyAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KKyAqCisgKiBGdW5jdGlvbiBsaXZlcyBoZXJlIGluc3RlYWQgb2Yga3RocmVhZC5jIGJlY2F1c2UgaXQgbWVzc2VzIHdpdGgKKyAqIHNjaGVkdWxlciBpbnRlcm5hbHMgd2hpY2ggcmVxdWlyZSBsb2NraW5nLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlzZXRfdGFza19jcHUocCwgY3B1KTsKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGt0aHJlYWRfYmluZCk7CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogSXMgdGhpcyB0YXNrIGxpa2VseSBjYWNoZS1ob3Q6CkBAIC0yMDA4LDcgKzIwMzcsNyBAQAogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwotCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYKKwlpZiAoc2NoZWRfZmVhdChDQUNIRV9IT1RfQlVERFkpICYmIHRoaXNfcnEoKS0+bnJfcnVubmluZyAmJgogCQkJKCZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bmV4dCB8fAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwpAQCAtOTQwNyw2ICs5NDM2LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KIAorI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCisJdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCQkJICAgIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcpKTsKKyNlbmRpZgogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBycSAqcnE7CiAKQEAgLTk1MzIsMTMgKzk1NjUsMTMgQEAKIAljdXJyZW50LT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCiAJLyogQWxsb2NhdGUgdGhlIG5vaHpfY3B1X21hc2sgaWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KLQlhbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCiAjaWZkZWYgQ09ORklHX05PX0haCi0JYWxsb2NfY3B1bWFza192YXIoJm5vaHouY3B1X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAJYWxsb2NfY3B1bWFza192YXIoJm5vaHouaWxiX2dycF9ub2h6X21hc2ssIEdGUF9OT1dBSVQpOwogI2VuZGlmCi0JYWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3ZhcigmY3B1X2lzb2xhdGVkX21hcCwgR0ZQX05PV0FJVCk7CiAjZW5kaWYgLyogU01QICovCiAKIAlwZXJmX2V2ZW50X2luaXQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDRlNzc3YjQuLjM3MDg3YTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtODIyLDYgKzgyMiwyNiBAQAogCQkgKiByZS1lbGVjdGVkIGR1ZSB0byBidWRkeSBmYXZvdXJzLgogCQkgKi8KIAkJY2xlYXJfYnVkZGllcyhjZnNfcnEsIGN1cnIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBhIHRhc2sgdGhhdCBtaXNzZWQgd2FrZXVwIHByZWVtcHRpb24gYnkgYQorCSAqIG5hcnJvdyBtYXJnaW4gZG9lc24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnVsbCBzbGljZS4KKwkgKiBUaGlzIGFsc28gbWl0aWdhdGVzIGJ1ZGR5IGluZHVjZWQgbGF0ZW5jaWVzIHVuZGVyIGxvYWQuCisJICovCisJaWYgKCFzY2hlZF9mZWF0KFdBS0VVUF9QUkVFTVBUKSkKKwkJcmV0dXJuOworCisJaWYgKGRlbHRhX2V4ZWMgPCBzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KQorCQlyZXR1cm47CisKKwlpZiAoY2ZzX3JxLT5ucl9ydW5uaW5nID4gMSkgeworCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCQlzNjQgZGVsdGEgPSBjdXJyLT52cnVudGltZSAtIHNlLT52cnVudGltZTsKKworCQlpZiAoZGVsdGEgPiBpZGVhbF9ydW50aW1lKQorCQkJcmVzY2hlZF90YXNrKHJxX29mKGNmc19ycSktPmN1cnIpOwogCX0KIH0KIApAQCAtODYxLDEyICs4ODEsMTggQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwaWNrX25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmxlZnQgPSBzZTsKIAotCWlmIChjZnNfcnEtPm5leHQgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bmV4dCwgc2UpIDwgMSkKLQkJcmV0dXJuIGNmc19ycS0+bmV4dDsKKwlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIGxlZnQpIDwgMSkKKwkJc2UgPSBjZnNfcnEtPm5leHQ7CiAKLQlpZiAoY2ZzX3JxLT5sYXN0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPmxhc3QsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPmxhc3Q7CisJLyoKKwkgKiBQcmVmZXIgbGFzdCBidWRkeSwgdHJ5IHRvIHJldHVybiB0aGUgQ1BVIHRvIGEgcHJlZW1wdGVkIHRhc2suCisJICovCisJaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBsZWZ0KSA8IDEpCisJCXNlID0gY2ZzX3JxLT5sYXN0OworCisJY2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTsKIAogCXJldHVybiBzZTsKIH0KQEAgLTE1NjgsNiArMTU5NCw3IEBACiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmY3Vyci0+c2UsICpwc2UgPSAmcC0+c2U7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gdGFza19jZnNfcnEoY3Vycik7CiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKKwlpbnQgc2NhbGUgPSBjZnNfcnEtPm5yX3J1bm5pbmcgPj0gc2NoZWRfbnJfbGF0ZW5jeTsKIAogCXVwZGF0ZV9jdXJyKGNmc19ycSk7CiAKQEAgLTE1ODIsMTggKzE2MDksNyBAQAogCWlmICh1bmxpa2VseShzZSA9PSBwc2UpKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIE9ubHkgc2V0IHRoZSBiYWNrd2FyZCBidWRkeSB3aGVuIHRoZSBjdXJyZW50IHRhc2sgaXMgc3RpbGwgb24gdGhlCi0JICogcnEuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgd2FrZXVwIGdldHMgaW50ZXJsZWF2ZWQgd2l0aCBzY2hlZHVsZSBvbgotCSAqIHRoZSAtPnByZV9zY2hlZHVsZSgpIG9yIGlkbGVfYmFsYW5jZSgpIHBvaW50LCBlaXRoZXIgb2Ygd2hpY2ggY2FuCi0JICogZHJvcCB0aGUgcnEgbG9jay4KLQkgKgotCSAqIEFsc28sIGR1cmluZyBlYXJseSBib290IHRoZSBpZGxlIHRocmVhZCBpcyBpbiB0aGUgZmFpciBjbGFzcywgZm9yCi0JICogb2J2aW91cyByZWFzb25zIGl0cyBhIGJhZCBpZGVhIHRvIHNjaGVkdWxlIGJhY2sgdG8gdGhlIGlkbGUgdGhyZWFkLgotCSAqLwotCWlmIChzY2hlZF9mZWF0KExBU1RfQlVERFkpICYmIGxpa2VseShzZS0+b25fcnEgJiYgY3VyciAhPSBycS0+aWRsZSkpCi0JCXNldF9sYXN0X2J1ZGR5KHNlKTsKLQlpZiAoc2NoZWRfZmVhdChORVhUX0JVRERZKSAmJiAhKHdha2VfZmxhZ3MgJiBXRl9GT1JLKSkKKwlpZiAoc2NoZWRfZmVhdChORVhUX0JVRERZKSAmJiBzY2FsZSAmJiAhKHdha2VfZmxhZ3MgJiBXRl9GT1JLKSkKIAkJc2V0X25leHRfYnVkZHkocHNlKTsKIAogCS8qCkBAIC0xNjM5LDggKzE2NTUsMjIgQEAKIAogCUJVR19PTighcHNlKTsKIAotCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoc2UsIHBzZSkgPT0gMSkKKwlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpIHsKIAkJcmVzY2hlZF90YXNrKGN1cnIpOworCQkvKgorCQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsCisJCSAqIG9uIHRoZSBycS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSB3YWtldXAgZ2V0cyBpbnRlcmxlYXZlZAorCQkgKiB3aXRoIHNjaGVkdWxlIG9uIHRoZSAtPnByZV9zY2hlZHVsZSgpIG9yIGlkbGVfYmFsYW5jZSgpCisJCSAqIHBvaW50LCBlaXRoZXIgb2Ygd2hpY2ggY2FuICogZHJvcCB0aGUgcnEgbG9jay4KKwkJICoKKwkJICogQWxzbywgZHVyaW5nIGVhcmx5IGJvb3QgdGhlIGlkbGUgdGhyZWFkIGlzIGluIHRoZSBmYWlyIGNsYXNzLAorCQkgKiBmb3Igb2J2aW91cyByZWFzb25zIGl0cyBhIGJhZCBpZGVhIHRvIHNjaGVkdWxlIGJhY2sgdG8gaXQuCisJCSAqLworCQlpZiAodW5saWtlbHkoIXNlLT5vbl9ycSB8fCBjdXJyID09IHJxLT5pZGxlKSkKKwkJCXJldHVybjsKKwkJaWYgKHNjaGVkX2ZlYXQoTEFTVF9CVUREWSkgJiYgc2NhbGUgJiYgZW50aXR5X2lzX3Rhc2soc2UpKQorCQkJc2V0X2xhc3RfYnVkZHkoc2UpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxKQpAQCAtMTY1NCwxNiArMTY4NCw2IEBACiAKIAlkbyB7CiAJCXNlID0gcGlja19uZXh0X2VudGl0eShjZnNfcnEpOwotCQkvKgotCQkgKiBJZiBzZSB3YXMgYSBidWRkeSwgY2xlYXIgaXQgc28gdGhhdCBpdCB3aWxsIGhhdmUgdG8gZWFybgotCQkgKiB0aGUgZmF2b3VyIGFnYWluLgotCQkgKgotCQkgKiBJZiBzZSB3YXMgbm90IGEgYnVkZHksIGNsZWFyIHRoZSBidWRkaWVzIGJlY2F1c2UgbmVpdGhlcgotCQkgKiB3YXMgZWxlZ2libGUgdG8gcnVuLCBsZXQgdGhlbSBlYXJuIGl0IGFnYWluLgotCQkgKgotCQkgKiBJT1cuIHVuY29uZGl0aW9uYWxseSBjbGVhciBidWRkaWVzLgotCQkgKi8KLQkJX19jbGVhcl9idWRkaWVzKGNmc19ycSwgTlVMTCk7CiAJCXNldF9uZXh0X2VudGl0eShjZnNfcnEsIHNlKTsKIAkJY2ZzX3JxID0gZ3JvdXBfY2ZzX3JxKHNlKTsKIAl9IHdoaWxlIChjZnNfcnEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDI1NTQ3NWQuLmNlMTc3NjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTExMTAsNiArMTExMCw4IEBACiAJZXJyID0gc2Vzc2lvbjsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoZXJyID4gMCkKKwkJcHJvY19zaWRfY29ubmVjdG9yKGdyb3VwX2xlYWRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU0NiwyNCArMTU0OCwzNyBAQAogCQkJaWYgKGFyZzQgfCBhcmc1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3dpdGNoIChhcmcyKSB7Ci0JCQljYXNlIDA6CisJCQljYXNlIFBSX01DRV9LSUxMX0NMRUFSOgogCQkJCWlmIChhcmczICE9IDApCiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfUFJPQ0VTUzsKIAkJCQlicmVhazsKLQkJCWNhc2UgMToKKwkJCWNhc2UgUFJfTUNFX0tJTExfU0VUOgogCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9QUk9DRVNTOwotCQkJCWlmIChhcmczICE9IDApCisJCQkJaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfRUFSTFkpCiAJCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9FQVJMWTsKLQkJCQllbHNlCisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9MQVRFKQogCQkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX0VBUkxZOworCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfREVGQVVMVCkKKwkJCQkJY3VycmVudC0+ZmxhZ3MgJj0KKwkJCQkJCX4oUEZfTUNFX0VBUkxZfFBGX01DRV9QUk9DRVNTKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCisJCWNhc2UgUFJfTUNFX0tJTExfR0VUOgorCQkJaWYgKGFyZzIgfCBhcmczIHwgYXJnNCB8IGFyZzUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfUFJPQ0VTUykKKwkJCQllcnJvciA9IChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9FQVJMWSkgPworCQkJCQlQUl9NQ0VfS0lMTF9FQVJMWSA6IFBSX01DRV9LSUxMX0xBVEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBQUl9NQ0VfS0lMTF9ERUZBVUxUOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBiMzg0MjNjLi5iNmU3YWFlYSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCWlmICghdGFibGUtPmN0bF9uYW1lICYmIHRhYmxlLT5zdHJhdGVneSkKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJTdHJhdGVneSB3aXRob3V0IGN0bF9uYW1lIik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCQkJaWYgKHRhYmxlLT5wcm9jbmFtZSAmJiAhdGFibGUtPnByb2NfaGFuZGxlcikKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBwcm9jX2hhbmRsZXIiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCAwNmMzZDViLi5kMDA2NTU0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtNDQ5LDYgKzQ0OSwyMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgS1BST0JFX0VWRU5UCisJZGVwZW5kcyBvbiBLUFJPQkVTCisJZGVwZW5kcyBvbiBYODYKKwlib29sICJFbmFibGUga3Byb2Jlcy1iYXNlZCBkeW5hbWljIGV2ZW50cyIKKwlzZWxlY3QgVFJBQ0lORworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGFkZCB0cmFjaW5nIGV2ZW50cyAoc2ltaWxhciB0byB0cmFjZXBvaW50cykgb24gdGhlIGZseQorCSAgdmlhIHRoZSBmdHJhY2UgaW50ZXJmYWNlLiBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKwkgIGZvciBtb3JlIGRldGFpbHMuCisKKwkgIFRob3NlIGV2ZW50cyBjYW4gYmUgaW5zZXJ0ZWQgd2hlcmV2ZXIga3Byb2JlcyBjYW4gcHJvYmUsIGFuZCByZWNvcmQKKwkgIHZhcmlvdXMgcmVnaXN0ZXIgYW5kIG1lbW9yeSB2YWx1ZXMuCisKKwkgIFRoaXMgb3B0aW9uIGlzIGFsc28gcmVxdWlyZWQgYnkgcGVyZi1wcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYgdG9vbHMuIElmCisJICB5b3Ugd2FudCB0byB1c2UgcGVyZiB0b29scywgdGhpcyBvcHRpb24gaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuCisKIGNvbmZpZyBEWU5BTUlDX0ZUUkFDRQogCWJvb2wgImVuYWJsZS9kaXNhYmxlIGZ0cmFjZSB0cmFjZXBvaW50cyBkeW5hbWljYWxseSIKIAlkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IDBmODRjNTIuLmNkOWVjZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTUzLDYgKzUzLDcgQEAKIG9iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KIG9iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KK29iai0kKENPTkZJR19LUFJPQkVfRVZFTlQpICs9IHRyYWNlX2twcm9iZS5vCiBvYmotJChDT05GSUdfS1NZTV9UUkFDRVIpICs9IHRyYWNlX2tzeW0ubwogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHBvd2VyLXRyYWNlcy5vCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCBiMTBjMGQ5Li43Y2I2ZjE5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC03NTEsNyArNzUxLDcgQEAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcHJvZmlsZV9sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjE5OSwxNSArMjE5OSwxNSBAQAogCQlyZXQgPSBmdHJhY2VfcHJvY2Vzc19yZWdleChwYXJzZXItPmJ1ZmZlciwKIAkJCQkJICAgcGFyc2VyLT5pZHgsIGVuYWJsZSk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAogCQl0cmFjZV9wYXJzZXJfY2xlYXIocGFyc2VyKTsKIAl9CiAKIAlyZXQgPSByZWFkOwotCitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwotb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBlNDNjOTI4Li5kYjIyM2ZlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAvKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLwogI2RlZmluZSBERUJVR19TSElGVCAwCiAKLXN0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCitzdGF0aWMgaW5saW5lIHU2NCByYl90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKQogewogCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCiAJcmV0dXJuIGJ1ZmZlci0+Y2xvY2soKSA8PCBERUJVR19TSElGVDsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXU2NCB0aW1lOwogCiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIsIGNwdSk7CisJdGltZSA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKIAogCXJldHVybiB0aW1lOwpAQCAtNjAyLDcgKzYwMiw3IEBACiB9CiAKIC8qCi0gKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlIHBhZ2UgaXMgdGhlIGhlYWQgcGFnZQorICogcmJfaXNfaGVhZF9wYWdlIC0gdGVzdCBpZiB0aGUgZ2l2ZW4gcGFnZSBpcyB0aGUgaGVhZCBwYWdlCiAgKgogICogQmVjYXVzZSB0aGUgcmVhZGVyIG1heSBtb3ZlIHRoZSBoZWFkX3BhZ2UgcG9pbnRlciwgd2UgY2FuCiAgKiBub3QgdHJ1c3Qgd2hhdCB0aGUgaGVhZCBwYWdlIGlzIChpdCBtYXkgYmUgcG9pbnRpbmcgdG8KQEAgLTExOTYsNiArMTE5Niw3IEBACiAJYXRvbWljX2luYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCisJc3Bpbl9sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCXJiX2hlYWRfcGFnZV9kZWFjdGl2YXRlKGNwdV9idWZmZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKQEAgLTEyMTAsNiArMTIxMSw3IEBACiAJCXJldHVybjsKIAogCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKwlzcGluX3VubG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAogCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOwogCkBAIC0xODcxLDcgKzE4NzMsNyBAQAogCQkgKiBOZXN0ZWQgY29tbWl0cyBhbHdheXMgaGF2ZSB6ZXJvIGRlbHRhcywgc28KIAkJICoganVzdCByZXJlYWQgdGhlIHRpbWUgc3RhbXAKIAkJICovCi0JCSp0cyA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOworCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlcik7CiAJCW5leHRfcGFnZS0+cGFnZS0+dGltZV9zdGFtcCA9ICp0czsKIAl9CiAKQEAgLTIxMTQsNyArMjExNiw3IEBACiAJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgKytucl9sb29wcyA+IDEwMDApKQogCQlnb3RvIG91dF9mYWlsOwogCi0JdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwl0cyA9IHJiX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+YnVmZmVyKTsKIAogCS8qCiAJICogT25seSB0aGUgZmlyc3QgY29tbWl0IGNhbiB1cGRhdGUgdGhlIHRpbWVzdGFtcC4KQEAgLTI2ODQsNyArMjY4Niw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzKTsKIAogLyoqCi0gKiByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlcgorICogcmluZ19idWZmZXJfb3ZlcnJ1bnMgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKICAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlcgogICoKICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBvdmVycnVucyBpbiB0aGUgcmluZyBidWZmZXIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggMDI2ZTcxNS4uOWQzMDY3YSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTI0NDAsNyArMjQ0MCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjU4Miw3ICsyNTgyLDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjc2NCw3ICsyNzY0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZmlscC0+Zl9wb3MgKz0gcmV0OworCSpwcG9zICs9IHJldDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMjk5LDcgKzMyOTksNyBAQAogCQl9CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCBlZTAwNDc1Li40ZGE2ZWRlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtMTAzLDYgKzEwMywyOSBAQAogCXVuc2lnbmVkIGxvbmcJCXJldDsKIH07CiAKK3N0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJaW50CQkJbmFyZ3M7CisJdW5zaWduZWQgbG9uZwkJYXJnc1tdOworfTsKKworI2RlZmluZSBTSVpFT0ZfS1BST0JFX1RSQUNFX0VOVFJZKG4pCQkJXAorCShvZmZzZXRvZihzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5LCBhcmdzKSArCVwKKwkoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG4pKSkKKworc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwl1bnNpZ25lZCBsb25nCQlmdW5jOworCXVuc2lnbmVkIGxvbmcJCXJldF9pcDsKKwlpbnQJCQluYXJnczsKKwl1bnNpZ25lZCBsb25nCQlhcmdzW107Cit9OworCisjZGVmaW5lIFNJWkVPRl9LUkVUUFJPQkVfVFJBQ0VfRU5UUlkobikJCQlcCisJKG9mZnNldG9mKHN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnksIGFyZ3MpICsJXAorCShzaXplb2YodW5zaWduZWQgbG9uZykgKiAobikpKQorCiAvKgogICogdHJhY2VfZmxhZ190eXBlIGlzIGFuIGVudW1lcmF0aW9uIHRoYXQgaG9sZHMgZGlmZmVyZW50CiAgKiBzdGF0ZXMgd2hlbiBhIHRyYWNlIG9jY3Vycy4gVGhlc2UgYXJlOgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggOGQ1YzE3MS4uZTBkMzUxYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC04LDQ0ICs4LDM5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSAidHJhY2UuaCIKIAotLyoKLSAqIFdlIGNhbid0IHVzZSBhIHNpemUgYnV0IGEgdHlwZSBpbiBhbGxvY19wZXJjcHUoKQotICogU28gbGV0J3MgY3JlYXRlIGEgZHVtbXkgdHlwZSB0aGF0IG1hdGNoZXMgdGhlIGRlc2lyZWQgc2l6ZQotICovCi10eXBlZGVmIHN0cnVjdCB7Y2hhciBidWZbRlRSQUNFX01BWF9QUk9GSUxFX1NJWkVdO30gcHJvZmlsZV9idWZfdDsKIAotY2hhcgkJKnRyYWNlX3Byb2ZpbGVfYnVmOwotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfcHJvZmlsZV9idWYpOworc3RydWN0IHBlcmZfdHJhY2VfYnVmICpwZXJmX3RyYWNlX2J1ZjsKK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmKTsKIAotY2hhcgkJKnRyYWNlX3Byb2ZpbGVfYnVmX25taTsKLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CitzdHJ1Y3QgcGVyZl90cmFjZV9idWYgKnBlcmZfdHJhY2VfYnVmX25taTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmX25taSk7CiAKIC8qIENvdW50IHRoZSBldmVudHMgaW4gdXNlIChwZXIgZXZlbnQgaWQsIG5vdCBwZXIgaW5zdGFuY2UpICovCiBzdGF0aWMgaW50CXRvdGFsX3Byb2ZpbGVfY291bnQ7CiAKIHN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlX2V2ZW50KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnQpCiB7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBwZXJmX3RyYWNlX2J1ZiAqYnVmOwogCWludCByZXQgPSAtRU5PTUVNOwogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZldmVudC0+cHJvZmlsZV9jb3VudCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7Ci0JCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlidWYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHBlcmZfdHJhY2VfYnVmKTsKIAkJaWYgKCFidWYpCiAJCQlnb3RvIGZhaWxfYnVmOwogCi0JCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1ZiwgYnVmKTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHBlcmZfdHJhY2VfYnVmLCBidWYpOwogCi0JCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlidWYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHBlcmZfdHJhY2VfYnVmKTsKIAkJaWYgKCFidWYpCiAJCQlnb3RvIGZhaWxfYnVmX25taTsKIAotCQlyY3VfYXNzaWduX3BvaW50ZXIodHJhY2VfcHJvZmlsZV9idWZfbm1pLCBidWYpOworCQlyY3VfYXNzaWduX3BvaW50ZXIocGVyZl90cmFjZV9idWZfbm1pLCBidWYpOwogCX0KIAotCXJldCA9IGV2ZW50LT5wcm9maWxlX2VuYWJsZSgpOworCXJldCA9IGV2ZW50LT5wcm9maWxlX2VuYWJsZShldmVudCk7CiAJaWYgKCFyZXQpIHsKIAkJdG90YWxfcHJvZmlsZV9jb3VudCsrOwogCQlyZXR1cm4gMDsKQEAgLTUzLDEwICs0OCwxMCBAQAogCiBmYWlsX2J1Zl9ubWk6CiAJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7Ci0JCWZyZWVfcGVyY3B1KHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7Ci0JCWZyZWVfcGVyY3B1KHRyYWNlX3Byb2ZpbGVfYnVmKTsKLQkJdHJhY2VfcHJvZmlsZV9idWZfbm1pID0gTlVMTDsKLQkJdHJhY2VfcHJvZmlsZV9idWYgPSBOVUxMOworCQlmcmVlX3BlcmNwdShwZXJmX3RyYWNlX2J1Zl9ubWkpOworCQlmcmVlX3BlcmNwdShwZXJmX3RyYWNlX2J1Zik7CisJCXBlcmZfdHJhY2VfYnVmX25taSA9IE5VTEw7CisJCXBlcmZfdHJhY2VfYnVmID0gTlVMTDsKIAl9CiBmYWlsX2J1ZjoKIAlhdG9taWNfZGVjKCZldmVudC0+cHJvZmlsZV9jb3VudCk7CkBAIC04NCwxOSArNzksMTkgQEAKIAogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50KQogewotCWNoYXIgKmJ1ZiwgKm5taV9idWY7CisJc3RydWN0IHBlcmZfdHJhY2VfYnVmICpidWYsICpubWlfYnVmOwogCiAJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmZXZlbnQtPnByb2ZpbGVfY291bnQpKQogCQlyZXR1cm47CiAKLQlldmVudC0+cHJvZmlsZV9kaXNhYmxlKCk7CisJZXZlbnQtPnByb2ZpbGVfZGlzYWJsZShldmVudCk7CiAKIAlpZiAoIS0tdG90YWxfcHJvZmlsZV9jb3VudCkgewotCQlidWYgPSB0cmFjZV9wcm9maWxlX2J1ZjsKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmLCBOVUxMKTsKKwkJYnVmID0gcGVyZl90cmFjZV9idWY7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwZXJmX3RyYWNlX2J1ZiwgTlVMTCk7CiAKLQkJbm1pX2J1ZiA9IHRyYWNlX3Byb2ZpbGVfYnVmX25taTsKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmX25taSwgTlVMTCk7CisJCW5taV9idWYgPSBwZXJmX3RyYWNlX2J1Zl9ubWk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwZXJmX3RyYWNlX2J1Zl9ubWksIE5VTEwpOwogCiAJCS8qCiAJCSAqIEVuc3VyZSBldmVyeSBldmVudHMgaW4gcHJvZmlsaW5nIGhhdmUgZmluaXNoZWQgYmVmb3JlCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggN2MxOGQxNS4uMWQxODMxNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtOTMsOSArOTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMpOwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLQotc3RhdGljIHZvaWQgdHJhY2VfZGVzdHJveV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQordm9pZCB0cmFjZV9kZXN0cm95X2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQsICpuZXh0OwogCkBAIC0xMDcsOCArMTA1LDYgQEAKIAl9CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwotCiBzdGF0aWMgdm9pZCBmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAogCQkJCQlpbnQgZW5hYmxlKQogewpAQCAtMTE3LDE0ICsxMTMsMTQgQEAKIAkJaWYgKGNhbGwtPmVuYWJsZWQpIHsKIAkJCWNhbGwtPmVuYWJsZWQgPSAwOwogCQkJdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7Ci0JCQljYWxsLT51bnJlZ2Z1bmMoY2FsbC0+ZGF0YSk7CisJCQljYWxsLT51bnJlZ2Z1bmMoY2FsbCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlpZiAoIWNhbGwtPmVuYWJsZWQpIHsKIAkJCWNhbGwtPmVuYWJsZWQgPSAxOwogCQkJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOwotCQkJY2FsbC0+cmVnZnVuYyhjYWxsLT5kYXRhKTsKKwkJCWNhbGwtPnJlZ2Z1bmMoY2FsbCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtOTM3LDI3ICs5MzMsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBmb3JfZWFjaF9ldmVudChldmVudCwgc3RhcnQsIGVuZCkJCQlcCi0JZm9yIChldmVudCA9IHN0YXJ0OwkJCQkJXAotCSAgICAgKHVuc2lnbmVkIGxvbmcpZXZlbnQgPCAodW5zaWduZWQgbG9uZyllbmQ7CQlcCi0JICAgICBldmVudCsrKQorc3RhdGljIGludCBfX3RyYWNlX2FkZF9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50czsKKwlpbnQgcmV0OwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKKwlpZiAoIWNhbGwtPm5hbWUpCisJCXJldHVybiAtRUlOVkFMOwogCi1zdGF0aWMgTElTVF9IRUFEKGZ0cmFjZV9tb2R1bGVfZmlsZV9saXN0KTsKKwlpZiAoY2FsbC0+cmF3X2luaXQpIHsKKwkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ICE9IC1FTk9TWVMpCisJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgorCQkJCSJldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KIAotLyoKLSAqIE1vZHVsZXMgbXVzdCBvd24gdGhlaXIgZmlsZV9vcGVyYXRpb25zIHRvIGtlZXAgdXAgd2l0aAotICogcmVmZXJlbmNlIGNvdW50aW5nLgotICovCi1zdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyB7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLQlzdHJ1Y3QgbW9kdWxlCQkJKm1vZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQlpZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQllbmFibGU7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkJZm9ybWF0OwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWZpbHRlcjsKLX07CisJZF9ldmVudHMgPSBldmVudF90cmFjZV9ldmVudHNfZGlyKCk7CisJaWYgKCFkX2V2ZW50cykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCQkJJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKKwlpZiAoIXJldCkKKwkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEFkZCBhbiBhZGRpdGlvbmFsIGV2ZW50X2NhbGwgZHluYW1pY2FsbHkgKi8KK2ludCB0cmFjZV9hZGRfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJaW50IHJldDsKKwltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CisJcmV0ID0gX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsKTsKKwltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgdm9pZCByZW1vdmVfc3Vic3lzdGVtX2Rpcihjb25zdCBjaGFyICpuYW1lKQogewpAQCAtOTg1LDYgKzEwMDAsNTMgQEAKIAl9CiB9CiAKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBsb2NraW5nIGJvdGggb2YgZXZlbnRfbXV0ZXggYW5kIHRyYWNlX2V2ZW50X211dGV4LgorICovCitzdGF0aWMgdm9pZCBfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgMCk7CisJaWYgKGNhbGwtPmV2ZW50KQorCQlfX3VucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KGNhbGwtPmV2ZW50KTsKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2FsbC0+ZGlyKTsKKwlsaXN0X2RlbCgmY2FsbC0+bGlzdCk7CisJdHJhY2VfZGVzdHJveV9maWVsZHMoY2FsbCk7CisJZGVzdHJveV9wcmVkcyhjYWxsKTsKKwlyZW1vdmVfc3Vic3lzdGVtX2RpcihjYWxsLT5zeXN0ZW0pOworfQorCisvKiBSZW1vdmUgYW4gZXZlbnRfY2FsbCAqLwordm9pZCB0cmFjZV9yZW1vdmVfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOworCWRvd25fd3JpdGUoJnRyYWNlX2V2ZW50X211dGV4KTsKKwlfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKGNhbGwpOworCXVwX3dyaXRlKCZ0cmFjZV9ldmVudF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7Cit9CisKKyNkZWZpbmUgZm9yX2VhY2hfZXZlbnQoZXZlbnQsIHN0YXJ0LCBlbmQpCQkJXAorCWZvciAoZXZlbnQgPSBzdGFydDsJCQkJCVwKKwkgICAgICh1bnNpZ25lZCBsb25nKWV2ZW50IDwgKHVuc2lnbmVkIGxvbmcpZW5kOwkJXAorCSAgICAgZXZlbnQrKykKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisKK3N0YXRpYyBMSVNUX0hFQUQoZnRyYWNlX21vZHVsZV9maWxlX2xpc3QpOworCisvKgorICogTW9kdWxlcyBtdXN0IG93biB0aGVpciBmaWxlX29wZXJhdGlvbnMgdG8ga2VlcCB1cCB3aXRoCisgKiByZWZlcmVuY2UgY291bnRpbmcuCisgKi8KK3N0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXN0cnVjdCBtb2R1bGUJCQkqbW9kOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWlkOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWVuYWJsZTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQlmb3JtYXQ7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkJZmlsdGVyOworfTsKKwogc3RhdGljIHN0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzICoKIHRyYWNlX2NyZWF0ZV9maWxlX29wcyhzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC0xMDQyLDcgKzExMDQsNyBAQAogCQlpZiAoIWNhbGwtPm5hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKGNhbGwtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5yYXdfaW5pdCgpOworCQkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgpAQCAtMTA2MCwxMCArMTEyMiwxMSBAQAogCQkJCXJldHVybjsKIAkJfQogCQljYWxsLT5tb2QgPSBtb2Q7Ci0JCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7Ci0JCWV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsCi0JCQkJICZmaWxlX29wcy0+aWQsICZmaWxlX29wcy0+ZW5hYmxlLAotCQkJCSAmZmlsZV9vcHMtPmZpbHRlciwgJmZpbGVfb3BzLT5mb3JtYXQpOworCQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLAorCQkJCSAgICAgICAmZmlsZV9vcHMtPmlkLCAmZmlsZV9vcHMtPmVuYWJsZSwKKwkJCQkgICAgICAgJmZpbGVfb3BzLT5maWx0ZXIsICZmaWxlX29wcy0+Zm9ybWF0KTsKKwkJaWYgKCFyZXQpCisJCQlsaXN0X2FkZCgmY2FsbC0+bGlzdCwgJmZ0cmFjZV9ldmVudHMpOwogCX0KIH0KIApAQCAtMTA3NywxNCArMTE0MCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhbGwsIHAsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7CiAJCWlmIChjYWxsLT5tb2QgPT0gbW9kKSB7CiAJCQlmb3VuZCA9IHRydWU7Ci0JCQlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgMCk7Ci0JCQlpZiAoY2FsbC0+ZXZlbnQpCi0JCQkJX191bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7Ci0JCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2FsbC0+ZGlyKTsKLQkJCWxpc3RfZGVsKCZjYWxsLT5saXN0KTsKLQkJCXRyYWNlX2Rlc3Ryb3lfZmllbGRzKGNhbGwpOwotCQkJZGVzdHJveV9wcmVkcyhjYWxsKTsKLQkJCXJlbW92ZV9zdWJzeXN0ZW1fZGlyKGNhbGwtPnN5c3RlbSk7CisJCQlfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKGNhbGwpOwogCQl9CiAJfQogCkBAIC0xMjAyLDcgKzEyNTgsNyBAQAogCQlpZiAoIWNhbGwtPm5hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKGNhbGwtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5yYXdfaW5pdCgpOworCQkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgpAQCAtMTIxMCwxMCArMTI2NiwxMiBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0JCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7Ci0JCWV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKLQkJCQkgJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKLQkJCQkgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CisJCXJldCA9IGV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CisJCWlmICghcmV0KQorCQkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKIAl9CiAKIAl3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggMjFkMzQ3NS4uNTA1MDRjYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0xMjMwLDEyICsxMjMwLDEyIEBACiAJCQkJc3RydWN0IGZpbHRlcl9wYXJzZV9zdGF0ZSAqcHMsCiAJCQkJY2hhciAqZmlsdGVyX3N0cmluZykKIHsKLQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBzeXN0ZW0tPmZpbHRlcjsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGw7CiAJYm9vbCBmYWlsID0gdHJ1ZTsKIAlpbnQgZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgeworCQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBjYWxsLT5maWx0ZXI7CiAKIAkJaWYgKCFjYWxsLT5kZWZpbmVfZmllbGRzKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggMzFkYTIxOC4uOTM0ZDgxZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTM0LDcgKzEzNCw2IEBACiAKICNpbmNsdWRlICJ0cmFjZV9lbnRyaWVzLmgiCiAKLQogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXApAQCAtMTk2LDYgKzE5NSwxMSBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCitzdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmZpZWxkcyk7CisJcmV0dXJuIDA7Cit9CiAKICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkKQEAgLTIxNCw3ICsyMTgsNiBAQAogCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgdHlwZSwgdHN0cnVjdCwgcHJpbnQpCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwodm9pZCk7CQkJCVwKIAkJCQkJCQkJCVwKIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCQlcCiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXApAQCAtMjIyLDE0ICsyMjUsOSBAQAogCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAogCS5pZAkJCT0gdHlwZSwJCQkJCVwKIAkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAotCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsLAkJXAorCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnQsCQlcCiAJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCiB9OwkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCi17CQkJCQkJCQkJXAotCUlOSVRfTElTVF9IRUFEKCZldmVudF8jI2NhbGwuZmllbGRzKTsJCQkJXAotCXJldHVybiAwOwkJCQkJCQlcCi19CQkJCQkJCQkJXAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTY0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTAsMCArMSwxNTEzIEBACisvKgorICogS3Byb2Jlcy1iYXNlZCB0cmFjaW5nIGV2ZW50cworICoKKyAqIENyZWF0ZWQgYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisjZGVmaW5lIE1BWF9UUkFDRV9BUkdTIDEyOAorI2RlZmluZSBNQVhfQVJHU1RSX0xFTiA2MworI2RlZmluZSBNQVhfRVZFTlRfTkFNRV9MRU4gNjQKKyNkZWZpbmUgS1BST0JFX0VWRU5UX1NZU1RFTSAia3Byb2JlcyIKKworLyogUmVzZXJ2ZWQgZmllbGQgbmFtZXMgKi8KKyNkZWZpbmUgRklFTERfU1RSSU5HX0lQICJfX3Byb2JlX2lwIgorI2RlZmluZSBGSUVMRF9TVFJJTkdfTkFSR1MgIl9fcHJvYmVfbmFyZ3MiCisjZGVmaW5lIEZJRUxEX1NUUklOR19SRVRJUCAiX19wcm9iZV9yZXRfaXAiCisjZGVmaW5lIEZJRUxEX1NUUklOR19GVU5DICJfX3Byb2JlX2Z1bmMiCisKK2NvbnN0IGNoYXIgKnJlc2VydmVkX2ZpZWxkX25hbWVzW10gPSB7CisJImNvbW1vbl90eXBlIiwKKwkiY29tbW9uX2ZsYWdzIiwKKwkiY29tbW9uX3ByZWVtcHRfY291bnQiLAorCSJjb21tb25fcGlkIiwKKwkiY29tbW9uX3RnaWQiLAorCSJjb21tb25fbG9ja19kZXB0aCIsCisJRklFTERfU1RSSU5HX0lQLAorCUZJRUxEX1NUUklOR19OQVJHUywKKwlGSUVMRF9TVFJJTkdfUkVUSVAsCisJRklFTERfU1RSSU5HX0ZVTkMsCit9OworCitzdHJ1Y3QgZmV0Y2hfZnVuYyB7CisJdW5zaWduZWQgbG9uZyAoKmZ1bmMpKHN0cnVjdCBwdF9yZWdzICosIHZvaWQgKik7CisJdm9pZCAqZGF0YTsKK307CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBjYWxsX2ZldGNoKHN0cnVjdCBmZXRjaF9mdW5jICpmLAorCQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBmLT5mdW5jKHJlZ3MsIGYtPmRhdGEpOworfQorCisvKiBmZXRjaCBoYW5kbGVycyAqLworc3RhdGljIF9fa3Byb2JlcyB1bnNpZ25lZCBsb25nIGZldGNoX3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgICB2b2lkICpvZmZzZXQpCit7CisJcmV0dXJuIHJlZ3NfZ2V0X3JlZ2lzdGVyKHJlZ3MsICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW9mZnNldCkpOworfQorCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgIHZvaWQgKm51bSkKK3sKKwlyZXR1cm4gcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChyZWdzLAorCQkJCQkgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpbnVtKSk7Cit9CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9tZW1vcnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoYWRkciwgcmV0dmFsKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9fa3Byb2JlcyB1bnNpZ25lZCBsb25nIGZldGNoX2FyZ3VtZW50KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpudW0pCit7CisJcmV0dXJuIHJlZ3NfZ2V0X2FyZ3VtZW50X250aChyZWdzLCAodW5zaWduZWQgaW50KSgodW5zaWduZWQgbG9uZyludW0pKTsKK30KKworc3RhdGljIF9fa3Byb2JlcyB1bnNpZ25lZCBsb25nIGZldGNoX3JldHZhbHVlKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgICB2b2lkICpkdW1teSkKK3sKKwlyZXR1cm4gcmVnc19yZXR1cm5fdmFsdWUocmVncyk7Cit9CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9zdGFja19hZGRyZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkJICAgdm9pZCAqZHVtbXkpCit7CisJcmV0dXJuIGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworfQorCisvKiBNZW1vcnkgZmV0Y2hpbmcgYnkgc3ltYm9sICovCitzdHJ1Y3Qgc3ltYm9sX2NhY2hlIHsKKwljaGFyICpzeW1ib2w7CisJbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdXBkYXRlX3N5bWJvbF9jYWNoZShzdHJ1Y3Qgc3ltYm9sX2NhY2hlICpzYykKK3sKKwlzYy0+YWRkciA9ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX2xvb2t1cF9uYW1lKHNjLT5zeW1ib2wpOworCWlmIChzYy0+YWRkcikKKwkJc2MtPmFkZHIgKz0gc2MtPm9mZnNldDsKKwlyZXR1cm4gc2MtPmFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3ltYm9sX2NhY2hlKHN0cnVjdCBzeW1ib2xfY2FjaGUgKnNjKQoreworCWtmcmVlKHNjLT5zeW1ib2wpOworCWtmcmVlKHNjKTsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2xfY2FjaGUgKmFsbG9jX3N5bWJvbF9jYWNoZShjb25zdCBjaGFyICpzeW0sIGxvbmcgb2Zmc2V0KQoreworCXN0cnVjdCBzeW1ib2xfY2FjaGUgKnNjOworCisJaWYgKCFzeW0gfHwgc3RybGVuKHN5bSkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2NhY2hlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlzYy0+c3ltYm9sID0ga3N0cmR1cChzeW0sIEdGUF9LRVJORUwpOworCWlmICghc2MtPnN5bWJvbCkgeworCQlrZnJlZShzYyk7CisJCXJldHVybiBOVUxMOworCX0KKwlzYy0+b2Zmc2V0ID0gb2Zmc2V0OworCisJdXBkYXRlX3N5bWJvbF9jYWNoZShzYyk7CisJcmV0dXJuIHNjOworfQorCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfc3ltYm9sKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzeW1ib2xfY2FjaGUgKnNjID0gZGF0YTsKKworCWlmIChzYy0+YWRkcikKKwkJcmV0dXJuIGZldGNoX21lbW9yeShyZWdzLCAodm9pZCAqKXNjLT5hZGRyKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBTcGVjaWFsIGluZGlyZWN0IG1lbW9yeSBhY2Nlc3MgaW50ZXJmYWNlICovCitzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSB7CisJc3RydWN0IGZldGNoX2Z1bmMgb3JpZzsKKwlsb25nIG9mZnNldDsKK307CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9pbmRpcmVjdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSAqaW5kID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gY2FsbF9mZXRjaCgmaW5kLT5vcmlnLCByZWdzKTsKKwlpZiAoYWRkcikgeworCQlhZGRyICs9IGluZC0+b2Zmc2V0OworCQlyZXR1cm4gZmV0Y2hfbWVtb3J5KHJlZ3MsICh2b2lkICopYWRkcik7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgZnJlZV9pbmRpcmVjdF9mZXRjaF9kYXRhKHN0cnVjdCBpbmRpcmVjdF9mZXRjaF9kYXRhICpkYXRhKQoreworCWlmIChkYXRhLT5vcmlnLmZ1bmMgPT0gZmV0Y2hfaW5kaXJlY3QpCisJCWZyZWVfaW5kaXJlY3RfZmV0Y2hfZGF0YShkYXRhLT5vcmlnLmRhdGEpOworCWVsc2UgaWYgKGRhdGEtPm9yaWcuZnVuYyA9PSBmZXRjaF9zeW1ib2wpCisJCWZyZWVfc3ltYm9sX2NhY2hlKGRhdGEtPm9yaWcuZGF0YSk7CisJa2ZyZWUoZGF0YSk7Cit9CisKKy8qKgorICogS3Byb2JlIGV2ZW50IGNvcmUgZnVuY3Rpb25zCisgKi8KKworc3RydWN0IHByb2JlX2FyZyB7CisJc3RydWN0IGZldGNoX2Z1bmMJZmV0Y2g7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCisvKiBGbGFncyBmb3IgdHJhY2VfcHJvYmUgKi8KKyNkZWZpbmUgVFBfRkxBR19UUkFDRQkxCisjZGVmaW5lIFRQX0ZMQUdfUFJPRklMRQkyCisKK3N0cnVjdCB0cmFjZV9wcm9iZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBrcmV0cHJvYmUJcnA7CS8qIFVzZSBycC5rcCBmb3Iga3Byb2JlIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgCQluaGl0OworCXVuc2lnbmVkIGludAkJZmxhZ3M7CS8qIEZvciBUUF9GTEFHXyogKi8KKwljb25zdCBjaGFyCQkqc3ltYm9sOwkvKiBzeW1ib2wgbmFtZSAqLworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAljYWxsOworCXN0cnVjdCB0cmFjZV9ldmVudAkJZXZlbnQ7CisJdW5zaWduZWQgaW50CQlucl9hcmdzOworCXN0cnVjdCBwcm9iZV9hcmcJYXJnc1tdOworfTsKKworI2RlZmluZSBTSVpFT0ZfVFJBQ0VfUFJPQkUobikJCQlcCisJKG9mZnNldG9mKHN0cnVjdCB0cmFjZV9wcm9iZSwgYXJncykgKwlcCisJKHNpemVvZihzdHJ1Y3QgcHJvYmVfYXJnKSAqIChuKSkpCisKK3N0YXRpYyBfX2twcm9iZXMgaW50IHByb2JlX2lzX3JldHVybihzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQoreworCXJldHVybiB0cC0+cnAuaGFuZGxlciAhPSBOVUxMOworfQorCitzdGF0aWMgX19rcHJvYmVzIGNvbnN0IGNoYXIgKnByb2JlX3N5bWJvbChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQoreworCXJldHVybiB0cC0+c3ltYm9sID8gdHAtPnN5bWJvbCA6ICJ1bmtub3duIjsKK30KKworc3RhdGljIGludCBwcm9iZV9hcmdfc3RyaW5nKGNoYXIgKmJ1Ziwgc2l6ZV90IG4sIHN0cnVjdCBmZXRjaF9mdW5jICpmZikKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChmZi0+ZnVuYyA9PSBmZXRjaF9hcmd1bWVudCkKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJGFyZyVsdSIsICh1bnNpZ25lZCBsb25nKWZmLT5kYXRhKTsKKwllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9yZWdpc3RlcikgeworCQljb25zdCBjaGFyICpuYW1lOworCQluYW1lID0gcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKCh1bnNpZ25lZCBpbnQpKChsb25nKWZmLT5kYXRhKSk7CisJCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiUlJXMiLCBuYW1lKTsKKwl9IGVsc2UgaWYgKGZmLT5mdW5jID09IGZldGNoX3N0YWNrKQorCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIkc3RhY2slbHUiLCAodW5zaWduZWQgbG9uZylmZi0+ZGF0YSk7CisJZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfbWVtb3J5KQorCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICJAMHglcCIsIGZmLT5kYXRhKTsKKwllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9zeW1ib2wpIHsKKwkJc3RydWN0IHN5bWJvbF9jYWNoZSAqc2MgPSBmZi0+ZGF0YTsKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiQCVzJStsZCIsIHNjLT5zeW1ib2wsIHNjLT5vZmZzZXQpOworCX0gZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmV0dmFsdWUpCisJCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiRyZXR2YWwiKTsKKwllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9zdGFja19hZGRyZXNzKQorCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIkc3RhY2siKTsKKwllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9pbmRpcmVjdCkgeworCQlzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSAqaWQgPSBmZi0+ZGF0YTsKKwkJc2l6ZV90IGwgPSAwOworCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIlK2xkKCIsIGlkLT5vZmZzZXQpOworCQlpZiAocmV0ID49IG4pCisJCQlnb3RvIGVuZDsKKwkJbCArPSByZXQ7CisJCXJldCA9IHByb2JlX2FyZ19zdHJpbmcoYnVmICsgbCwgbiAtIGwsICZpZC0+b3JpZyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlbmQ7CisJCWwgKz0gcmV0OworCQlyZXQgPSBzbnByaW50ZihidWYgKyBsLCBuIC0gbCwgIikiKTsKKwkJcmV0ICs9IGw7CisJfQorZW5kOgorCWlmIChyZXQgPj0gbikKKwkJcmV0dXJuIC1FTk9TUEM7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9wcm9iZV9ldmVudChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKTsKK3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfcHJvYmVfZXZlbnQoc3RydWN0IHRyYWNlX3Byb2JlICp0cCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgocHJvYmVfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHByb2JlX2xpc3QpOworCitzdGF0aWMgaW50IGtwcm9iZV9kaXNwYXRjaGVyKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IGtyZXRwcm9iZV9kaXNwYXRjaGVyKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIEFsbG9jYXRlIG5ldyB0cmFjZV9wcm9iZSBhbmQgaW5pdGlhbGl6ZSBpdCAoaW5jbHVkaW5nIGtwcm9iZXMpLgorICovCitzdGF0aWMgc3RydWN0IHRyYWNlX3Byb2JlICphbGxvY190cmFjZV9wcm9iZShjb25zdCBjaGFyICpncm91cCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpldmVudCwKKwkJCQkJICAgICB2b2lkICphZGRyLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnN5bWJvbCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnMsCisJCQkJCSAgICAgaW50IG5hcmdzLCBpbnQgaXNfcmV0dXJuKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisKKwl0cCA9IGt6YWxsb2MoU0laRU9GX1RSQUNFX1BST0JFKG5hcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoc3ltYm9sKSB7CisJCXRwLT5zeW1ib2wgPSBrc3RyZHVwKHN5bWJvbCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdHAtPnN5bWJvbCkKKwkJCWdvdG8gZXJyb3I7CisJCXRwLT5ycC5rcC5zeW1ib2xfbmFtZSA9IHRwLT5zeW1ib2w7CisJCXRwLT5ycC5rcC5vZmZzZXQgPSBvZmZzOworCX0gZWxzZQorCQl0cC0+cnAua3AuYWRkciA9IGFkZHI7CisKKwlpZiAoaXNfcmV0dXJuKQorCQl0cC0+cnAuaGFuZGxlciA9IGtyZXRwcm9iZV9kaXNwYXRjaGVyOworCWVsc2UKKwkJdHAtPnJwLmtwLnByZV9oYW5kbGVyID0ga3Byb2JlX2Rpc3BhdGNoZXI7CisKKwlpZiAoIWV2ZW50KQorCQlnb3RvIGVycm9yOworCXRwLT5jYWxsLm5hbWUgPSBrc3RyZHVwKGV2ZW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwLT5jYWxsLm5hbWUpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWdyb3VwKQorCQlnb3RvIGVycm9yOworCXRwLT5jYWxsLnN5c3RlbSA9IGtzdHJkdXAoZ3JvdXAsIEdGUF9LRVJORUwpOworCWlmICghdHAtPmNhbGwuc3lzdGVtKQorCQlnb3RvIGVycm9yOworCisJSU5JVF9MSVNUX0hFQUQoJnRwLT5saXN0KTsKKwlyZXR1cm4gdHA7CitlcnJvcjoKKwlrZnJlZSh0cC0+Y2FsbC5uYW1lKTsKKwlrZnJlZSh0cC0+c3ltYm9sKTsKKwlrZnJlZSh0cCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcHJvYmVfYXJnKHN0cnVjdCBwcm9iZV9hcmcgKmFyZykKK3sKKwlpZiAoYXJnLT5mZXRjaC5mdW5jID09IGZldGNoX3N5bWJvbCkKKwkJZnJlZV9zeW1ib2xfY2FjaGUoYXJnLT5mZXRjaC5kYXRhKTsKKwllbHNlIGlmIChhcmctPmZldGNoLmZ1bmMgPT0gZmV0Y2hfaW5kaXJlY3QpCisJCWZyZWVfaW5kaXJlY3RfZmV0Y2hfZGF0YShhcmctPmZldGNoLmRhdGEpOworCWtmcmVlKGFyZy0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdHJhY2VfcHJvYmUoc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlmcmVlX3Byb2JlX2FyZygmdHAtPmFyZ3NbaV0pOworCisJa2ZyZWUodHAtPmNhbGwuc3lzdGVtKTsKKwlrZnJlZSh0cC0+Y2FsbC5uYW1lKTsKKwlrZnJlZSh0cC0+c3ltYm9sKTsKKwlrZnJlZSh0cCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfcHJvYmUgKmZpbmRfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqZXZlbnQsCisJCQkJCSAgICBjb25zdCBjaGFyICpncm91cCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cCwgJnByb2JlX2xpc3QsIGxpc3QpCisJCWlmIChzdHJjbXAodHAtPmNhbGwubmFtZSwgZXZlbnQpID09IDAgJiYKKwkJICAgIHN0cmNtcCh0cC0+Y2FsbC5zeXN0ZW0sIGdyb3VwKSA9PSAwKQorCQkJcmV0dXJuIHRwOworCXJldHVybiBOVUxMOworfQorCisvKiBVbnJlZ2lzdGVyIGEgdHJhY2VfcHJvYmUgYW5kIHByb2JlX2V2ZW50OiBjYWxsIHdpdGggbG9ja2luZyBwcm9iZV9sb2NrICovCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3RyYWNlX3Byb2JlKHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApCit7CisJaWYgKHByb2JlX2lzX3JldHVybih0cCkpCisJCXVucmVnaXN0ZXJfa3JldHByb2JlKCZ0cC0+cnApOworCWVsc2UKKwkJdW5yZWdpc3Rlcl9rcHJvYmUoJnRwLT5ycC5rcCk7CisJbGlzdF9kZWwoJnRwLT5saXN0KTsKKwl1bnJlZ2lzdGVyX3Byb2JlX2V2ZW50KHRwKTsKK30KKworLyogUmVnaXN0ZXIgYSB0cmFjZV9wcm9iZSBhbmQgcHJvYmVfZXZlbnQgKi8KK3N0YXRpYyBpbnQgcmVnaXN0ZXJfdHJhY2VfcHJvYmUoc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKm9sZF90cDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJvYmVfbG9jayk7CisKKwkvKiByZWdpc3RlciBhcyBhbiBldmVudCAqLworCW9sZF90cCA9IGZpbmRfcHJvYmVfZXZlbnQodHAtPmNhbGwubmFtZSwgdHAtPmNhbGwuc3lzdGVtKTsKKwlpZiAob2xkX3RwKSB7CisJCS8qIGRlbGV0ZSBvbGQgZXZlbnQgKi8KKwkJdW5yZWdpc3Rlcl90cmFjZV9wcm9iZShvbGRfdHApOworCQlmcmVlX3RyYWNlX3Byb2JlKG9sZF90cCk7CisJfQorCXJldCA9IHJlZ2lzdGVyX3Byb2JlX2V2ZW50KHRwKTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm5pbmcoIkZhaWxkIHRvIHJlZ2lzdGVyIHByb2JlIGV2ZW50KCVkKVxuIiwgcmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJdHAtPnJwLmtwLmZsYWdzIHw9IEtQUk9CRV9GTEFHX0RJU0FCTEVEOworCWlmIChwcm9iZV9pc19yZXR1cm4odHApKQorCQlyZXQgPSByZWdpc3Rlcl9rcmV0cHJvYmUoJnRwLT5ycCk7CisJZWxzZQorCQlyZXQgPSByZWdpc3Rlcl9rcHJvYmUoJnRwLT5ycC5rcCk7CisKKwlpZiAocmV0KSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbnNlcnQgcHJvYmUoJWQpXG4iLCByZXQpOworCQlpZiAocmV0ID09IC1FSUxTRVEpIHsKKwkJCXByX3dhcm5pbmcoIlByb2JpbmcgYWRkcmVzcygweCVwKSBpcyBub3QgYW4gIgorCQkJCSAgICJpbnN0cnVjdGlvbiBib3VuZGFyeS5cbiIsCisJCQkJICAgdHAtPnJwLmtwLmFkZHIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQl1bnJlZ2lzdGVyX3Byb2JlX2V2ZW50KHRwKTsKKwl9IGVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmdHAtPmxpc3QsICZwcm9iZV9saXN0KTsKK2VuZDoKKwltdXRleF91bmxvY2soJnByb2JlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNwbGl0IHN5bWJvbCBhbmQgb2Zmc2V0LiAqLworc3RhdGljIGludCBzcGxpdF9zeW1ib2xfb2Zmc2V0KGNoYXIgKnN5bWJvbCwgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KQoreworCWNoYXIgKnRtcDsKKwlpbnQgcmV0OworCisJaWYgKCFvZmZzZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gc3RyY2hyKHN5bWJvbCwgJysnKTsKKwlpZiAodG1wKSB7CisJCS8qIHNraXAgc2lnbiBiZWNhdXNlIHN0cmljdF9zdHJ0b2wgZG9lc24ndCBhY2NlcHQgJysnICovCisJCXJldCA9IHN0cmljdF9zdHJ0b3VsKHRtcCArIDEsIDAsIG9mZnNldCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQkqdG1wID0gJ1wwJzsKKwl9IGVsc2UKKwkJKm9mZnNldCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUEFSQU1fTUFYX0FSR1MgMTYKKyNkZWZpbmUgUEFSQU1fTUFYX1NUQUNLIChUSFJFQURfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworc3RhdGljIGludCBwYXJzZV9wcm9iZV92YXJzKGNoYXIgKmFyZywgc3RydWN0IGZldGNoX2Z1bmMgKmZmLCBpbnQgaXNfcmV0dXJuKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGFyYW07CisKKwlpZiAoc3RyY21wKGFyZywgInJldHZhbCIpID09IDApIHsKKwkJaWYgKGlzX3JldHVybikgeworCQkJZmYtPmZ1bmMgPSBmZXRjaF9yZXR2YWx1ZTsKKwkJCWZmLT5kYXRhID0gTlVMTDsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAoc3RybmNtcChhcmcsICJzdGFjayIsIDUpID09IDApIHsKKwkJaWYgKGFyZ1s1XSA9PSAnXDAnKSB7CisJCQlmZi0+ZnVuYyA9IGZldGNoX3N0YWNrX2FkZHJlc3M7CisJCQlmZi0+ZGF0YSA9IE5VTEw7CisJCX0gZWxzZSBpZiAoaXNkaWdpdChhcmdbNV0pKSB7CisJCQlyZXQgPSBzdHJpY3Rfc3RydG91bChhcmcgKyA1LCAxMCwgJnBhcmFtKTsKKwkJCWlmIChyZXQgfHwgcGFyYW0gPiBQQVJBTV9NQVhfU1RBQ0spCisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWVsc2UgeworCQkJCWZmLT5mdW5jID0gZmV0Y2hfc3RhY2s7CisJCQkJZmYtPmRhdGEgPSAodm9pZCAqKXBhcmFtOworCQkJfQorCQl9IGVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIGlmIChzdHJuY21wKGFyZywgImFyZyIsIDMpID09IDAgJiYgaXNkaWdpdChhcmdbM10pKSB7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsKGFyZyArIDMsIDEwLCAmcGFyYW0pOworCQlpZiAocmV0IHx8IHBhcmFtID4gUEFSQU1fTUFYX0FSR1MpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCWZmLT5mdW5jID0gZmV0Y2hfYXJndW1lbnQ7CisJCQlmZi0+ZGF0YSA9ICh2b2lkICopcGFyYW07CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhcnNlX3Byb2JlX2FyZyhjaGFyICphcmcsIHN0cnVjdCBmZXRjaF9mdW5jICpmZiwgaW50IGlzX3JldHVybikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcmFtOworCWxvbmcgb2Zmc2V0OworCWNoYXIgKnRtcDsKKworCXN3aXRjaCAoYXJnWzBdKSB7CisJY2FzZSAnJCc6CisJCXJldCA9IHBhcnNlX3Byb2JlX3ZhcnMoYXJnICsgMSwgZmYsIGlzX3JldHVybik7CisJCWJyZWFrOworCWNhc2UgJyUnOgkvKiBuYW1lZCByZWdpc3RlciAqLworCQlyZXQgPSByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChhcmcgKyAxKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlmZi0+ZnVuYyA9IGZldGNoX3JlZ2lzdGVyOworCQkJZmYtPmRhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJldDsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAnQCc6CS8qIG1lbW9yeSBvciBzeW1ib2wgKi8KKwkJaWYgKGlzZGlnaXQoYXJnWzFdKSkgeworCQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMSwgMCwgJnBhcmFtKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQlmZi0+ZnVuYyA9IGZldGNoX21lbW9yeTsKKwkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNwbGl0X3N5bWJvbF9vZmZzZXQoYXJnICsgMSwgJm9mZnNldCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJZmYtPmRhdGEgPSBhbGxvY19zeW1ib2xfY2FjaGUoYXJnICsgMSwgb2Zmc2V0KTsKKwkJCWlmIChmZi0+ZGF0YSkKKwkJCQlmZi0+ZnVuYyA9IGZldGNoX3N5bWJvbDsKKwkJCWVsc2UKKwkJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgJysnOgkvKiBpbmRpcmVjdCBtZW1vcnkgKi8KKwljYXNlICctJzoKKwkJdG1wID0gc3RyY2hyKGFyZywgJygnKTsKKwkJaWYgKCF0bXApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQkqdG1wID0gJ1wwJzsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvbChhcmcgKyAxLCAwLCAmb2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlpZiAoYXJnWzBdID09ICctJykKKwkJCW9mZnNldCA9IC1vZmZzZXQ7CisJCWFyZyA9IHRtcCArIDE7CisJCXRtcCA9IHN0cnJjaHIoYXJnLCAnKScpOworCQlpZiAodG1wKSB7CisJCQlzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSAqaWQ7CisJCQkqdG1wID0gJ1wwJzsKKwkJCWlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZGlyZWN0X2ZldGNoX2RhdGEpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWlkKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWQtPm9mZnNldCA9IG9mZnNldDsKKwkJCXJldCA9IHBhcnNlX3Byb2JlX2FyZyhhcmcsICZpZC0+b3JpZywgaXNfcmV0dXJuKTsKKwkJCWlmIChyZXQpCisJCQkJa2ZyZWUoaWQpOworCQkJZWxzZSB7CisJCQkJZmYtPmZ1bmMgPSBmZXRjaF9pbmRpcmVjdDsKKwkJCQlmZi0+ZGF0YSA9ICh2b2lkICopaWQ7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETzogc3VwcG9ydCBjdXN0b20gaGFuZGxlciAqLworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gMSBpZiBuYW1lIGlzIHJlc2VydmVkIG9yIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGFyZ3VtZW50ICovCitzdGF0aWMgaW50IGNvbmZsaWN0X2ZpZWxkX25hbWUoY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBzdHJ1Y3QgcHJvYmVfYXJnICphcmdzLCBpbnQgbmFyZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZXNlcnZlZF9maWVsZF9uYW1lcyk7IGkrKykKKwkJaWYgKHN0cmNtcChyZXNlcnZlZF9maWVsZF9uYW1lc1tpXSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAxOworCWZvciAoaSA9IDA7IGkgPCBuYXJnOyBpKyspCisJCWlmIChzdHJjbXAoYXJnc1tpXS5uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3RyYWNlX3Byb2JlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwkvKgorCSAqIEFyZ3VtZW50IHN5bnRheDoKKwkgKiAgLSBBZGQga3Byb2JlOiBwWzpbR1JQL11FVkVOVF0gS1NZTVsrT0ZGU118S0FERFIgW0ZFVENIQVJHU10KKwkgKiAgLSBBZGQga3JldHByb2JlOiByWzpbR1JQL11FVkVOVF0gS1NZTVsrMF0gW0ZFVENIQVJHU10KKwkgKiBGZXRjaCBhcmdzOgorCSAqICAkYXJnTgk6IGZldGNoIE50aCBvZiBmdW5jdGlvbiBhcmd1bWVudC4gKE46MC0pCisJICogICRyZXR2YWwJOiBmZXRjaCByZXR1cm4gdmFsdWUKKwkgKiAgJHN0YWNrCTogZmV0Y2ggc3RhY2sgYWRkcmVzcworCSAqICAkc3RhY2tOCTogZmV0Y2ggTnRoIG9mIHN0YWNrIChOOjAtKQorCSAqICBAQUREUgk6IGZldGNoIG1lbW9yeSBhdCBBRERSIChBRERSIHNob3VsZCBiZSBpbiBrZXJuZWwpCisJICogIEBTWU1bK3wtb2Zmc10gOiBmZXRjaCBtZW1vcnkgYXQgU1lNICt8LSBvZmZzIChTWU0gaXMgYSBkYXRhIHN5bWJvbCkKKwkgKiAgJVJFRwk6IGZldGNoIHJlZ2lzdGVyIFJFRworCSAqIEluZGlyZWN0IG1lbW9yeSBmZXRjaDoKKwkgKiAgK3wtb2ZmcyhBUkcpIDogZmV0Y2ggbWVtb3J5IGF0IEFSRyArfC0gb2ZmcyBhZGRyZXNzLgorCSAqIEFsaWFzIG5hbWUgb2YgYXJnczoKKwkgKiAgTkFNRT1GRVRDSEFSRyA6IHNldCBOQU1FIGFzIGFsaWFzIG9mIEZFVENIQVJHLgorCSAqLworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisJaW50IGksIHJldCA9IDA7CisJaW50IGlzX3JldHVybiA9IDA7CisJY2hhciAqc3ltYm9sID0gTlVMTCwgKmV2ZW50ID0gTlVMTCwgKmFyZyA9IE5VTEwsICpncm91cCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXZvaWQgKmFkZHIgPSBOVUxMOworCWNoYXIgYnVmW01BWF9FVkVOVF9OQU1FX0xFTl07CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJfaW5mbygiUHJvYmUgcG9pbnQgaXMgbm90IHNwZWNpZmllZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXJndlswXVswXSA9PSAncCcpCisJCWlzX3JldHVybiA9IDA7CisJZWxzZSBpZiAoYXJndlswXVswXSA9PSAncicpCisJCWlzX3JldHVybiA9IDE7CisJZWxzZSB7CisJCXByX2luZm8oIlByb2JlIGRlZmluaXRpb24gbXVzdCBiZSBzdGFydGVkIHdpdGggJ3AnIG9yICdyJy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXJndlswXVsxXSA9PSAnOicpIHsKKwkJZXZlbnQgPSAmYXJndlswXVsyXTsKKwkJaWYgKHN0cmNocihldmVudCwgJy8nKSkgeworCQkJZ3JvdXAgPSBldmVudDsKKwkJCWV2ZW50ID0gc3RyY2hyKGdyb3VwLCAnLycpICsgMTsKKwkJCWV2ZW50Wy0xXSA9ICdcMCc7CisJCQlpZiAoc3RybGVuKGdyb3VwKSA9PSAwKSB7CisJCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWxlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKHN0cmxlbihldmVudCkgPT0gMCkgeworCQkJcHJfaW5mbygiRXZlbnQgbmFtZSBpcyBub3Qgc3BlY2lmaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChpc2RpZ2l0KGFyZ3ZbMV1bMF0pKSB7CisJCWlmIChpc19yZXR1cm4pIHsKKwkJCXByX2luZm8oIlJldHVybiBwcm9iZSBwb2ludCBtdXN0IGJlIGEgc3ltYm9sLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBhbiBhZGRyZXNzIHNwZWNpZmllZCAqLworCQlyZXQgPSBzdHJpY3Rfc3RydG91bCgmYXJndlswXVsyXSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmYWRkcik7CisJCWlmIChyZXQpIHsKKwkJCXByX2luZm8oIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfSBlbHNlIHsKKwkJLyogYSBzeW1ib2wgc3BlY2lmaWVkICovCisJCXN5bWJvbCA9IGFyZ3ZbMV07CisJCS8qIFRPRE86IHN1cHBvcnQgLmluaXQgbW9kdWxlIGZ1bmN0aW9ucyAqLworCQlyZXQgPSBzcGxpdF9zeW1ib2xfb2Zmc2V0KHN5bWJvbCwgJm9mZnNldCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2luZm8oIkZhaWxlZCB0byBwYXJzZSBzeW1ib2wuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKG9mZnNldCAmJiBpc19yZXR1cm4pIHsKKwkJCXByX2luZm8oIlJldHVybiBwcm9iZSBtdXN0IGJlIHVzZWQgd2l0aG91dCBvZmZzZXQuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWFyZ2MgLT0gMjsgYXJndiArPSAyOworCisJLyogc2V0dXAgYSBwcm9iZSAqLworCWlmICghZ3JvdXApCisJCWdyb3VwID0gS1BST0JFX0VWRU5UX1NZU1RFTTsKKwlpZiAoIWV2ZW50KSB7CisJCS8qIE1ha2UgYSBuZXcgZXZlbnQgbmFtZSAqLworCQlpZiAoc3ltYm9sKQorCQkJc25wcmludGYoYnVmLCBNQVhfRVZFTlRfTkFNRV9MRU4sICIlY0AlcyUrbGQiLAorCQkJCSBpc19yZXR1cm4gPyAncicgOiAncCcsIHN5bWJvbCwgb2Zmc2V0KTsKKwkJZWxzZQorCQkJc25wcmludGYoYnVmLCBNQVhfRVZFTlRfTkFNRV9MRU4sICIlY0AweCVwIiwKKwkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBhZGRyKTsKKwkJZXZlbnQgPSBidWY7CisJfQorCXRwID0gYWxsb2NfdHJhY2VfcHJvYmUoZ3JvdXAsIGV2ZW50LCBhZGRyLCBzeW1ib2wsIG9mZnNldCwgYXJnYywKKwkJCSAgICAgICBpc19yZXR1cm4pOworCWlmIChJU19FUlIodHApKSB7CisJCXByX2luZm8oIkZhaWxlZCB0byBhbGxvY2F0ZSB0cmFjZV9wcm9iZS4oJWQpXG4iLAorCQkJKGludClQVFJfRVJSKHRwKSk7CisJCXJldHVybiBQVFJfRVJSKHRwKTsKKwl9CisKKwkvKiBwYXJzZSBhcmd1bWVudHMgKi8KKwlyZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhcmdjICYmIGkgPCBNQVhfVFJBQ0VfQVJHUzsgaSsrKSB7CisJCS8qIFBhcnNlIGFyZ3VtZW50IG5hbWUgKi8KKwkJYXJnID0gc3RyY2hyKGFyZ3ZbaV0sICc9Jyk7CisJCWlmIChhcmcpCisJCQkqYXJnKysgPSAnXDAnOworCQllbHNlCisJCQlhcmcgPSBhcmd2W2ldOworCisJCWlmIChjb25mbGljdF9maWVsZF9uYW1lKGFyZ3ZbaV0sIHRwLT5hcmdzLCBpKSkgeworCQkJcHJfaW5mbygiQXJndW1lbnQlZCBuYW1lICclcycgY29uZmxpY3RzIHdpdGggIgorCQkJCSJhbm90aGVyIGZpZWxkLlxuIiwgaSwgYXJndltpXSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXRwLT5hcmdzW2ldLm5hbWUgPSBrc3RyZHVwKGFyZ3ZbaV0sIEdGUF9LRVJORUwpOworCisJCS8qIFBhcnNlIGZldGNoIGFyZ3VtZW50ICovCisJCWlmIChzdHJsZW4oYXJnKSA+IE1BWF9BUkdTVFJfTEVOKSB7CisJCQlwcl9pbmZvKCJBcmd1bWVudCVkKCVzKSBpcyB0b28gbG9uZy5cbiIsIGksIGFyZyk7CisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlyZXQgPSBwYXJzZV9wcm9iZV9hcmcoYXJnLCAmdHAtPmFyZ3NbaV0uZmV0Y2gsIGlzX3JldHVybik7CisJCWlmIChyZXQpIHsKKwkJCXByX2luZm8oIlBhcnNlIGVycm9yIGF0IGFyZ3VtZW50JWQuICglZClcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCXRwLT5ucl9hcmdzID0gaTsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3Byb2JlKHRwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldHVybiAwOworCitlcnJvcjoKKwlmcmVlX3RyYWNlX3Byb2JlKHRwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2FsbF9wcm9iZXModm9pZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCisJbXV0ZXhfbG9jaygmcHJvYmVfbG9jayk7CisJLyogVE9ETzogVXNlIGJhdGNoIHVucmVnaXN0cmF0aW9uICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcm9iZV9saXN0KSkgeworCQl0cCA9IGxpc3RfZW50cnkocHJvYmVfbGlzdC5uZXh0LCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIGxpc3QpOworCQl1bnJlZ2lzdGVyX3RyYWNlX3Byb2JlKHRwKTsKKwkJZnJlZV90cmFjZV9wcm9iZSh0cCk7CisJfQorCW11dGV4X3VubG9jaygmcHJvYmVfbG9jayk7Cit9CisKKworLyogUHJvYmVzIGxpc3RpbmcgaW50ZXJmYWNlcyAqLworc3RhdGljIHZvaWQgKnByb2Jlc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwltdXRleF9sb2NrKCZwcm9iZV9sb2NrKTsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnByb2JlX2xpc3QsICpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqcHJvYmVzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnByb2JlX2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Jlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJbXV0ZXhfdW5sb2NrKCZwcm9iZV9sb2NrKTsKK30KKworc3RhdGljIGludCBwcm9iZXNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSB2OworCWludCBpLCByZXQ7CisJY2hhciBidWZbTUFYX0FSR1NUUl9MRU4gKyAxXTsKKworCXNlcV9wcmludGYobSwgIiVjIiwgcHJvYmVfaXNfcmV0dXJuKHRwKSA/ICdyJyA6ICdwJyk7CisJc2VxX3ByaW50ZihtLCAiOiVzIiwgdHAtPmNhbGwubmFtZSk7CisKKwlpZiAodHAtPnN5bWJvbCkKKwkJc2VxX3ByaW50ZihtLCAiICVzKyV1IiwgcHJvYmVfc3ltYm9sKHRwKSwgdHAtPnJwLmtwLm9mZnNldCk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIgMHglcCIsIHRwLT5ycC5rcC5hZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXJldCA9IHByb2JlX2FyZ19zdHJpbmcoYnVmLCBNQVhfQVJHU1RSX0xFTiwgJnRwLT5hcmdzW2ldLmZldGNoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkFyZ3VtZW50JWQgZGVjb2RpbmcgZXJyb3IoJWQpLlxuIiwgaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJc2VxX3ByaW50ZihtLCAiICVzPSVzIiwgdHAtPmFyZ3NbaV0ubmFtZSwgYnVmKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9iZXNfc2VxX29wID0geworCS5zdGFydCAgPSBwcm9iZXNfc2VxX3N0YXJ0LAorCS5uZXh0ICAgPSBwcm9iZXNfc2VxX25leHQsCisJLnN0b3AgICA9IHByb2Jlc19zZXFfc3RvcCwKKwkuc2hvdyAgID0gcHJvYmVzX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IHByb2Jlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCisJICAgIChmaWxlLT5mX2ZsYWdzICYgT19UUlVOQykpCisJCWNsZWFudXBfYWxsX3Byb2JlcygpOworCisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9iZXNfc2VxX29wKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3RyYWNlX3Byb2JlKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljaGFyICoqYXJndjsKKwlpbnQgYXJnYyA9IDAsIHJldCA9IDA7CisKKwlhcmd2ID0gYXJndl9zcGxpdChHRlBfS0VSTkVMLCBidWYsICZhcmdjKTsKKwlpZiAoIWFyZ3YpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFyZ2MpCisJCXJldCA9IGNyZWF0ZV90cmFjZV9wcm9iZShhcmdjLCBhcmd2KTsKKworCWFyZ3ZfZnJlZShhcmd2KTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFdSSVRFX0JVRlNJWkUgMTI4CisKK3N0YXRpYyBzc2l6ZV90IHByb2Jlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICprYnVmLCAqdG1wOworCWludCByZXQ7CisJc2l6ZV90IGRvbmU7CisJc2l6ZV90IHNpemU7CisKKwlrYnVmID0ga21hbGxvYyhXUklURV9CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBjb3VudCkgeworCQlzaXplID0gY291bnQgLSBkb25lOworCQlpZiAoc2l6ZSA+PSBXUklURV9CVUZTSVpFKQorCQkJc2l6ZSA9IFdSSVRFX0JVRlNJWkUgLSAxOworCQlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmZmVyICsgZG9uZSwgc2l6ZSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlrYnVmW3NpemVdID0gJ1wwJzsKKwkJdG1wID0gc3RyY2hyKGtidWYsICdcbicpOworCQlpZiAodG1wKSB7CisJCQkqdG1wID0gJ1wwJzsKKwkJCXNpemUgPSB0bXAgLSBrYnVmICsgMTsKKwkJfSBlbHNlIGlmIChkb25lICsgc2l6ZSA8IGNvdW50KSB7CisJCQlwcl93YXJuaW5nKCJMaW5lIGxlbmd0aCBpcyB0b28gbG9uZzogIgorCQkJCSAgICJTaG91bGQgYmUgbGVzcyB0aGFuICVkLiIsIFdSSVRFX0JVRlNJWkUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRvbmUgKz0gc2l6ZTsKKwkJLyogUmVtb3ZlIGNvbW1lbnRzICovCisJCXRtcCA9IHN0cmNocihrYnVmLCAnIycpOworCQlpZiAodG1wKQorCQkJKnRtcCA9ICdcMCc7CisKKwkJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZShrYnVmKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBkb25lOworb3V0OgorCWtmcmVlKGtidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtwcm9iZV9ldmVudHNfb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IHByb2Jlc19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzZXFfcmVsZWFzZSwKKwkud3JpdGUJCT0gcHJvYmVzX3dyaXRlLAorfTsKKworLyogUHJvYmVzIHByb2ZpbGluZyBpbnRlcmZhY2VzICovCitzdGF0aWMgaW50IHByb2Jlc19wcm9maWxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gdjsKKworCXNlcV9wcmludGYobSwgIiAgJS00NHMgJTE1bHUgJTE1bHVcbiIsIHRwLT5jYWxsLm5hbWUsIHRwLT5uaGl0LAorCQkgICB0cC0+cnAua3Aubm1pc3NlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9maWxlX3NlcV9vcCA9IHsKKwkuc3RhcnQgID0gcHJvYmVzX3NlcV9zdGFydCwKKwkubmV4dCAgID0gcHJvYmVzX3NlcV9uZXh0LAorCS5zdG9wICAgPSBwcm9iZXNfc2VxX3N0b3AsCisJLnNob3cgICA9IHByb2Jlc19wcm9maWxlX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IHByb2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnByb2ZpbGVfc2VxX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3Byb2JlX3Byb2ZpbGVfb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IHByb2ZpbGVfb3BlbiwKKwkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgICAgICAgID0gc2VxX3JlbGVhc2UsCit9OworCisvKiBLcHJvYmUgaGFuZGxlciAqLworc3RhdGljIF9fa3Byb2JlcyBpbnQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2Yoa3AsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnAua3ApOworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CisJaW50IHNpemUsIGksIHBjOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKKworCXRwLT5uaGl0Kys7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwlzaXplID0gU0laRU9GX0tQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKKwkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5pcCA9ICh1bnNpZ25lZCBsb25nKWtwLT5hZGRyOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKKworCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCisJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKKwlyZXR1cm4gMDsKK30KKworLyogS3JldHByb2JlIGhhbmRsZXIgKi8KK3N0YXRpYyBfX2twcm9iZXMgaW50IGtyZXRwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorCQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKKwlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOworCWludCBzaXplLCBpLCBwYzsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwlzaXplID0gU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKKwkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CisJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7CisKKwlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBjYWxsLCBlbnRyeSwgZXZlbnQpKQorCQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXZlbnQgZW50cnkgcHJpbnRlcnMgKi8KK2VudW0gcHJpbnRfbGluZV90CitwcmludF9rcHJvYmVfZXZlbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCWludCBpOworCisJZmllbGQgPSAoc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqKWl0ZXItPmVudDsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGZpZWxkLT5lbnQudHlwZSk7CisJdHAgPSBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCB0cmFjZV9wcm9iZSwgZXZlbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKCIsIHRwLT5jYWxsLm5hbWUpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncyB8IFRSQUNFX0lURVJfU1lNX09GRlNFVCkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIikiKSkKKwkJZ290byBwYXJ0aWFsOworCisJZm9yIChpID0gMDsgaSA8IGZpZWxkLT5uYXJnczsgaSsrKQorCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0lbHgiLAorCQkJCSAgICAgIHRwLT5hcmdzW2ldLm5hbWUsIGZpZWxkLT5hcmdzW2ldKSkKKwkJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CitwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworZW51bSBwcmludF9saW5lX3QKK3ByaW50X2tyZXRwcm9iZV9ldmVudChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisJaW50IGk7CisKKwlmaWVsZCA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICopaXRlci0+ZW50OworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZmllbGQtPmVudC50eXBlKTsKKwl0cCA9IGNvbnRhaW5lcl9vZihldmVudCwgc3RydWN0IHRyYWNlX3Byb2JlLCBldmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiVzOiAoIiwgdHAtPmNhbGwubmFtZSkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+cmV0X2lwLCBmbGFncyB8IFRSQUNFX0lURVJfU1lNX09GRlNFVCkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIiA8LSAiKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5mdW5jLCBmbGFncyAmIH5UUkFDRV9JVEVSX1NZTV9PRkZTRVQpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIpIikpCisJCWdvdG8gcGFydGlhbDsKKworCWZvciAoaSA9IDA7IGkgPCBmaWVsZC0+bmFyZ3M7IGkrKykKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9JWx4IiwKKwkJCQkgICAgICB0cC0+YXJnc1tpXS5uYW1lLCBmaWVsZC0+YXJnc1tpXSkpCisJCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZXZlbnRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwl0cC0+ZmxhZ3MgfD0gVFBfRkxBR19UUkFDRTsKKwlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkKKwkJcmV0dXJuIGVuYWJsZV9rcmV0cHJvYmUoJnRwLT5ycCk7CisJZWxzZQorCQlyZXR1cm4gZW5hYmxlX2twcm9iZSgmdHAtPnJwLmtwKTsKK30KKworc3RhdGljIHZvaWQgcHJvYmVfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKiljYWxsLT5kYXRhOworCisJdHAtPmZsYWdzICY9IH5UUF9GTEFHX1RSQUNFOworCWlmICghKHRwLT5mbGFncyAmIChUUF9GTEFHX1RSQUNFIHwgVFBfRkxBR19QUk9GSUxFKSkpIHsKKwkJaWYgKHByb2JlX2lzX3JldHVybih0cCkpCisJCQlkaXNhYmxlX2tyZXRwcm9iZSgmdHAtPnJwKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9rcHJvYmUoJnRwLT5ycC5rcCk7CisJfQorfQorCitzdGF0aWMgaW50IHByb2JlX2V2ZW50X3Jhd19pbml0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnRfY2FsbC0+ZmllbGRzKTsKKworCXJldHVybiAwOworfQorCisjdW5kZWYgREVGSU5FX0ZJRUxECisjZGVmaW5lIERFRklORV9GSUVMRCh0eXBlLCBpdGVtLCBuYW1lLCBpc19zaWduZWQpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCBuYW1lLAlcCisJCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJXAorCQkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWQsIFwKKwkJCQkJIEZJTFRFUl9PVEhFUik7CQkJXAorCQlpZiAocmV0KQkJCQkJCVwKKwkJCXJldHVybiByZXQ7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5IGZpZWxkOworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopZXZlbnRfY2FsbC0+ZGF0YTsKKworCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGV2ZW50X2NhbGwpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCisJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVAsIDApOworCURFRklORV9GSUVMRChpbnQsIG5hcmdzLCBGSUVMRF9TVFJJTkdfTkFSR1MsIDEpOworCS8qIFNldCBhcmd1bWVudCBuYW1lcyBhcyBmaWVsZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQ7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKilldmVudF9jYWxsLT5kYXRhOworCisJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoZXZlbnRfY2FsbCk7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisKKwlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgZnVuYywgRklFTERfU1RSSU5HX0ZVTkMsIDApOworCURFRklORV9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXRfaXAsIEZJRUxEX1NUUklOR19SRVRJUCwgMCk7CisJREVGSU5FX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUywgMSk7CisJLyogU2V0IGFyZ3VtZW50IG5hbWVzIGFzIGZpZWxkcyAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJCSAgICAgc3RydWN0IHRyYWNlX3Byb2JlICp0cCwgY29uc3QgY2hhciAqZm10LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnKQoreworCWludCBpOworCisJLyogU2hvdyBmb3JtYXQgKi8KKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIiVzIiwgZm10KSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9JSVseCIsIHRwLT5hcmdzW2ldLm5hbWUpKQorCQkJcmV0dXJuIDA7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlwiLCAlcyIsIGFyZykpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCisJCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCBSRUMtPiVzIiwgdHAtPmFyZ3NbaV0ubmFtZSkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiB0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKK30KKworI3VuZGVmIFNIT1dfRklFTEQKKyNkZWZpbmUgU0hPV19GSUVMRCh0eXBlLCBpdGVtLCBuYW1lKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogIiAjdHlwZSAiICVzO1x0IglcCisJCQkJIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLCBuYW1lLAkJXAorCQkJCSh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksXAorCQkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKHR5cGUpKTsJCVwKKwkJaWYgKCFyZXQpCQkJCQkJXAorCQkJcmV0dXJuIDA7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCSAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVApOworCVNIT1dfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTKTsKKworCS8qIFNob3cgZmllbGRzICovCisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCisJCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSk7CisJdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CisKKwlyZXR1cm4gX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzLCB0cCwgIiglbHgpIiwKKwkJCQkJICJSRUMtPiIgRklFTERfU1RSSU5HX0lQKTsKK30KKworc3RhdGljIGludCBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGZ1bmMsIEZJRUxEX1NUUklOR19GVU5DKTsKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldF9pcCwgRklFTERfU1RSSU5HX1JFVElQKTsKKwlTSE9XX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUyk7CisKKwkvKiBTaG93IGZpZWxkcyAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUpOworCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOworCisJcmV0dXJuIF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQocywgdHAsICIoJWx4IDwtICVseCkiLAorCQkJCQkgIlJFQy0+IiBGSUVMRF9TVFJJTkdfRlVOQworCQkJCQkgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUCk7Cit9CisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCisvKiBLcHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCitzdGF0aWMgX19rcHJvYmVzIGludCBrcHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCBwZXJmX3RyYWNlX2J1ZiAqdHJhY2VfYnVmOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OworCWludCBzaXplLCBfX3NpemUsIGksIHBjLCBfX2NwdTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljaGFyICpyYXdfZGF0YTsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCV9fc2l6ZSA9IFNJWkVPRl9LUFJPQkVfVFJBQ0VfRU5UUlkodHAtPm5yX2FyZ3MpOworCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOworCXNpemUgLT0gc2l6ZW9mKHUzMik7CisJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCisJCSAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFByb3RlY3QgdGhlIG5vbiBubWkgYnVmZmVyCisJICogVGhpcyBhbHNvIHByb3RlY3RzIHRoZSByY3UgcmVhZCBzaWRlCisJICovCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKwlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChpbl9ubWkoKSkKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7CisJZWxzZQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOworCisJaWYgKCF0cmFjZV9idWYpCisJCWdvdG8gZW5kOworCisJdHJhY2VfYnVmID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7CisKKwlpZiAodHJhY2VfYnVmLT5yZWN1cnNpb24rKykKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCisJLyoKKwkgKiBNYWtlIHJlY3Vyc2lvbiB1cGRhdGUgdmlzaWJsZSBiZWZvcmUgZW50ZXJpbmcgcGVyZl90cF9ldmVudAorCSAqIHNvIHRoYXQgd2UgcHJvdGVjdCBmcm9tIHBlcmYgcmVjdXJzaW9ucy4KKwkgKi8KKwliYXJyaWVyKCk7CisKKwlyYXdfZGF0YSA9IHRyYWNlX2J1Zi0+YnVmOworCisJLyogWmVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIGJ1ZmZlciBsZWFrIHRvIHVzZXJzcGFjZSAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisJZW50cnkgPSAoc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqKXJhd19kYXRhOworCWVudCA9ICZlbnRyeS0+ZW50OworCisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOworCWVudC0+dHlwZSA9IGNhbGwtPmlkOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5pcCA9ICh1bnNpZ25lZCBsb25nKWtwLT5hZGRyOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKKwlwZXJmX3RwX2V2ZW50KGNhbGwtPmlkLCBlbnRyeS0+aXAsIDEsIGVudHJ5LCBzaXplKTsKKworZW5kX3JlY3Vyc2lvbjoKKwl0cmFjZV9idWYtPnJlY3Vyc2lvbi0tOworZW5kOgorCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogS3JldHByb2JlIHByb2ZpbGUgaGFuZGxlciAqLworc3RhdGljIF9fa3Byb2JlcyBpbnQga3JldHByb2JlX3Byb2ZpbGVfZnVuYyhzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CisJc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHBlcmZfdHJhY2VfYnVmICp0cmFjZV9idWY7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CisJaW50IHNpemUsIF9fc2l6ZSwgaSwgcGMsIF9fY3B1OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWNoYXIgKnJhd19kYXRhOworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJX19zaXplID0gU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CisJc2l6ZSAtPSBzaXplb2YodTMyKTsKKwlpZiAoV0FSTl9PTkNFKHNpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwKKwkJICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogUHJvdGVjdCB0aGUgbm9uIG5taSBidWZmZXIKKwkgKiBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKKwllbHNlCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CisKKwlpZiAoIXRyYWNlX2J1ZikKKwkJZ290byBlbmQ7CisKKwl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKKworCWlmICh0cmFjZV9idWYtPnJlY3Vyc2lvbisrKQorCQlnb3RvIGVuZF9yZWN1cnNpb247CisKKwkvKgorCSAqIE1ha2UgcmVjdXJzaW9uIHVwZGF0ZSB2aXNpYmxlIGJlZm9yZSBlbnRlcmluZyBwZXJmX3RwX2V2ZW50CisJICogc28gdGhhdCB3ZSBwcm90ZWN0IGZyb20gcGVyZiByZWN1cnNpb25zLgorCSAqLworCWJhcnJpZXIoKTsKKworCXJhd19kYXRhID0gdHJhY2VfYnVmLT5idWY7CisKKwkvKiBaZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgYnVmZmVyIGxlYWsgdG8gdXNlcnNwYWNlICovCisJKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKKwllbnRyeSA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICopcmF3X2RhdGE7CisJZW50ID0gJmVudHJ5LT5lbnQ7CisKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7CisJZW50LT50eXBlID0gY2FsbC0+aWQ7CisJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CisJZW50cnktPmZ1bmMgPSAodW5zaWduZWQgbG9uZyl0cC0+cnAua3AuYWRkcjsKKwllbnRyeS0+cmV0X2lwID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKKwlwZXJmX3RwX2V2ZW50KGNhbGwtPmlkLCBlbnRyeS0+cmV0X2lwLCAxLCBlbnRyeSwgc2l6ZSk7CisKK2VuZF9yZWN1cnNpb246CisJdHJhY2VfYnVmLT5yZWN1cnNpb24tLTsKK2VuZDoKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfcHJvZmlsZV9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopY2FsbC0+ZGF0YTsKKworCXRwLT5mbGFncyB8PSBUUF9GTEFHX1BST0ZJTEU7CisKKwlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkKKwkJcmV0dXJuIGVuYWJsZV9rcmV0cHJvYmUoJnRwLT5ycCk7CisJZWxzZQorCQlyZXR1cm4gZW5hYmxlX2twcm9iZSgmdHAtPnJwLmtwKTsKK30KKworc3RhdGljIHZvaWQgcHJvYmVfcHJvZmlsZV9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwl0cC0+ZmxhZ3MgJj0gflRQX0ZMQUdfUFJPRklMRTsKKworCWlmICghKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpKSB7CisJCWlmIChwcm9iZV9pc19yZXR1cm4odHApKQorCQkJZGlzYWJsZV9rcmV0cHJvYmUoJnRwLT5ycCk7CisJCWVsc2UKKwkJCWRpc2FibGVfa3Byb2JlKCZ0cC0+cnAua3ApOworCX0KK30KKyNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworCisKK3N0YXRpYyBfX2twcm9iZXMKK2ludCBrcHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3Byb2JlICprcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CisKKwlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19UUkFDRSkKKwkJa3Byb2JlX3RyYWNlX2Z1bmMoa3AsIHJlZ3MpOworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfUFJPRklMRSkKKwkJa3Byb2JlX3Byb2ZpbGVfZnVuYyhrcCwgcmVncyk7CisjZW5kaWYJLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKwlyZXR1cm4gMDsJLyogV2UgZG9uJ3QgdHdlZWsga2VybmVsLCBzbyBqdXN0IHJldHVybiAwICovCit9CisKK3N0YXRpYyBfX2twcm9iZXMKK2ludCBrcmV0cHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihyaS0+cnAsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnApOworCisJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpCisJCWtyZXRwcm9iZV90cmFjZV9mdW5jKHJpLCByZWdzKTsKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1BST0ZJTEUpCisJCWtyZXRwcm9iZV9wcm9maWxlX2Z1bmMocmksIHJlZ3MpOworI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisJcmV0dXJuIDA7CS8qIFdlIGRvbid0IHR3ZWVrIGtlcm5lbCwgc28ganVzdCByZXR1cm4gMCAqLworfQorCitzdGF0aWMgaW50IHJlZ2lzdGVyX3Byb2JlX2V2ZW50KHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOworCWludCByZXQ7CisKKwkvKiBJbml0aWFsaXplIGZ0cmFjZV9ldmVudF9jYWxsICovCisJaWYgKHByb2JlX2lzX3JldHVybih0cCkpIHsKKwkJdHAtPmV2ZW50LnRyYWNlID0gcHJpbnRfa3JldHByb2JlX2V2ZW50OworCQljYWxsLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OworCQljYWxsLT5zaG93X2Zvcm1hdCA9IGtyZXRwcm9iZV9ldmVudF9zaG93X2Zvcm1hdDsKKwkJY2FsbC0+ZGVmaW5lX2ZpZWxkcyA9IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOworCX0gZWxzZSB7CisJCXRwLT5ldmVudC50cmFjZSA9IHByaW50X2twcm9iZV9ldmVudDsKKwkJY2FsbC0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKKwkJY2FsbC0+c2hvd19mb3JtYXQgPSBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQ7CisJCWNhbGwtPmRlZmluZV9maWVsZHMgPSBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKKwl9CisJY2FsbC0+ZXZlbnQgPSAmdHAtPmV2ZW50OworCWNhbGwtPmlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cC0+ZXZlbnQpOworCWlmICghY2FsbC0+aWQpCisJCXJldHVybiAtRU5PREVWOworCWNhbGwtPmVuYWJsZWQgPSAwOworCWNhbGwtPnJlZ2Z1bmMgPSBwcm9iZV9ldmVudF9lbmFibGU7CisJY2FsbC0+dW5yZWdmdW5jID0gcHJvYmVfZXZlbnRfZGlzYWJsZTsKKworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisJYXRvbWljX3NldCgmY2FsbC0+cHJvZmlsZV9jb3VudCwgLTEpOworCWNhbGwtPnByb2ZpbGVfZW5hYmxlID0gcHJvYmVfcHJvZmlsZV9lbmFibGU7CisJY2FsbC0+cHJvZmlsZV9kaXNhYmxlID0gcHJvYmVfcHJvZmlsZV9kaXNhYmxlOworI2VuZGlmCisJY2FsbC0+ZGF0YSA9IHRwOworCXJldCA9IHRyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiRmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSBldmVudDogJXNcbiIsIGNhbGwtPm5hbWUpOworCQl1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHAtPmV2ZW50KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9wcm9iZV9ldmVudChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQoreworCS8qIHRwLT5ldmVudCBpcyB1bnJlZ2lzdGVyZWQgaW4gdHJhY2VfcmVtb3ZlX2V2ZW50X2NhbGwoKSAqLworCXRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKCZ0cC0+Y2FsbCk7Cit9CisKKy8qIE1ha2UgYSBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgY29udHJvbGluZyBwcm9iZSBwb2ludHMgKi8KK3N0YXRpYyBfX2luaXQgaW50IGluaXRfa3Byb2JlX3RyYWNlKHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gMDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgia3Byb2JlX2V2ZW50cyIsIDA2NDQsIGRfdHJhY2VyLAorCQkJCSAgICBOVUxMLCAma3Byb2JlX2V2ZW50c19vcHMpOworCisJLyogRXZlbnQgbGlzdCBpbnRlcmZhY2UgKi8KKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidrcHJvYmVfZXZlbnRzJyBlbnRyeVxuIik7CisKKwkvKiBQcm9maWxlIGludGVyZmFjZSAqLworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgia3Byb2JlX3Byb2ZpbGUiLCAwNDQ0LCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJmtwcm9iZV9wcm9maWxlX29wcyk7CisKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidrcHJvYmVfcHJvZmlsZScgZW50cnlcbiIpOworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoaW5pdF9rcHJvYmVfdHJhY2UpOworCisKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAorCitzdGF0aWMgaW50IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQoaW50IGExLCBpbnQgYTIsIGludCBhMywKKwkJCQkJaW50IGE0LCBpbnQgYTUsIGludCBhNikKK3sKKwlyZXR1cm4gYTEgKyBhMiArIGEzICsgYTQgKyBhNSArIGE2OworfQorCitzdGF0aWMgX19pbml0IGludCBrcHJvYmVfdHJhY2Vfc2VsZl90ZXN0c19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlpbnQgKCp0YXJnZXQpKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworCisJdGFyZ2V0ID0ga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldDsKKworCXByX2luZm8oIlRlc3Rpbmcga3Byb2JlIHRyYWNpbmc6ICIpOworCisJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgicDp0ZXN0cHJvYmUga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldCAiCisJCQkJICAiJGFyZzEgJGFyZzIgJGFyZzMgJGFyZzQgJHN0YWNrICRzdGFjazAiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpCisJCXByX3dhcm5pbmcoImVycm9yIGVuYWJsaW5nIGZ1bmN0aW9uIGVudHJ5XG4iKTsKKworCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoInI6dGVzdHByb2JlMiBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0ICIKKwkJCQkgICIkcmV0dmFsIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKQorCQlwcl93YXJuaW5nKCJlcnJvciBlbmFibGluZyBmdW5jdGlvbiByZXR1cm5cbiIpOworCisJcmV0ID0gdGFyZ2V0KDEsIDIsIDMsIDQsIDUsIDYpOworCisJY2xlYW51cF9hbGxfcHJvYmVzKCk7CisKKwlwcl9jb250KCJPS1xuIik7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoa3Byb2JlX3RyYWNlX3NlbGZfdGVzdHNfaW5pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCmluZGV4IGVkMTc1NjUuLmI2YzEyYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCiAgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZwogICoKKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgdHJhY2Ugb3ZlcnNpemVzIHRoZSBidWZmZXIncyBmcmVlCisgKiBzcGFjZSwgMSBvdGhlcndpc2UuCisgKgogICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KICAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKICAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCkBAIC05NSw3ICs5OCw3IEBACiAKIAlzLT5sZW4gKz0gcmV0OwogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wcmludGYpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IGQwMGQxYTguLjUxMjEzYjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0zNTQsMTMgKzM1NCwxMyBAQAogCQl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwogfQogCi1pbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIodm9pZCAqcHRyKQoraW50IHJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgbnVtOwogCWNoYXIgKm5hbWU7CiAKLQluYW1lID0gKGNoYXIgKilwdHI7CisJbmFtZSA9IChjaGFyICopY2FsbC0+ZGF0YTsKIAludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CiAJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTM3OCwxMiArMzc4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHZvaWQgKnB0cikKK3ZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IG51bTsKIAljaGFyICpuYW1lOwogCi0JbmFtZSA9IChjaGFyICopcHRyOworCW5hbWUgPSAoY2hhciAqKWNhbGwtPmRhdGE7CiAJbnVtID0gc3lzY2FsbF9uYW1lX3RvX25yKG5hbWUpOwogCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKIAkJcmV0dXJuOwpAQCAtMzk1LDEzICszOTUsMTMgQEAKIAltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CiB9CiAKLWludCByZWdfZXZlbnRfc3lzY2FsbF9leGl0KHZvaWQgKnB0cikKK2ludCByZWdfZXZlbnRfc3lzY2FsbF9leGl0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgbnVtOwogCWNoYXIgKm5hbWU7CiAKLQluYW1lID0gKGNoYXIgKilwdHI7CisJbmFtZSA9IGNhbGwtPmRhdGE7CiAJbnVtID0gc3lzY2FsbF9uYW1lX3RvX25yKG5hbWUpOwogCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC00MTksMTIgKzQxOSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0KHZvaWQgKnB0cikKK3ZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKIAlpbnQgbnVtOwogCWNoYXIgKm5hbWU7CiAKLQluYW1lID0gKGNoYXIgKilwdHI7CisJbmFtZSA9IGNhbGwtPmRhdGE7CiAJbnVtID0gc3lzY2FsbF9uYW1lX3RvX25yKG5hbWUpOwogCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKIAkJcmV0dXJuOwpAQCAtNDc3LDYgKzQ3Nyw3IEBACiBzdGF0aWMgdm9pZCBwcm9mX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgaWQpCiB7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOworCXN0cnVjdCBwZXJmX3RyYWNlX2J1ZiAqdHJhY2VfYnVmOwogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyICpyYXdfZGF0YTsKQEAgLTUwNywxNCArNTA4LDI1IEBACiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKGluX25taSgpKQotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKIAllbHNlCi0JCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmKTsKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKIAotCWlmICghcmF3X2RhdGEpCisJaWYgKCF0cmFjZV9idWYpCiAJCWdvdG8gZW5kOwogCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cihyYXdfZGF0YSwgY3B1KTsKKwl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CisKKwlpZiAodHJhY2VfYnVmLT5yZWN1cnNpb24rKykKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCisJLyoKKwkgKiBNYWtlIHJlY3Vyc2lvbiB1cGRhdGUgdmlzaWJsZSBiZWZvcmUgZW50ZXJpbmcgcGVyZl90cF9ldmVudAorCSAqIHNvIHRoYXQgd2UgcHJvdGVjdCBmcm9tIHBlcmYgcmVjdXJzaW9ucy4KKwkgKi8KKwliYXJyaWVyKCk7CisKKwlyYXdfZGF0YSA9IHRyYWNlX2J1Zi0+YnVmOwogCiAJLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KIAkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwpAQCAtNTI3LDYgKzUzOSw4IEBACiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmcmVjLT5hcmdzKTsKIAlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5lbnRlcl9pZCwgMCwgMSwgcmVjLCBzaXplKTsKIAorZW5kX3JlY3Vyc2lvbjoKKwl0cmFjZV9idWYtPnJlY3Vyc2lvbi0tOwogZW5kOgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTU3NCw2ICs1ODgsNyBAQAogewogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICpyZWM7CisJc3RydWN0IHBlcmZfdHJhY2VfYnVmICp0cmFjZV9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3lzY2FsbF9ucjsKIAljaGFyICpyYXdfZGF0YTsKQEAgLTYwNSwxNCArNjIwLDI1IEBACiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKGluX25taSgpKQotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKIAllbHNlCi0JCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmKTsKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKIAotCWlmICghcmF3X2RhdGEpCisJaWYgKCF0cmFjZV9idWYpCiAJCWdvdG8gZW5kOwogCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cihyYXdfZGF0YSwgY3B1KTsKKwl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CisKKwlpZiAodHJhY2VfYnVmLT5yZWN1cnNpb24rKykKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCisJLyoKKwkgKiBNYWtlIHJlY3Vyc2lvbiB1cGRhdGUgdmlzaWJsZSBiZWZvcmUgZW50ZXJpbmcgcGVyZl90cF9ldmVudAorCSAqIHNvIHRoYXQgd2UgcHJvdGVjdCBmcm9tIHBlcmYgcmVjdXJzaW9ucy4KKwkgKi8KKwliYXJyaWVyKCk7CisKKwlyYXdfZGF0YSA9IHRyYWNlX2J1Zi0+YnVmOwogCiAJLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KIAkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwpAQCAtNjI2LDYgKzY1Miw4IEBACiAKIAlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5leGl0X2lkLCAwLCAxLCByZWMsIHNpemUpOwogCitlbmRfcmVjdXJzaW9uOgorCXRyYWNlX2J1Zi0+cmVjdXJzaW9uLS07CiBlbmQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggMmMwMDBlNy4uNDZkMDE2NSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0zMzAsOSArMzMwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgZnJlZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnVwLT53b3JrLCBjbGVhbnVwX3VzZXJfc3RydWN0KTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVwLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgJiYgQ09ORklHX1NZU0ZTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggY2NlZmU1Ny4uMTIzMjgxNCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAgKi8KIHZvaWQgZmx1c2hfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrKQogewotCWlmIChkZWxfdGltZXIoJmR3b3JrLT50aW1lcikpIHsKKwlpZiAoZGVsX3RpbWVyX3N5bmMoJmR3b3JrLT50aW1lcikpIHsKIAkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7CiAJCWN3cSA9IHdxX3Blcl9jcHUoa2V2ZW50ZF93cSwgZ2V0X2NwdSgpKTsKIAkJX19xdWV1ZV93b3JrKGN3cSwgJmR3b3JrLT53b3JrKTsKQEAgLTY4NSwyMSArNjg1LDM4IEBACiBpbnQgc2NoZWR1bGVfb25fZWFjaF9jcHUod29ya19mdW5jX3QgZnVuYykKIHsKIAlpbnQgY3B1OworCWludCBvcmlnID0gLTE7CiAJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrczsKIAogCXdvcmtzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCk7CiAJaWYgKCF3b3JrcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKgorCSAqIHdoZW4gcnVubmluZyBpbiBrZXZlbnRkIGRvbid0IHNjaGVkdWxlIGEgd29yayBpdGVtIG9uIGl0c2VsZi4KKwkgKiBDYW4ganVzdCBjYWxsIGRpcmVjdGx5IGJlY2F1c2UgdGhlIHdvcmsgcXVldWUgaXMgYWxyZWFkeSBib3VuZC4KKwkgKiBUaGlzIGFsc28gaXMgZmFzdGVyLgorCSAqIE1ha2UgdGhpcyBhIGdlbmVyaWMgcGFyYW1ldGVyIGZvciBvdGhlciB3b3JrcXVldWVzPworCSAqLworCWlmIChjdXJyZW50X2lzX2tldmVudGQoKSkgeworCQlvcmlnID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJSU5JVF9XT1JLKHBlcl9jcHVfcHRyKHdvcmtzLCBvcmlnKSwgZnVuYyk7CisJCWZ1bmMocGVyX2NwdV9wdHIod29ya3MsIG9yaWcpKTsKKwl9CisKIAlnZXRfb25saW5lX2NwdXMoKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSBwZXJfY3B1X3B0cih3b3JrcywgY3B1KTsKIAorCQlpZiAoY3B1ID09IG9yaWcpCisJCQljb250aW51ZTsKIAkJSU5JVF9XT1JLKHdvcmssIGZ1bmMpOwogCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CiAJfQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlmbHVzaF93b3JrKHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1ICE9IG9yaWcpCisJCQlmbHVzaF93b3JrKHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKKwl9CiAJcHV0X29ubGluZV9jcHVzKCk7CiAJZnJlZV9wZXJjcHUod29ya3MpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAzMGRmNTg2Li4yMzRjZWIxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgKFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgfHwgUFBDNjQpCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlbiB0aGUga2VybmVsIHdpbGwgdXNlIGEgZGVidWcgdmFyaWFudCBvZiB0aGUKZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCA1OGE5ZjlmLi5jZTZiN2VhIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC04MTksOSArODE5LDExIEBACiAJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCiAJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBDUFUgYWRkcmVzcyAiCiAJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgotCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0lcF0gW2NwdSBmcmVlIGFkZHJlc3M9JXBdIiwKKwkJCSAgICJbY3B1IGFsbG9jIGFkZHJlc3M9MHglMDE2bGx4XSAiCisJCQkgICAiW2NwdSBmcmVlIGFkZHJlc3M9MHglMDE2bGx4XSIsCiAJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCi0JCQkgICAodm9pZCAqKWVudHJ5LT5wYWRkciwgKHZvaWQgKilyZWYtPnBhZGRyKTsKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpZW50cnktPnBhZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWYtPnBhZGRyKTsKIAl9CiAKIAlpZiAocmVmLT5zZ19jYWxsX2VudHMgJiYgcmVmLT50eXBlID09IGRtYV9kZWJ1Z19zZyAmJgpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggNTc5NjNjNi4uZmQzMzg2MiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC02Nyw3ICs2Nyw3IEBACiAKIGNvbmZpZyBTUEFSU0VNRU0KIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTUEFSU0VNRU1fTUFOVUFMCisJZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgJiYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMCiAKIGNvbmZpZyBGTEFUTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBob3QtYWRkIgogCWRlcGVuZHMgb24gU1BBUlNFTUVNIHx8IFg4Nl82NF9BQ1BJX05VTUEKIAlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgIShISUJFUk5BVElPTiAmJiAhUzM5MCkgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUEM2NCB8fCBTVVBFUkggfHwgUzM5MCkKKwlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUENfQk9PSzNTXzY0IHx8IFNVUEVSSCB8fCBTMzkwKQogCiBjb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCA1YTM3ZTIwLi4xMWFlZTA5IDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTYxMCw5ICs2MTAsMjYgQEAKIAkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKIH0KIAorLyoKKyAqIFRoaXMgYmRpIGlzIGdvaW5nIGF3YXkgbm93LCBtYWtlIHN1cmUgdGhhdCBubyBzdXBlcl9ibG9ja3MgcG9pbnQgdG8gaXQKKyAqLworc3RhdGljIHZvaWQgYmRpX3BydW5lX3NiKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJCWlmIChzYi0+c19iZGkgPT0gYmRpKQorCQkJc2ItPnNfYmRpID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworfQorCiB2b2lkIGJkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7CiAJaWYgKGJkaS0+ZGV2KSB7CisJCWJkaV9wcnVuZV9zYihiZGkpOworCiAJCWlmICghYmRpX2NhcF9mbHVzaF9mb3JrZXIoYmRpKSkKIAkJCWJkaV93Yl9zaHV0ZG93bihiZGkpOwogCQliZGlfZGVidWdfdW5yZWdpc3RlcihiZGkpOwpkaWZmIC0tZ2l0IGEvbW0vaGlnaG1lbS5jIGIvbW0vaGlnaG1lbS5jCmluZGV4IDI1ODc4Y2MuLjljMWU2MjcgMTAwNjQ0Ci0tLSBhL21tL2hpZ2htZW0uYworKysgYi9tbS9oaWdobWVtLmMKQEAgLTQyNiwxNiArNDI2LDIxIEBACiAKIHZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIHdhcm5fY291bnQgPSAxMDsKKwlzdGF0aWMgaW50IHdhcm5fY291bnQgPSAxMDsKIAotCWlmICh1bmxpa2VseSh3YXJuX2NvdW50ID09IDApKQorCWlmICh1bmxpa2VseSh3YXJuX2NvdW50IDwgMCkpCiAJCXJldHVybjsKIAogCWlmICh1bmxpa2VseShpbl9pbnRlcnJ1cHQoKSkpIHsKLQkJaWYgKGluX2lycSgpKSB7CisJCWlmIChpbl9ubWkoKSkgeworCQkJaWYgKHR5cGUgIT0gS01fTk1JICYmIHR5cGUgIT0gS01fTk1JX1BURSkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJd2Fybl9jb3VudC0tOworCQkJfQorCQl9IGVsc2UgaWYgKGluX2lycSgpKSB7CiAJCQlpZiAodHlwZSAhPSBLTV9JUlEwICYmIHR5cGUgIT0gS01fSVJRMSAmJgogCQkJICAgIHR5cGUgIT0gS01fQklPX1NSQ19JUlEgJiYgdHlwZSAhPSBLTV9CSU9fRFNUX0lSUSAmJgotCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQpIHsKKwkJCSAgICB0eXBlICE9IEtNX0JPVU5DRV9SRUFEICYmIHR5cGUgIT0gS01fSVJRX1BURSkgewogCQkJCVdBUk5fT04oMSk7CiAJCQkJd2Fybl9jb3VudC0tOwogCQkJfQpAQCAtNDUyLDcgKzQ1Nyw5IEBACiAJfQogCiAJaWYgKHR5cGUgPT0gS01fSVJRMCB8fCB0eXBlID09IEtNX0lSUTEgfHwgdHlwZSA9PSBLTV9CT1VOQ0VfUkVBRCB8fAotCQkJdHlwZSA9PSBLTV9CSU9fU1JDX0lSUSB8fCB0eXBlID09IEtNX0JJT19EU1RfSVJRKSB7CisJCQl0eXBlID09IEtNX0JJT19TUkNfSVJRIHx8IHR5cGUgPT0gS01fQklPX0RTVF9JUlEgfHwKKwkJCXR5cGUgPT0gS01fSVJRX1BURSB8fCB0eXBlID09IEtNX05NSSB8fAorCQkJdHlwZSA9PSBLTV9OTUlfUFRFICkgewogCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgewogCQkJV0FSTl9PTigxKTsKIAkJCXdhcm5fY291bnQtLTsKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggYmVmMWFmNC4uNTU3NWY4NiAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTEwMTIsNiArMTAxMiw3IEBACiAJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOwogCQlpbnQgcmV0OwogCisJCWNvbmRfcmVzY2hlZCgpOwogCQl0cmVlX3JtYXBfaXRlbSA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBybWFwX2l0ZW0sIG5vZGUpOwogCQlwYWdlMlswXSA9IGdldF9tZXJnZWFibGVfcGFnZSh0cmVlX3JtYXBfaXRlbSk7CiAJCWlmICghcGFnZTJbMF0pCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA3MjlkNGIxLi5kYWNjNjQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtMzcwLDkgKzM3MSw2IEBACiAJaW50IHJldCA9IEZBSUxFRDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCiAJLyoKIAkgKiBGb3IgYW5vbnltb3VzIHBhZ2VzIHdlJ3JlIGRvbmUgdGhlIG9ubHkgcmVmZXJlbmNlIGxlZnQKIAkgKiBzaG91bGQgYmUgdGhlIG9uZSBtX2YoKSBob2xkcy4KQEAgLTQ5OCwzMCArNDk2LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCiAJQ2xlYXJQYWdlRGlydHkocCk7CiAJLyogVHJpZ2dlciBFSU8gaW4gc2htZW06ICovCiAJQ2xlYXJQYWdlVXB0b2RhdGUocCk7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBERUxBWUVEOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIERFTEFZRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gUkVDT1ZFUkVEOwotCX0KIAlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gUkVDT1ZFUkVEOwogfQogCiAvKgpAQCAtNjExLDggKzU5Nyw2IEBACiAJeyAwLAkJMCwJCSJ1bmtub3duIHBhZ2Ugc3RhdGUiLAltZV91bmtub3duIH0sCiB9OwogCi0jdW5kZWYgbHJ1Ci0KIHN0YXRpYyB2b2lkIGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKm1zZywgaW50IHJlc3VsdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC02MjksMTMgKzYxMywxNiBAQAogCQkJdW5zaWduZWQgbG9uZyBwZm4sIGludCByZWYpCiB7CiAJaW50IHJlc3VsdDsKKwlpbnQgY291bnQ7CiAKIAlyZXN1bHQgPSBwcy0+YWN0aW9uKHAsIHBmbik7CiAJYWN0aW9uX3Jlc3VsdChwZm4sIHBzLT5tc2csIHJlc3VsdCk7Ci0JaWYgKHBhZ2VfY291bnQocCkgIT0gMSArIHJlZikKKworCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDEgLSByZWY7CisJaWYgKGNvdW50ICE9IDApCiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIk1DRSAlI2x4OiAlcyBwYWdlIHN0aWxsIHJlZmVyZW5jZWQgYnkgJWQgdXNlcnNcbiIsCi0JCSAgICAgICBwZm4sIHBzLT5tc2csIHBhZ2VfY291bnQocCkgLSAxKTsKKwkJICAgICAgIHBmbiwgcHMtPm1zZywgY291bnQpOwogCiAJLyogQ291bGQgZG8gbW9yZSBjaGVja3MgaGVyZSBpZiBwYWdlIGxvb2tzIG9rICovCiAJLyoKQEAgLTY2MSwxMiArNjQ4LDkgQEAKIAlpbnQgaTsKIAlpbnQga2lsbCA9IDE7CiAKLQlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSkKKwlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSB8fCBQYWdlS3NtKHApKQogCQlyZXR1cm47CiAKLQlpZiAoIVBhZ2VMUlUocCkpCi0JCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0KIAkvKgogCSAqIFRoaXMgY2hlY2sgaW1wbGllcyB3ZSBkb24ndCBraWxsIHByb2Nlc3NlcyBpZiB0aGVpciBwYWdlcwogCSAqIGFyZSBpbiB0aGUgc3dhcCBjYWNoZSBlYXJseS4gVGhvc2UgYXJlIGFsd2F5cyBsYXRlIGtpbGxzLgpAQCAtNzM4LDYgKzcyMiw3IEBACiAKIGludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgcmVmKQogeworCXVuc2lnbmVkIGxvbmcgbHJ1X2ZsYWc7CiAJc3RydWN0IHBhZ2Vfc3RhdGUgKnBzOwogCXN0cnVjdCBwYWdlICpwOwogCWludCByZXM7CkBAIC03NzUsNiArNzYwLDI0IEBACiAJfQogCiAJLyoKKwkgKiBXZSBpZ25vcmUgbm9uLUxSVSBwYWdlcyBmb3IgZ29vZCByZWFzb25zLgorCSAqIC0gUEdfbG9ja2VkIGlzIG9ubHkgd2VsbCBkZWZpbmVkIGZvciBMUlUgcGFnZXMgYW5kIGEgZmV3IG90aGVycworCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX3NldF9wYWdlX2xvY2tlZCgpCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fU2V0UGFnZVNsYWIqKCkgKGFuZCBtb3JlIG5vbi1hdG9taWMgb3BzKQorCSAqIFRoZSBjaGVjayAodW5uZWNlc3NhcmlseSkgaWdub3JlcyBMUlUgcGFnZXMgYmVpbmcgaXNvbGF0ZWQgYW5kCisJICogd2Fsa2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gY29kZSwgaG93ZXZlciB0aGF0J3Mgbm90IGEgYmlnIGxvc3MuCisJICovCisJaWYgKCFQYWdlTFJVKHApKQorCQlscnVfYWRkX2RyYWluX2FsbCgpOworCWxydV9mbGFnID0gcC0+ZmxhZ3MgJiBscnU7CisJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKKwkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7CisJCXB1dF9wYWdlKHApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocCk7CisKKwkvKgogCSAqIExvY2sgdGhlIHBhZ2UgYW5kIHdhaXQgZm9yIHdyaXRlYmFjayB0byBmaW5pc2guCiAJICogSXQncyB2ZXJ5IGRpZmZpY3VsdCB0byBtZXNzIHdpdGggcGFnZXMgY3VycmVudGx5IHVuZGVyIElPCiAJICogYW5kIGluIG1hbnkgY2FzZXMgaW1wb3NzaWJsZSwgc28gd2UganVzdCBhdm9pZCBpdCBoZXJlLgpAQCAtNzkwLDcgKzc5Myw3IEBACiAJLyoKIAkgKiBUb3JuIGRvd24gYnkgc29tZW9uZSBlbHNlPwogCSAqLwotCWlmIChQYWdlTFJVKHApICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgeworCWlmICgobHJ1X2ZsYWcgJiBscnUpICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImFscmVhZHkgdHJ1bmNhdGVkIExSVSIsIElHTk9SRUQpOwogCQlyZXMgPSAwOwogCQlnb3RvIG91dDsKQEAgLTc5OCw3ICs4MDEsNyBAQAogCiAJcmVzID0gLUVCVVNZOwogCWZvciAocHMgPSBlcnJvcl9zdGF0ZXM7OyBwcysrKSB7Ci0JCWlmICgocC0+ZmxhZ3MgJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgeworCQlpZiAoKChwLT5mbGFncyB8IGxydV9mbGFnKSYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKIAkJCXJlcyA9IHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4sIHJlZik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA3ZTkxYjVmLi42YWIxOWRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjQxLDYgKzY0MSw3IEBACiAJCXBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJcHRlX3QgKm9yaWdfc3JjX3B0ZSwgKm9yaWdfZHN0X3B0ZTsKIAlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGU7CiAJc3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKQEAgLTY1NCw2ICs2NTUsOCBAQAogCXNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKKwlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCiAJZG8gewpAQCAtNjc3LDkgKzY4MCw5IEBACiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlzcGluX3VubG9jayhzcmNfcHRsKTsKLQlwdGVfdW5tYXBfbmVzdGVkKHNyY19wdGUgLSAxKTsKKwlwdGVfdW5tYXBfbmVzdGVkKG9yaWdfc3JjX3B0ZSk7CiAJYWRkX21tX3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKLQlwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUgLSAxLCBkc3RfcHRsKTsKKwlwdGVfdW5tYXBfdW5sb2NrKG9yaWdfZHN0X3B0ZSwgZHN0X3B0bCk7CiAJY29uZF9yZXNjaGVkKCk7CiAJaWYgKGFkZHIgIT0gZW5kKQogCQlnb3RvIGFnYWluOwpAQCAtMTgyMCwxMCArMTgyMywxMCBAQAogCXRva2VuID0gcG1kX3BndGFibGUoKnBtZCk7CiAKIAlkbyB7Ci0JCWVyciA9IGZuKHB0ZSwgdG9rZW4sIGFkZHIsIGRhdGEpOworCQllcnIgPSBmbihwdGUrKywgdG9rZW4sIGFkZHIsIGRhdGEpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCkBAIC0yNTM5LDcgKzI1NDIsNyBAQAogCX0gZWxzZSBpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7CiAJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwogCQlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMjYxMSw2ICsyNjE0LDcgQEAKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CiBvdXRfcGFnZToKIAl1bmxvY2tfcGFnZShwYWdlKTsKK291dF9yZWxlYXNlOgogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA3ZGQ5ZDlmLi40NTQ1ZDU5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAogCQllcnIgPSBtaWdyYXRlX3ByZXAoKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG1wb2xfb3V0OwogCX0KIAl7CiAJCU5PREVNQVNLX1NDUkFUQ0goc2NyYXRjaCk7CkBAIC0xMDM5LDEwICsxMDM5LDkgQEAKIAkJCWVyciA9IC1FTk9NRU07CiAJCU5PREVNQVNLX1NDUkFUQ0hfRlJFRShzY3JhdGNoKTsKIAl9Ci0JaWYgKGVycikgewotCQltcG9sX3B1dChuZXcpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIG1wb2xfb3V0OworCiAJdm1hID0gY2hlY2tfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLAogCQkJICBmbGFncyB8IE1QT0xfTUZfSU5WRVJULCAmcGFnZWxpc3QpOwogCkBAIC0xMDU4LDkgKzEwNTcsMTEgQEAKIAogCQlpZiAoIWVyciAmJiBucl9mYWlsZWQgJiYgKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpKQogCQkJZXJyID0gLUVJTzsKLQl9CisJfSBlbHNlCisJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKyBtcG9sX291dDoKIAltcG9sX3B1dChuZXcpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMWE0YmY0OC4uN2RiY2IyMiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBnZXRfbmV3X3BhZ2UocGFnZSwgcHJpdmF0ZSwgJnJlc3VsdCk7CiAJaW50IHJjdV9sb2NrZWQgPSAwOwogCWludCBjaGFyZ2UgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAKIAlpZiAoIW5ld3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNTE4OWI1YS4uOTg3NmZhMCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0xMzYyLDkgKzEzNjIsMTEgQEAKIGVycm9yX2p1c3RfZnJlZToKIAl1cF93cml0ZSgmbm9tbXVfcmVnaW9uX3NlbSk7CiBlcnJvcjoKLQlmcHV0KHJlZ2lvbi0+dm1fZmlsZSk7CisJaWYgKHJlZ2lvbi0+dm1fZmlsZSkKKwkJZnB1dChyZWdpb24tPnZtX2ZpbGUpOwogCWttZW1fY2FjaGVfZnJlZSh2bV9yZWdpb25famFyLCByZWdpb24pOwotCWZwdXQodm1hLT52bV9maWxlKTsKKwlpZiAodm1hLT52bV9maWxlKQorCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKQogCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYSh2bWEtPnZtX21tKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYmY3MjA1NS4uMmJjMmFjNiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIAkJICogU2VlIGFsc28gY3B1c2V0X3pvbmVfYWxsb3dlZCgpIGNvbW1lbnQgaW4ga2VybmVsL2NwdXNldC5jLgogCQkgKi8KIAkJYWxsb2NfZmxhZ3MgJj0gfkFMTE9DX0NQVVNFVDsKLQl9IGVsc2UgaWYgKHVubGlrZWx5KHJ0X3Rhc2socCkpKQorCX0gZWxzZSBpZiAodW5saWtlbHkocnRfdGFzayhwKSkgJiYgIWluX2ludGVycnVwdCgpKQogCQlhbGxvY19mbGFncyB8PSBBTExPQ19IQVJERVI7CiAKIAlpZiAobGlrZWx5KCEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkpIHsKQEAgLTE4MTcsOSArMTgxNyw5IEBACiAJaWYgKE5VTUFfQlVJTEQgJiYgKGdmcF9tYXNrICYgR0ZQX1RISVNOT0RFKSA9PSBHRlBfVEhJU05PREUpCiAJCWdvdG8gbm9wYWdlOwogCityZXN0YXJ0OgogCXdha2VfYWxsX2tzd2FwZChvcmRlciwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCk7CiAKLXJlc3RhcnQ6CiAJLyoKIAkgKiBPSywgd2UncmUgYmVsb3cgdGhlIGtzd2FwZCB3YXRlcm1hcmsgYW5kIGhhdmUga2lja2VkIGJhY2tncm91bmQKIAkgKiByZWNsYWltLiBOb3cgdGhpbmdzIGdldCBtb3JlIGNvbXBsZXgsIHNvIHNldCB1cCBhbGxvY19mbGFncyBhY2NvcmRpbmcKQEAgLTIxODMsNyArMjE4Myw3IEBACiAJcHJpbnRrKCJhY3RpdmVfYW5vbjolbHUgaW5hY3RpdmVfYW5vbjolbHUgaXNvbGF0ZWRfYW5vbjolbHVcbiIKIAkJIiBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfZmlsZTolbHUgaXNvbGF0ZWRfZmlsZTolbHVcbiIKIAkJIiB1bmV2aWN0YWJsZTolbHUiCi0JCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCiAJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLApAQCAtMjE5Niw3ICsyMTk2LDYgQEAKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCi0JCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmMKaW5kZXggNmFmNzhjMWUuLmQ5MDc5NzEgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0xNTMsNyArMTUzLDEwIEBACiAgKgogICogRHVyaW5nIGFsbG9jYXRpb24sIHBjcHVfYWxsb2NfbXV0ZXggaXMga2VwdCBsb2NrZWQgYWxsIHRoZSB0aW1lIGFuZAogICogcGNwdV9sb2NrIGlzIGdyYWJiZWQgYW5kIHJlbGVhc2VkIGFzIG5lY2Vzc2FyeS4gIEFsbCBhY3R1YWwgbWVtb3J5Ci0gKiBhbGxvY2F0aW9ucyBhcmUgZG9uZSB1c2luZyBHRlBfS0VSTkVMIHdpdGggcGNwdV9sb2NrIHJlbGVhc2VkLgorICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4gIEluCisgKiBnZW5lcmFsLCBwZXJjcHUgbWVtb3J5IGNhbid0IGJlIGFsbG9jYXRlZCB3aXRoIGlycSBvZmYgYnV0CisgKiBpcnFzYXZlL3Jlc3RvcmUgYXJlIHN0aWxsIHVzZWQgaW4gYWxsb2MgcGF0aCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkCisgKiBmcm9tIGVhcmx5IGluaXQgcGF0aCAtIHNjaGVkX2luaXQoKSBzcGVjaWZpY2FsbHkuCiAgKgogICogRnJlZSBwYXRoIGFjY2Vzc2VzIGFuZCBhbHRlcnMgb25seSB0aGUgaW5kZXggZGF0YSBzdHJ1Y3R1cmVzLCBzbyBpdAogICogY2FuIGJlIHNhZmVseSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4gIFdoZW4gbWVtb3J5IG5lZWRzIHRvIGJlCkBAIC0zNjYsNyArMzY5LDcgQEAKICAqIFJFVFVSTlM6CiAgKiAwIGlmIG5vb3AsIDEgaWYgc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBwY3B1X2V4dGVuZF9hcmVhX21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJaW50IG5ld19hbGxvYzsKIAlpbnQgKm5ldzsKQEAgLTM3Niw3ICszNzksNyBAQAogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IGNodW5rLT5tYXBfdXNlZCArIDIpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgKmZsYWdzKTsKIAogCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKIAl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKQEAgLTM4NCw3ICszODcsNyBAQAogCiAJbmV3ID0gcGNwdV9tZW1fYWxsb2MobmV3X2FsbG9jICogc2l6ZW9mKG5ld1swXSkpOwogCWlmICghbmV3KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssICpmbGFncyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzkzLDcgKzM5Niw3IEBACiAJICogY291bGQgaGF2ZSBoYXBwZW5lZCBpbmJldHdlZW4sIHNvIG1hcF91c2VkIGNvdWxkbid0IGhhdmUKIAkgKiBncm93bi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssICpmbGFncyk7CiAJQlVHX09OKG5ld19hbGxvYyA8IGNodW5rLT5tYXBfdXNlZCArIDIpOwogCiAJc2l6ZSA9IGNodW5rLT5tYXBfYWxsb2MgKiBzaXplb2YoY2h1bmstPm1hcFswXSk7CkBAIC0xMDQ3LDYgKzEwNTAsNyBAQAogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKIAljb25zdCBjaGFyICplcnI7CiAJaW50IHNsb3QsIG9mZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFzaXplIHx8IHNpemUgPiBQQ1BVX01JTl9VTklUX1NJWkUgfHwgYWxpZ24gPiBQQUdFX1NJWkUpKSB7CiAJCVdBUk4odHJ1ZSwgImlsbGVnYWwgc2l6ZSAoJXp1KSBvciBhbGlnbiAoJXp1KSBmb3IgIgpAQCAtMTA1NSwxMyArMTA1OSwxMyBAQAogCX0KIAogCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogc2VydmUgcmVzZXJ2ZWQgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcmVzZXJ2ZWQgY2h1bmsgaWYgYXZhaWxhYmxlICovCiAJaWYgKHJlc2VydmVkICYmIHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKIAkJY2h1bmsgPSBwY3B1X3Jlc2VydmVkX2NodW5rOwogCQlpZiAoc2l6ZSA+IGNodW5rLT5jb250aWdfaGludCB8fAotCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspIDwgMCkgeworCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmssICZmbGFncykgPCAwKSB7CiAJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCBvZiByZXNlcnZlZCBjaHVuayI7CiAJCQlnb3RvIGZhaWxfdW5sb2NrOwogCQl9CkBAIC0xMDc5LDcgKzEwODMsNyBAQAogCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7CisJCQlzd2l0Y2ggKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCAmZmxhZ3MpKSB7CiAJCQljYXNlIDA6CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CkBAIC0xMDk2LDcgKzExMDAsNyBAQAogCX0KIAogCS8qIGhtbW0uLi4gbm8gc3BhY2UgbGVmdCwgY3JlYXRlIGEgbmV3IGNodW5rICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJY2h1bmsgPSBhbGxvY19wY3B1X2NodW5rKCk7CiAJaWYgKCFjaHVuaykgewpAQCAtMTEwNCwxNiArMTEwOCwxNiBAQAogCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKIAlnb3RvIHJlc3RhcnQ7CiAKIGFyZWFfZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KIAlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJCXBjcHVfZnJlZV9hcmVhKGNodW5rLCBvZmYpOwogCQllcnIgPSAiZmFpbGVkIHRvIHBvcHVsYXRlIjsKIAkJZ290byBmYWlsX3VubG9jazsKQEAgLTExMjUsNyArMTEyOSw3IEBACiAJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+YmFzZV9hZGRyICsgb2ZmKTsKIAogZmFpbF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogZmFpbF91bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKIAlpZiAod2Fybl9saW1pdCkgewpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggYTFiYzZiOS4uOWM1OTBlZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xMTUxLDggKzExNTEsNyBAQAogCQkJCX0gZWxzZQogCQkJCQlyZXR2YWwgPSB1bnVzZV9tbShtbSwgZW50cnksIHBhZ2UpOwogCi0JCQkJaWYgKHNldF9zdGFydF9tbSAmJgotCQkJCSAgICBzd2FwX2NvdW50KCpzd2FwX21hcCkgPCBzd2NvdW50KSB7CisJCQkJaWYgKHNldF9zdGFydF9tbSAmJiAqc3dhcF9tYXAgPCBzd2NvdW50KSB7CiAJCQkJCW1tcHV0KG5ld19zdGFydF9tbSk7CiAJCQkJCWF0b21pY19pbmMoJm1tLT5tbV91c2Vycyk7CiAJCQkJCW5ld19zdGFydF9tbSA9IG1tOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA2NGU0Mzg4OS4uNzc3YWY1NyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTU0NCw2ICs1NDQsMTYgQEAKIAkJICovCiAJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKIAkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKKwkJLyoKKwkJICogV2hlbiByYWNpbmcgd2l0aCBhbiBtbG9jayBjbGVhcmluZyAocGFnZSBpcworCQkgKiB1bmxvY2tlZCksIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBvdGhlciB0aHJlYWQgZG9lcworCQkgKiBub3Qgb2JzZXJ2ZSBvdXIgc2V0dGluZyBvZiBQR19scnUgYW5kIGZhaWxzCisJCSAqIGlzb2xhdGlvbiwgd2Ugc2VlIFBHX21sb2NrZWQgY2xlYXJlZCBiZWxvdyBhbmQgbW92ZQorCQkgKiB0aGUgcGFnZSBiYWNrIHRvIHRoZSBldmljdGFibGUgbGlzdC4KKwkJICoKKwkJICogVGhlIG90aGVyIHNpZGUgaXMgVGVzdENsZWFyUGFnZU1sb2NrZWQoKS4KKwkJICovCisJCXNtcF9tYigpOwogCX0KIAogCS8qCkBAIC0xMDg4LDcgKzEwOTgsNyBAQAogCWludCBsdW1weV9yZWNsYWltID0gMDsKIAogCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZCh6b25lLCBmaWxlLCBzYykpKSB7Ci0JCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTApOworCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi8xMCk7CiAKIAkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwogCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCkBAIC0xMzU2LDcgKzEzNjYsNyBAQAogCQkJICogSU8sIHBsdXMgSlZNIGNhbiBjcmVhdGUgbG90cyBvZiBhbm9uIFZNX0VYRUMgcGFnZXMsCiAJCQkgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLgogCQkJICovCi0JCQlpZiAoKHZtX2ZsYWdzICYgVk1fRVhFQykgJiYgIVBhZ2VBbm9uKHBhZ2UpKSB7CisJCQlpZiAoKHZtX2ZsYWdzICYgVk1fRVhFQykgJiYgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKSB7CiAJCQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmxfYWN0aXZlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCA1YmY1ZjIyLi44YWY5NWIyIDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC01ODIsMTEgKzU4Miw5IEBACiAKIAltZW1zZXQoJmZpZC0+cWlkLCAwLCBzaXplb2Yoc3RydWN0IHA5X3FpZCkpOwogCWZpZC0+bW9kZSA9IC0xOwotCWZpZC0+cmRpcl9mcG9zID0gMDsKIAlmaWQtPnVpZCA9IGN1cnJlbnRfZnN1aWQoKTsKIAlmaWQtPmNsbnQgPSBjbG50OwotCWZpZC0+YXV4ID0gTlVMTDsKLQorCWZpZC0+cmRpciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmZmlkLT5mbGlzdCwgJmNsbnQtPmZpZGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKQEAgLTYwOSw2ICs2MDcsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJmZpZC0+Zmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKKwlrZnJlZShmaWQtPnJkaXIpOwogCWtmcmVlKGZpZCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCBiMmUwN2YwLi5lYTFlM2RhIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb185cC5oPgogCiAjZGVmaW5lIFZJUlRRVUVVRV9OVU0JMTI4CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCA3ZjkzOWNlLi4yYmM2ZjZhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTkyLDYgKzkyLDggQEAKIAogCWRldl9zZXRfbmFtZSgmY29ubi0+ZGV2LCAiJXM6JWQiLCBoZGV2LT5uYW1lLCBjb25uLT5oYW5kbGUpOwogCisJZGV2X3NldF9kcnZkYXRhKCZjb25uLT5kZXYsIGNvbm4pOworCiAJaWYgKGRldmljZV9hZGQoJmNvbm4tPmRldikgPCAwKSB7CiAJCUJUX0VSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3Rpb24gZGV2aWNlIik7CiAJCXJldHVybjsKQEAgLTE0NCw4ICsxNDYsNiBAQAogCWNvbm4tPmRldi5jbGFzcyA9IGJ0X2NsYXNzOwogCWNvbm4tPmRldi5wYXJlbnQgPSAmaGRldi0+ZGV2OwogCi0JZGV2X3NldF9kcnZkYXRhKCZjb25uLT5kZXYsIGNvbm4pOwotCiAJZGV2aWNlX2luaXRpYWxpemUoJmNvbm4tPmRldik7CiAKIAlJTklUX1dPUksoJmNvbm4tPndvcmtfYWRkLCBhZGRfY29ubik7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggNTU1ZDlkYS4uNzdlOWZiMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNTU1LDEyICs1NTUsMTIgQEAKIAogCWNvbm4tPmZlYXRfbWFzayA9IDA7CiAKLQlzZXR1cF90aW1lcigmY29ubi0+aW5mb190aW1lciwgbDJjYXBfaW5mb190aW1lb3V0LAotCQkJCQkJKHVuc2lnbmVkIGxvbmcpIGNvbm4pOwotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmxvY2spOwogCXJ3bG9ja19pbml0KCZjb25uLT5jaGFuX2xpc3QubG9jayk7CiAKKwlzZXR1cF90aW1lcigmY29ubi0+aW5mb190aW1lciwgbDJjYXBfaW5mb190aW1lb3V0LAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpIGNvbm4pOworCiAJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOwogCiAJcmV0dXJuIGNvbm47CkBAIC03ODMsNiArNzgzLDkgQEAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCiAJcGktPmNvbmZfbGVuID0gMDsKIAlwaS0+Zmx1c2hfdG8gPSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKKwlJTklUX0xJU1RfSEVBRChTUkVKX0xJU1Qoc2spKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byBsMmNhcF9wcm90byA9IHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBiMWIzYjBmLi40YTlmNTI3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zNzcsMTIgKzM3NywxNiBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSyB8fCBkZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKQorCS8qIERvbid0IGFsbG93IGJyaWRnaW5nIG5vbi1ldGhlcm5ldCBsaWtlIGRldmljZXMgKi8KKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHx8CisJICAgIGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgZGV2LT5hZGRyX2xlbiAhPSBFVEhfQUxFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBObyBicmlkZ2luZyBvZiBicmlkZ2VzICovCiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQpCiAJCXJldHVybiAtRUxPT1A7CiAKKwkvKiBEZXZpY2UgaXMgYWxyZWFkeSBiZWluZyBicmlkZ2VkICovCiAJaWYgKGRldi0+YnJfcG9ydCAhPSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA1OTdkYTRmLi5lOGQ1OGYzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTEzMiwyMyArMTMyLDI3IEBACiAvKgogICogcHJvY2ZzIGZ1bmN0aW9ucwogICovCi1zdGF0aWMgY2hhciAqYmNtX3Byb2NfZ2V0aWZuYW1lKGludCBpZmluZGV4KQorc3RhdGljIGNoYXIgKmJjbV9wcm9jX2dldGlmbmFtZShjaGFyICpyZXN1bHQsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlpZiAoIWlmaW5kZXgpCiAJCXJldHVybiAiYW55IjsKIAotCS8qIG5vIHVzYWdlIGNvdW50aW5nICovCisJcmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKIAlpZiAoZGV2KQotCQlyZXR1cm4gZGV2LT5uYW1lOworCQlzdHJjcHkocmVzdWx0LCBkZXYtPm5hbWUpOworCWVsc2UKKwkJc3RyY3B5KHJlc3VsdCwgIj8/PyIpOworCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAotCXJldHVybiAiPz8/IjsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGJjbV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCWNoYXIgaWZuYW1lW0lGTkFNU0laXTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltLT5wcml2YXRlOwogCXN0cnVjdCBiY21fc29jayAqYm8gPSBiY21fc2soc2spOwogCXN0cnVjdCBiY21fb3AgKm9wOwpAQCAtMTU3LDcgKzE2MSw3IEBACiAJc2VxX3ByaW50ZihtLCAiIC8gc2sgJXAiLCBzayk7CiAJc2VxX3ByaW50ZihtLCAiIC8gYm8gJXAiLCBibyk7CiAJc2VxX3ByaW50ZihtLCAiIC8gZHJvcHBlZCAlbHUiLCBiby0+ZHJvcHBlZF91c3JfbXNncyk7Ci0Jc2VxX3ByaW50ZihtLCAiIC8gYm91bmQgJXMiLCBiY21fcHJvY19nZXRpZm5hbWUoYm8tPmlmaW5kZXgpKTsKKwlzZXFfcHJpbnRmKG0sICIgLyBib3VuZCAlcyIsIGJjbV9wcm9jX2dldGlmbmFtZShpZm5hbWUsIGJvLT5pZmluZGV4KSk7CiAJc2VxX3ByaW50ZihtLCAiIDw8PFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnJ4X29wcywgbGlzdCkgewpAQCAtMTY5LDcgKzE3Myw3IEBACiAJCQljb250aW51ZTsKIAogCQlzZXFfcHJpbnRmKG0sICJyeF9vcDogJTAzWCAlLTVzICIsCi0JCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKG9wLT5pZmluZGV4KSk7CisJCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKGlmbmFtZSwgb3AtPmlmaW5kZXgpKTsKIAkJc2VxX3ByaW50ZihtLCAiWyVkXSVjICIsIG9wLT5uZnJhbWVzLAogCQkJCShvcC0+ZmxhZ3MgJiBSWF9DSEVDS19ETEMpPydkJzonICcpOwogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCkBAIC0xOTQsNyArMTk4LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnR4X29wcywgbGlzdCkgewogCiAJCXNlcV9wcmludGYobSwgInR4X29wOiAlMDNYICVzIFslZF0gIiwKLQkJCQlvcC0+Y2FuX2lkLCBiY21fcHJvY19nZXRpZm5hbWUob3AtPmlmaW5kZXgpLAorCQkJCW9wLT5jYW5faWQsCisJCQkJYmNtX3Byb2NfZ2V0aWZuYW1lKGlmbmFtZSwgb3AtPmlmaW5kZXgpLAogCQkJCW9wLT5uZnJhbWVzKTsKIAogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCAxYzZjZjNhLi40YWRlMzAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTIyNCw2ICsyMjQsMTUgQEAKIAljb25zdW1lX3NrYihza2IpOwogCXNrX21lbV9yZWNsYWltX3BhcnRpYWwoc2spOwogfQorRVhQT1JUX1NZTUJPTChza2JfZnJlZV9kYXRhZ3JhbSk7CisKK3ZvaWQgc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlsb2NrX3NvY2soc2spOworCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworCXJlbGVhc2Vfc29jayhzayk7Cit9CitFWFBPUlRfU1lNQk9MKHNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZCk7CiAKIC8qKgogICoJc2tiX2tpbGxfZGF0YWdyYW0gLSBGcmVlIGEgZGF0YWdyYW0gc2tidWZmIGZvcmNpYmx5CkBAIC03NTIsNSArNzYxLDQgQEAKIEVYUE9SVF9TWU1CT0woZGF0YWdyYW1fcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKTsKIEVYUE9SVF9TWU1CT0woc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMpOwotRVhQT1JUX1NZTUJPTChza2JfZnJlZV9kYXRhZ3JhbSk7CiBFWFBPUlRfU1lNQk9MKHNrYl9yZWN2X2RhdGFncmFtKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggODZhY2RiYS4uNmViOGQ0NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTMzNSw2ICszMzUsNyBAQAogCV9fdTMyIGN1cl9zcmNfbWFjX29mZnNldDsKIAlfX2JlMzIgY3VyX3NhZGRyOwogCV9fYmUzMiBjdXJfZGFkZHI7CisJX191MTYgaXBfaWQ7CiAJX191MTYgY3VyX3VkcF9kc3Q7CiAJX191MTYgY3VyX3VkcF9zcmM7CiAJX191MTYgY3VyX3F1ZXVlX21hcDsKQEAgLTI2MzAsNiArMjYzMSw4IEBACiAJaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fVURQOwkvKiBVRFAgKi8KIAlpcGgtPnNhZGRyID0gcGt0X2Rldi0+Y3VyX3NhZGRyOwogCWlwaC0+ZGFkZHIgPSBwa3RfZGV2LT5jdXJfZGFkZHI7CisJaXBoLT5pZCA9IGh0b25zKHBrdF9kZXYtPmlwX2lkKTsKKwlwa3RfZGV2LT5pcF9pZCsrOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwbGVuID0gMjAgKyA4ICsgZGF0YWxlbjsKIAlpcGgtPnRvdF9sZW4gPSBodG9ucyhpcGxlbik7CkBAIC0yNjQxLDI0ICsyNjQ0LDI2IEBACiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAotCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkKKwlpZiAocGt0X2Rldi0+bmZyYWdzIDw9IDApIHsKIAkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopc2tiX3B1dChza2IsIGRhdGFsZW4pOwotCWVsc2UgeworCQltZW1zZXQocGdoICsgMSwgMCwgZGF0YWxlbiAtIHNpemVvZihzdHJ1Y3QgcGt0Z2VuX2hkcikpOworCX0gZWxzZSB7CiAJCWludCBmcmFncyA9IHBrdF9kZXYtPm5mcmFnczsKLQkJaW50IGk7CisJCWludCBpLCBsZW47CiAKIAkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopKCgoY2hhciAqKSh1ZHBoKSkgKyA4KTsKIAogCQlpZiAoZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKQogCQkJZnJhZ3MgPSBNQVhfU0tCX0ZSQUdTOwogCQlpZiAoZGF0YWxlbiA+IGZyYWdzICogUEFHRV9TSVpFKSB7Ci0JCQlza2JfcHV0KHNrYiwgZGF0YWxlbiAtIGZyYWdzICogUEFHRV9TSVpFKTsKKwkJCWxlbiA9IGRhdGFsZW4gLSBmcmFncyAqIFBBR0VfU0laRTsKKwkJCW1lbXNldChza2JfcHV0KHNrYiwgbGVuKSwgMCwgbGVuKTsKIAkJCWRhdGFsZW4gPSBmcmFncyAqIFBBR0VfU0laRTsKIAkJfQogCiAJCWkgPSAwOwogCQl3aGlsZSAoZGF0YWxlbiA+IDApIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHBhZ2U7CiAJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gMDsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKaW5kZXggMjZiMGFiMS4uMjAzNjU2OCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwpAQCAtMjYzLDExICsyNjMsMTAgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCiAJCXJ2ID0gLUVOT0RFVjsKLQkJaWYgKGRldi0+ZG5fcHRyICE9IE5VTEwpIHsKKwkJaWYgKGRldi0+ZG5fcHRyICE9IE5VTEwpCiAJCQlydiA9IGRuX2Rldl9zZXRfZGVmYXVsdChkZXYsIDEpOwotCQkJaWYgKHJ2KQotCQkJCWRldl9wdXQoZGV2KTsKLQkJfQorCQlpZiAocnYpCisJCQlkZXZfcHV0KGRldik7CiAJfQogCiAJcmV0dXJuIHJ2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCBlMmY5NTA1OS4uYWEwMDM5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTIyOSwxNCArMjI5LDE3IEBACiAgKi8KIAogaW50IGZpYl92YWxpZGF0ZV9zb3VyY2UoX19iZTMyIHNyYywgX19iZTMyIGRzdCwgdTggdG9zLCBpbnQgb2lmLAotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwgdTMyICppdGFnKQorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwKKwkJCXUzMiAqaXRhZywgdTMyIG1hcmspCiB7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBmbG93aSBmbCA9IHsgLm5sX3UgPSB7IC5pcDRfdSA9CiAJCQkJICAgICAgeyAuZGFkZHIgPSBzcmMsCiAJCQkJCS5zYWRkciA9IGRzdCwKIAkJCQkJLnRvcyA9IHRvcyB9IH0sCisJCQkgICAgLm1hcmsgPSBtYXJrLAogCQkJICAgIC5paWYgPSBvaWYgfTsKKwogCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKIAlpbnQgbm9fYWRkciwgcnBmOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA0MzUxY2EyLi41Mzc3MzFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTQ0Niw2ICs0NDYsMjggQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQpOwogCisvKiBEZWNpZGUgd2hlbiB0byBleHBpcmUgdGhlIHJlcXVlc3QgYW5kIHdoZW4gdG8gcmVzZW5kIFNZTi1BQ0sgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5fYWNrX3JlY2FsYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IGludCB0aHJlc2gsCisJCQkJICBjb25zdCBpbnQgbWF4X3JldHJpZXMsCisJCQkJICBjb25zdCB1OCByc2txX2RlZmVyX2FjY2VwdCwKKwkJCQkgIGludCAqZXhwaXJlLCBpbnQgKnJlc2VuZCkKK3sKKwlpZiAoIXJza3FfZGVmZXJfYWNjZXB0KSB7CisJCSpleHBpcmUgPSByZXEtPnJldHJhbnMgPj0gdGhyZXNoOworCQkqcmVzZW5kID0gMTsKKwkJcmV0dXJuOworCX0KKwkqZXhwaXJlID0gcmVxLT5yZXRyYW5zID49IHRocmVzaCAmJgorCQkgICghaW5ldF9yc2socmVxKS0+YWNrZWQgfHwgcmVxLT5yZXRyYW5zID49IG1heF9yZXRyaWVzKTsKKwkvKgorCSAqIERvIG5vdCByZXNlbmQgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBhZnRlciBBQ0ssCisJICogc3RhcnQgdG8gcmVzZW5kIG9uIGVuZCBvZiBkZWZlcnJpbmcgcGVyaW9kIHRvIGdpdmUKKwkgKiBsYXN0IGNoYW5jZSBmb3IgZGF0YSBvciBBQ0sgdG8gY3JlYXRlIGVzdGFibGlzaGVkIHNvY2tldC4KKwkgKi8KKwkqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktPmFja2VkIHx8CisJCSAgcmVxLT5yZXRyYW5zID49IHJza3FfZGVmZXJfYWNjZXB0IC0gMTsKK30KKwogdm9pZCBpbmV0X2Nza19yZXFza19xdWV1ZV9wcnVuZShzdHJ1Y3Qgc29jayAqcGFyZW50LAogCQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsCiAJCQkJY29uc3QgdW5zaWduZWQgbG9uZyB0aW1lb3V0LApAQCAtNTAxLDkgKzUyMywxNSBAQAogCQlyZXFwPSZsb3B0LT5zeW5fdGFibGVbaV07CiAJCXdoaWxlICgocmVxID0gKnJlcXApICE9IE5VTEwpIHsKIAkJCWlmICh0aW1lX2FmdGVyX2VxKG5vdywgcmVxLT5leHBpcmVzKSkgewotCQkJCWlmICgocmVxLT5yZXRyYW5zIDwgdGhyZXNoIHx8Ci0JCQkJICAgICAoaW5ldF9yc2socmVxKS0+YWNrZWQgJiYgcmVxLT5yZXRyYW5zIDwgbWF4X3JldHJpZXMpKQotCQkJCSAgICAmJiAhcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhwYXJlbnQsIHJlcSkpIHsKKwkJCQlpbnQgZXhwaXJlID0gMCwgcmVzZW5kID0gMDsKKworCQkJCXN5bl9hY2tfcmVjYWxjKHJlcSwgdGhyZXNoLCBtYXhfcmV0cmllcywKKwkJCQkJICAgICAgIHF1ZXVlLT5yc2txX2RlZmVyX2FjY2VwdCwKKwkJCQkJICAgICAgICZleHBpcmUsICZyZXNlbmQpOworCQkJCWlmICghZXhwaXJlICYmCisJCQkJICAgICghcmVzZW5kIHx8CisJCQkJICAgICAhcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhwYXJlbnQsIHJlcSkgfHwKKwkJCQkgICAgIGluZXRfcnNrKHJlcSktPmFja2VkKSkgewogCQkJCQl1bnNpZ25lZCBsb25nIHRpbWVvOwogCiAJCQkJCWlmIChyZXEtPnJldHJhbnMrKyA9PSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA0MWFkYTk5Li4xNDMzMzM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAKIAogCWV0aGVyX3NldHVwKGRldik7CiAKLQlkZXYtPm5ldGRldl9vcHMJCT0gJmlwZ3JlX25ldGRldl9vcHM7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZpcGdyZV90YXBfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IgCT0gZnJlZV9uZXRkZXY7CiAKIAlkZXYtPmlmbGluawkJPSAwOwpAQCAtMTUyNSwyNSArMTUyNSwyOSBAQAogCQlpZiAodC0+ZGV2ICE9IGRldikKIAkJCXJldHVybiAtRUVYSVNUOwogCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIG5mbGFncyA9IDA7Ci0KIAkJdCA9IG50OwogCi0JCWlmIChpcHY0X2lzX211bHRpY2FzdChwLmlwaC5kYWRkcikpCi0JCQluZmxhZ3MgPSBJRkZfQlJPQURDQVNUOwotCQllbHNlIGlmIChwLmlwaC5kYWRkcikKLQkJCW5mbGFncyA9IElGRl9QT0lOVE9QT0lOVDsKKwkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCXVuc2lnbmVkIG5mbGFncyA9IDA7CiAKLQkJaWYgKChkZXYtPmZsYWdzIF4gbmZsYWdzKSAmCi0JCSAgICAoSUZGX1BPSU5UT1BPSU5UIHwgSUZGX0JST0FEQ0FTVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcHY0X2lzX211bHRpY2FzdChwLmlwaC5kYWRkcikpCisJCQkJbmZsYWdzID0gSUZGX0JST0FEQ0FTVDsKKwkJCWVsc2UgaWYgKHAuaXBoLmRhZGRyKQorCQkJCW5mbGFncyA9IElGRl9QT0lOVE9QT0lOVDsKKworCQkJaWYgKChkZXYtPmZsYWdzIF4gbmZsYWdzKSAmCisJCQkgICAgKElGRl9QT0lOVE9QT0lOVCB8IElGRl9CUk9BRENBU1QpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKIAkJaXBncmVfdHVubmVsX3VubGluayhpZ24sIHQpOwogCQl0LT5wYXJtcy5pcGguc2FkZHIgPSBwLmlwaC5zYWRkcjsKIAkJdC0+cGFybXMuaXBoLmRhZGRyID0gcC5pcGguZGFkZHI7CiAJCXQtPnBhcm1zLmlfa2V5ID0gcC5pX2tleTsKLQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwLmlwaC5zYWRkciwgNCk7Ci0JCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJnAuaXBoLmRhZGRyLCA0KTsKKwkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCAmcC5pcGguc2FkZHIsIDQpOworCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmcC5pcGguZGFkZHIsIDQpOworCQl9CiAJCWlwZ3JlX3R1bm5lbF9saW5rKGlnbiwgdCk7CiAJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCAwYzBiNmUzLi5lOTgyYjVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTYzNCwxNyArNjM0LDE2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZXYgPSBpcF9kZXZfZmluZChzb2NrX25ldChzayksIG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyKTsKLQkJCWlmIChkZXYpIHsKKwkJCWlmIChkZXYpCiAJCQkJbXJlcS5pbXJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJCQlkZXZfcHV0KGRldik7Ci0JCQl9CiAJCX0gZWxzZQotCQkJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CiAKIAogCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKKwkJZGV2X3B1dChkZXYpOwogCiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggMDhjY2QzNC4uYWU0MGVkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDM4LDI1ICs0MzgsMjcgQEAKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKLQlpZiAodGlwaC0+ZnJhZ19vZmYpCisJZGYgfD0gb2xkX2lwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERik7CisKKwlpZiAoZGYpIHsKIAkJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCWVsc2UKLQkJbXR1ID0gc2tiX2RzdChza2IpID8gZHN0X210dShza2JfZHN0KHNrYikpIDogZGV2LT5tdHU7CiAKLQlpZiAobXR1IDwgNjgpIHsKLQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKLQkJaXBfcnRfcHV0KHJ0KTsKLQkJZ290byB0eF9lcnJvcjsKLQl9Ci0JaWYgKHNrYl9kc3Qoc2tiKSkKLQkJc2tiX2RzdChza2IpLT5vcHMtPnVwZGF0ZV9wbXR1KHNrYl9kc3Qoc2tiKSwgbXR1KTsKKwkJaWYgKG10dSA8IDY4KSB7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQkJaXBfcnRfcHV0KHJ0KTsKKwkJCWdvdG8gdHhfZXJyb3I7CisJCX0KIAotCWRmIHw9IChvbGRfaXBoLT5mcmFnX29mZiZodG9ucyhJUF9ERikpOworCQlpZiAoc2tiX2RzdChza2IpKQorCQkJc2tiX2RzdChza2IpLT5vcHMtPnVwZGF0ZV9wbXR1KHNrYl9kc3Qoc2tiKSwgbXR1KTsKIAotCWlmICgob2xkX2lwaC0+ZnJhZ19vZmYmaHRvbnMoSVBfREYpKSAmJiBtdHUgPCBudG9ocyhvbGRfaXBoLT50b3RfbGVuKSkgewotCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7Ci0JCWlwX3J0X3B1dChydCk7Ci0JCWdvdG8gdHhfZXJyb3I7CisJCWlmICgob2xkX2lwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpICYmCisJCSAgICBtdHUgPCBudG9ocyhvbGRfaXBoLT50b3RfbGVuKSkgeworCQkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsCisJCQkJICBodG9ubChtdHUpKTsKKwkJCWlwX3J0X3B1dChydCk7CisJCQlnb3RvIHR4X2Vycm9yOworCQl9CiAJfQogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCA2OGFmYzZlLi5mZTFhNjQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtNzUwLDYgKzc1MCw4IEBACiAJQlVHX09OKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayAhPSBOVUxMKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rLAogCQkJICAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cCk7CisJQlVHX09OKG5mX2N0X25hdF9vZmZzZXQgIT0gTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2N0X25hdF9vZmZzZXQsIG5mX25hdF9nZXRfb2Zmc2V0KTsKIAlyZXR1cm4gMDsKIAogIGNsZWFudXBfZXh0ZW5kOgpAQCAtNzY0LDYgKzc2Niw3IEBACiAJbmZfY3RfZXh0ZW5kX3VucmVnaXN0ZXIoJm5hdF9leHRlbmQpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2VxX2FkanVzdF9ob29rLCBOVUxMKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfbmF0X29mZnNldCwgTlVMTCk7CiAJc3luY2hyb25pemVfbmV0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCmluZGV4IDA5MTcyYTYuLmY5NTIwZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtNzMsNiArNzMsMjggQEAKIAlEVU1QX09GRlNFVCh0aGlzX3dheSk7CiB9CiAKKy8qIEdldCB0aGUgb2Zmc2V0IHZhbHVlLCBmb3IgY29ubnRyYWNrICovCitzMTYgbmZfbmF0X2dldF9vZmZzZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkgICAgICB1MzIgc2VxKQoreworCXN0cnVjdCBuZl9jb25uX25hdCAqbmF0ID0gbmZjdF9uYXQoY3QpOworCXN0cnVjdCBuZl9uYXRfc2VxICp0aGlzX3dheTsKKwlzMTYgb2Zmc2V0OworCisJaWYgKCFuYXQpCisJCXJldHVybiAwOworCisJdGhpc193YXkgPSAmbmF0LT5zZXFbZGlyXTsKKwlzcGluX2xvY2tfYmgoJm5mX25hdF9zZXFvZnNfbG9jayk7CisJb2Zmc2V0ID0gYWZ0ZXIoc2VxLCB0aGlzX3dheS0+Y29ycmVjdGlvbl9wb3MpCisJCSA/IHRoaXNfd2F5LT5vZmZzZXRfYWZ0ZXIgOiB0aGlzX3dheS0+b2Zmc2V0X2JlZm9yZTsKKwlzcGluX3VubG9ja19iaCgmbmZfbmF0X3NlcW9mc19sb2NrKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfZ2V0X29mZnNldCk7CisKIC8qIEZyb2JzIGRhdGEgaW5zaWRlIHRoaXMgcGFja2V0LCB3aGljaCBpcyBsaW5lYXIuICovCiBzdGF0aWMgdm9pZCBtYW5nbGVfY29udGVudHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKQEAgLTE4OSwxMSArMjExLDYgQEAKIAkJYWRqdXN0X3RjcF9zZXF1ZW5jZShudG9obCh0Y3BoLT5zZXEpLAogCQkJCSAgICAoaW50KXJlcF9sZW4gLSAoaW50KW1hdGNoX2xlbiwKIAkJCQkgICAgY3QsIGN0aW5mbyk7Ci0JCS8qIFRlbGwgVENQIHdpbmRvdyB0cmFja2luZyBhYm91dCBzZXEgY2hhbmdlICovCi0JCW5mX2Nvbm50cmFja190Y3BfdXBkYXRlKHNrYiwgaXBfaGRybGVuKHNrYiksCi0JCQkJCWN0LCBDVElORk8yRElSKGN0aW5mbyksCi0JCQkJCShpbnQpcmVwX2xlbiAtIChpbnQpbWF0Y2hfbGVuKTsKLQogCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9OQVRTRVFBREosIGN0KTsKIAl9CiAJcmV0dXJuIDE7CkBAIC00MTUsMTIgKzQzMiw3IEBACiAJdGNwaC0+c2VxID0gbmV3c2VxOwogCXRjcGgtPmFja19zZXEgPSBuZXdhY2s7CiAKLQlpZiAoIW5mX25hdF9zYWNrX2FkanVzdChza2IsIHRjcGgsIGN0LCBjdGluZm8pKQotCQlyZXR1cm4gMDsKLQotCW5mX2Nvbm50cmFja190Y3BfdXBkYXRlKHNrYiwgaXBfaGRybGVuKHNrYiksIGN0LCBkaXIsIHNlcW9mZik7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gbmZfbmF0X3NhY2tfYWRqdXN0KHNrYiwgdGNwaCwgY3QsIGN0aW5mbyk7CiB9CiAKIC8qIFNldHVwIE5BVCBvbiB0aGlzIGV4cGVjdGVkIGNvbm50cmFjayBzbyBpdCBmb2xsb3dzIG1hc3Rlci4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggNzU3YzkxNy4uYWI5OTZmOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTM1MiwxMyArMzUyLDI0IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiLT5uZXR3b3JrX2hlYWRlcjsKLQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjZW5kKCh2b2lkICopaXBoLCBmcm9tLCAwLCBsZW5ndGgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyb3JfZmF1bHQ7CisJZXJyID0gLUVGQVVMVDsKKwlpZiAobWVtY3B5X2Zyb21pb3ZlY2VuZCgodm9pZCAqKWlwaCwgZnJvbSwgMCwgbGVuZ3RoKSkKKwkJZ290byBlcnJvcl9mcmVlOwogCi0JLyogV2UgZG9uJ3QgbW9kaWZ5IGludmFsaWQgaGVhZGVyICovCiAJaXBobGVuID0gaXBoLT5paGwgKiA0OwotCWlmIChpcGhsZW4gPj0gc2l6ZW9mKCppcGgpICYmIGlwaGxlbiA8PSBsZW5ndGgpIHsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIGlwIGhlYWRlciwgYnV0IHdlIGRvIG5lZWQgdG8KKwkgKiBiZSBzdXJlIHRoYXQgaXQgd29uJ3QgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgYWxvbmcgdGhlIG5ldHdvcmsKKwkgKiBzdGFjay4gIFNwZWNpZmljYWxseSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGlwaC0+aWhsIGlzIGEKKwkgKiBzYW5lIHZhbHVlLiAgSWYgaWhsIHBvaW50cyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHBhc3NlZAorCSAqIGluLCByZWplY3QgdGhlIGZyYW1lIGFzIGludmFsaWQKKwkgKi8KKwllcnIgPSAtRUlOVkFMOworCWlmIChpcGhsZW4gPiBsZW5ndGgpCisJCWdvdG8gZXJyb3JfZnJlZTsKKworCWlmIChpcGhsZW4gPj0gc2l6ZW9mKCppcGgpKSB7CiAJCWlmICghaXBoLT5zYWRkcikKIAkJCWlwaC0+c2FkZHIgPSBydC0+cnRfc3JjOwogCQlpcGgtPmNoZWNrICAgPSAwOwpAQCAtMzgxLDggKzM5Miw3IEBACiBvdXQ6CiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZhdWx0OgotCWVyciA9IC1FRkFVTFQ7CitlcnJvcl9mcmVlOgogCWtmcmVlX3NrYihza2IpOwogZXJyb3I6CiAJSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggYmI0MTk5Mi4uNWIxMDUwYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xODU0LDcgKzE4NTQsNyBAQAogCQkJZ290byBlX2ludmFsOwogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAl9IGVsc2UgaWYgKGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIDAsIHRvcywgMCwKLQkJCQkJZGV2LCAmc3BlY19kc3QsICZpdGFnKSA8IDApCisJCQkJCWRldiwgJnNwZWNfZHN0LCAmaXRhZywgMCkgPCAwKQogCQlnb3RvIGVfaW52YWw7CiAKIAlydGggPSBkc3RfYWxsb2MoJmlwdjRfZHN0X29wcyk7CkBAIC0xOTY3LDcgKzE5NjcsNyBAQAogCiAKIAllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCBkYWRkciwgdG9zLCBGSUJfUkVTX09JRigqcmVzKSwKLQkJCQkgIGluX2Rldi0+ZGV2LCAmc3BlY19kc3QsICZpdGFnKTsKKwkJCQkgIGluX2Rldi0+ZGV2LCAmc3BlY19kc3QsICZpdGFnLCBza2ItPm1hcmspOwogCWlmIChlcnIgPCAwKSB7CiAJCWlwX2hhbmRsZV9tYXJ0aWFuX3NvdXJjZShpbl9kZXYtPmRldiwgaW5fZGV2LCBza2IsIGRhZGRyLAogCQkJCQkgc2FkZHIpOwpAQCAtMjE0MSw3ICsyMTQxLDcgQEAKIAkJaW50IHJlc3VsdDsKIAkJcmVzdWx0ID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgZGFkZHIsIHRvcywKIAkJCQkJICAgICBuZXQtPmxvb3BiYWNrX2Rldi0+aWZpbmRleCwKLQkJCQkJICAgICBkZXYsICZzcGVjX2RzdCwgJml0YWcpOworCQkJCQkgICAgIGRldiwgJnNwZWNfZHN0LCAmaXRhZywgc2tiLT5tYXJrKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIG1hcnRpYW5fc291cmNlOwogCQlpZiAocmVzdWx0KQpAQCAtMjE3MCw3ICsyMTcwLDcgQEAKIAkJc3BlY19kc3QgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfTElOSyk7CiAJZWxzZSB7CiAJCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIDAsIHRvcywgMCwgZGV2LCAmc3BlY19kc3QsCi0JCQkJCSAgJml0YWcpOworCQkJCQkgICZpdGFnLCBza2ItPm1hcmspOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gbWFydGlhbl9zb3VyY2U7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDY0ZDBhZjYuLjk4NDQwYWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMjYsNiArMzI2LDQzIEBACiAKIEVYUE9SVF9TWU1CT0wodGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZSk7CiAKKy8qIENvbnZlcnQgc2Vjb25kcyB0byByZXRyYW5zbWl0cyBiYXNlZCBvbiBpbml0aWFsIGFuZCBtYXggdGltZW91dCAqLworc3RhdGljIHU4IHNlY3NfdG9fcmV0cmFucyhpbnQgc2Vjb25kcywgaW50IHRpbWVvdXQsIGludCBydG9fbWF4KQoreworCXU4IHJlcyA9IDA7CisKKwlpZiAoc2Vjb25kcyA+IDApIHsKKwkJaW50IHBlcmlvZCA9IHRpbWVvdXQ7CisKKwkJcmVzID0gMTsKKwkJd2hpbGUgKHNlY29uZHMgPiBwZXJpb2QgJiYgcmVzIDwgMjU1KSB7CisJCQlyZXMrKzsKKwkJCXRpbWVvdXQgPDw9IDE7CisJCQlpZiAodGltZW91dCA+IHJ0b19tYXgpCisJCQkJdGltZW91dCA9IHJ0b19tYXg7CisJCQlwZXJpb2QgKz0gdGltZW91dDsKKwkJfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisvKiBDb252ZXJ0IHJldHJhbnNtaXRzIHRvIHNlY29uZHMgYmFzZWQgb24gaW5pdGlhbCBhbmQgbWF4IHRpbWVvdXQgKi8KK3N0YXRpYyBpbnQgcmV0cmFuc190b19zZWNzKHU4IHJldHJhbnMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heCkKK3sKKwlpbnQgcGVyaW9kID0gMDsKKworCWlmIChyZXRyYW5zID4gMCkgeworCQlwZXJpb2QgPSB0aW1lb3V0OworCQl3aGlsZSAoLS1yZXRyYW5zKSB7CisJCQl0aW1lb3V0IDw8PSAxOworCQkJaWYgKHRpbWVvdXQgPiBydG9fbWF4KQorCQkJCXRpbWVvdXQgPSBydG9fbWF4OworCQkJcGVyaW9kICs9IHRpbWVvdXQ7CisJCX0KKwl9CisJcmV0dXJuIHBlcmlvZDsKK30KKwogLyoKICAqCVdhaXQgZm9yIGEgVENQIGV2ZW50LgogICoKQEAgLTE0MDUsNyArMTQ0Miw5IEBACiAJCQkJZ290byBmb3VuZF9va19za2I7CiAJCQlpZiAodGNwX2hkcihza2IpLT5maW4pCiAJCQkJZ290byBmb3VuZF9maW5fb2s7Ci0JCQlXQVJOX09OKCEoZmxhZ3MgJiBNU0dfUEVFSykpOworCQkJV0FSTighKGZsYWdzICYgTVNHX1BFRUspLCBLRVJOX0lORk8gInJlY3Ztc2cgYnVnIDI6ICIKKwkJCQkJImNvcGllZCAlWCBzZXEgJVhcbiIsICpzZXEsCisJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKIAkJfQogCiAJCS8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi8KQEAgLTIxNjMsMTYgKzIyMDIsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRDUF9ERUZFUl9BQ0NFUFQ6Ci0JCWljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ID0gMDsKLQkJaWYgKHZhbCA+IDApIHsKLQkJCS8qIFRyYW5zbGF0ZSB2YWx1ZSBpbiBzZWNvbmRzIHRvIG51bWJlciBvZgotCQkJICogcmV0cmFuc21pdHMgKi8KLQkJCXdoaWxlIChpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA8IDMyICYmCi0JCQkgICAgICAgdmFsID4gKChUQ1BfVElNRU9VVF9JTklUIC8gSFopIDw8Ci0JCQkJICAgICAgIGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0KSkKLQkJCQlpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCsrOwotCQkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQrKzsKLQkJfQorCQkvKiBUcmFuc2xhdGUgdmFsdWUgaW4gc2Vjb25kcyB0byBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KKwkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPQorCQkJc2Vjc190b19yZXRyYW5zKHZhbCwgVENQX1RJTUVPVVRfSU5JVCAvIEhaLAorCQkJCQlUQ1BfUlRPX01BWCAvIEhaKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRDUF9XSU5ET1dfQ0xBTVA6CkBAIC0yMzUzLDggKzIzODYsOCBAQAogCQkJdmFsID0gKHZhbCA/IDogc3lzY3RsX3RjcF9maW5fdGltZW91dCkgLyBIWjsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfREVGRVJfQUNDRVBUOgotCQl2YWwgPSAhaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPyAwIDoKLQkJCSgoVENQX1RJTUVPVVRfSU5JVCAvIEhaKSA8PCAoaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgLSAxKSk7CisJCXZhbCA9IHJldHJhbnNfdG9fc2VjcyhpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCwKKwkJCQkgICAgICBUQ1BfVElNRU9VVF9JTklUIC8gSFosIFRDUF9SVE9fTUFYIC8gSFopOwogCQlicmVhazsKIAljYXNlIFRDUF9XSU5ET1dfQ0xBTVA6CiAJCXZhbCA9IHRwLT53aW5kb3dfY2xhbXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggNjI0YzNjOS4uNGMwMzU5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNjQxLDggKzY0MSw4IEBACiAJaWYgKCEoZmxnICYgVENQX0ZMQUdfQUNLKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBJZiBUQ1BfREVGRVJfQUNDRVBUIGlzIHNldCwgZHJvcCBiYXJlIEFDSy4gKi8KLQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCAmJgorCS8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqLworCWlmIChyZXEtPnJldHJhbnMgPCBpbmV0X2NzayhzayktPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ICYmCiAJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSA9PSB0Y3BfcnNrKHJlcSktPnJjdl9pc24gKyAxKSB7CiAJCWluZXRfcnNrKHJlcSktPmFja2VkID0gMTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDZlYzZhOGEuLjBmYTlmNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC04NDEsNiArODQxLDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorCisvKioKKyAqCWZpcnN0X3BhY2tldF9sZW5ndGgJLSByZXR1cm4gbGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBpbiByZWNlaXZlIHF1ZXVlCisgKglAc2s6IHNvY2tldAorICoKKyAqCURyb3BzIGFsbCBiYWQgY2hlY2tzdW0gZnJhbWVzLCB1bnRpbCBhIHZhbGlkIG9uZSBpcyBmb3VuZC4KKyAqCVJldHVybnMgdGhlIGxlbmd0aCBvZiBmb3VuZCBza2IsIG9yIDAgaWYgbm9uZSBpcyBmb3VuZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBmaXJzdF9wYWNrZXRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Rfa2lsbCwgKnJjdnEgPSAmc2stPnNrX3JlY2VpdmVfcXVldWU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZsaXN0X2tpbGwpOworCisJc3Bpbl9sb2NrX2JoKCZyY3ZxLT5sb2NrKTsKKwl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHJjdnEpKSAhPSBOVUxMICYmCisJCXVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgeworCQlVRFBfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVURQX01JQl9JTkVSUk9SUywKKwkJCQkgSVNfVURQTElURShzaykpOworCQlfX3NrYl91bmxpbmsoc2tiLCByY3ZxKTsKKwkJX19za2JfcXVldWVfdGFpbCgmbGlzdF9raWxsLCBza2IpOworCX0KKwlyZXMgPSBza2IgPyBza2ItPmxlbiA6IDA7CisJc3Bpbl91bmxvY2tfYmgoJnJjdnEtPmxvY2spOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJmxpc3Rfa2lsbCkpIHsKKwkJbG9ja19zb2NrKHNrKTsKKwkJX19za2JfcXVldWVfcHVyZ2UoJmxpc3Rfa2lsbCk7CisJCXNrX21lbV9yZWNsYWltX3BhcnRpYWwoc2spOworCQlyZWxlYXNlX3NvY2soc2spOworCX0KKwlyZXR1cm4gcmVzOworfQorCiAvKgogICoJSU9DVEwgcmVxdWVzdHMgYXBwbGljYWJsZSB0byB0aGUgVURQIHByb3RvY29sCiAgKi8KQEAgLTg1NywyMSArODkzLDE2IEBACiAKIAljYXNlIFNJT0NJTlE6CiAJewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQl1bnNpZ25lZCBsb25nIGFtb3VudDsKKwkJdW5zaWduZWQgaW50IGFtb3VudCA9IGZpcnN0X3BhY2tldF9sZW5ndGgoc2spOwogCi0JCWFtb3VudCA9IDA7Ci0JCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCWlmIChza2IgIT0gTlVMTCkgeworCQlpZiAoYW1vdW50KQogCQkJLyoKIAkJCSAqIFdlIHdpbGwgb25seSByZXR1cm4gdGhlIGFtb3VudAogCQkJICogb2YgdGhpcyBwYWNrZXQgc2luY2UgdGhhdCBpcyBhbGwKIAkJCSAqIHRoYXQgd2lsbCBiZSByZWFkLgogCQkJICovCi0JCQlhbW91bnQgPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJCQlhbW91bnQgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCiAJCXJldHVybiBwdXRfdXNlcihhbW91bnQsIChpbnQgX191c2VyICopYXJnKTsKIAl9CiAKQEAgLTk2OCw5ICs5OTksNyBAQAogCQllcnIgPSB1bGVuOwogCiBvdXRfZnJlZToKLQlsb2NrX3NvY2soc2spOwotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwotCXJlbGVhc2Vfc29jayhzayk7CisJc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHNrLCBza2IpOwogb3V0OgogCXJldHVybiBlcnI7CiAKQEAgLTE1NDAsMjkgKzE1NjksMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IGRhdGFncmFtX3BvbGwoZmlsZSwgc29jaywgd2FpdCk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JaW50IAlpc19saXRlID0gSVNfVURQTElURShzayk7CiAKIAkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBjaGVja3N1bSBlcnJvcnMgKi8KLQlpZiAoKG1hc2sgJiBQT0xMUkROT1JNKSAmJgotCSAgICAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJgotCSAgICAhKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpIHsKLQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcmN2cSA9ICZzay0+c2tfcmVjZWl2ZV9xdWV1ZTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQlzcGluX2xvY2tfYmgoJnJjdnEtPmxvY2spOwotCQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHJjdnEpKSAhPSBOVUxMICYmCi0JCSAgICAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCVVEUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLAotCQkJCQlVRFBfTUlCX0lORVJST1JTLCBpc19saXRlKTsKLQkJCV9fc2tiX3VubGluayhza2IsIHJjdnEpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnJjdnEtPmxvY2spOwotCi0JCS8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCi0JCWlmIChza2IgPT0gTlVMTCkKLQkJCW1hc2sgJj0gfihQT0xMSU4gfCBQT0xMUkROT1JNKTsKLQl9CisJaWYgKChtYXNrICYgUE9MTFJETk9STSkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYKKwkgICAgIShzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pICYmICFmaXJzdF9wYWNrZXRfbGVuZ3RoKHNrKSkKKwkJbWFzayAmPSB+KFBPTExJTiB8IFBPTExSRE5PUk0pOwogCiAJcmV0dXJuIG1hc2s7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCAxNGY1NGViLi40ZjdhYWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC00OTYsMTMgKzQ5NiwxNyBAQAogCQkJZ290byBlX2ludmFsOwogCiAJCWlmICh2YWwpIHsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKIAkJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIHNrLT5za19ib3VuZF9kZXZfaWYgIT0gdmFsKQogCQkJCWdvdG8gZV9pbnZhbDsKIAotCQkJaWYgKF9fZGV2X2dldF9ieV9pbmRleChuZXQsIHZhbCkgPT0gTlVMTCkgeworCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIHZhbCk7CisJCQlpZiAoIWRldikgewogCQkJCXJldHYgPSAtRU5PREVWOwogCQkJCWJyZWFrOwogCQkJfQorCQkJZGV2X3B1dChkZXYpOwogCQl9CiAJCW5wLT5tY2FzdF9vaWYgPSB2YWw7CiAJCXJldHYgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCAzYTYwZjEyLi5jZjUzOGVkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMjg4LDkgKzI4OCw3IEBACiAJCWVyciA9IHVsZW47CiAKIG91dF9mcmVlOgotCWxvY2tfc29jayhzayk7Ci0Jc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKKwlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc2ssIHNrYik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IGJkNzY1ZjMuLmIwOTk0OGMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTY2NiwyNiArNjY2LDI1IEBACiAKIAlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CiAKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKwogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm47Ci0JfQorCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKQorCQlnb3RvIHRpbWVyX3N0aWxsX25lZWRlZDsKIAogCWlmIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuICE9CiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAid3JvbmcgYWRkQkEgcmVzcG9uc2UgdG9rZW4sIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJcmV0dXJuOworCQlnb3RvIHRpbWVyX3N0aWxsX25lZWRlZDsKIAl9CiAKLQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCiAJaWYgKGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5zdGF0dXMpCiAJCQk9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAJCXU4IGN1cnN0YXRlID0gKnN0YXRlOwpAQCAtNjk5LDUgKzY5OCwxMSBAQAogCX0gZWxzZSB7CiAJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19JTklUSUFUT1IpOwogCX0KKworCWdvdG8gb3V0OworCisgdGltZXJfc3RpbGxfbmVlZGVkOgorCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggNTYwOGY2Yy4uN2I1MTMxYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNzIsNiArNzIsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCByZXQ7CiAKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCiAJaWYgKCFubDgwMjExX3R5cGVfY2hlY2sodHlwZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC04MSw5ICs4NCw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX3NkYXRhX3NldF9tZXNoX2lkKHNkYXRhLAogCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkX2xlbiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggMDg5MWJmYi4uNDhlZjFhMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJkZWxiYSBmcm9tICVwTSAoJXMpIHRpZCAlZCByZWFzb24gY29kZSAlZFxuIiwKIAkJCW1nbXQtPnNhLCBpbml0aWF0b3IgPyAiaW5pdGlhdG9yIiA6ICJyZWNpcGllbnQiLCB0aWQsCi0JCQltZ210LT51LmFjdGlvbi51LmRlbGJhLnJlYXNvbl9jb2RlKTsKKwkJCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUpKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAogCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX0lOSVRJQVRPUikKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDkyMGVjODcuLmYxMzYyZjMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNzMsNiArNzMsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1OCAqcG9zOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKIAl1MzIgYnNzX2NoYW5nZTsKIAl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CiAKQEAgLTE3Nyw4ICsxNzgsOSBAQAogCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwKIAkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCkpOwogCi0JY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCi0JCQkJICBtZ210LCBza2ItPmxlbiwgMCwgR0ZQX0tFUk5FTCk7CisJYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCisJCQkJCW1nbXQsIHNrYi0+bGVuLCAwLCBHRlBfS0VSTkVMKTsKKwljZmc4MDIxMV9wdXRfYnNzKGJzcyk7CiAJY2ZnODAyMTFfaWJzc19qb2luZWQoc2RhdGEtPmRldiwgaWZpYnNzLT5ic3NpZCwgR0ZQX0tFUk5FTCk7CiB9CiAKQEAgLTUzOCwxMyArNTQwLDEyIEBACiAJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZLAogCQkJCSAgICAgICBjYXBhYmlsaXR5KTsKIAorCWlmIChic3MpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCWlmIChic3MpCiAJCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCiAJCSAgICAgICAiJXBNXG4iLCBic3MtPmNic3MuYnNzaWQsIGlmaWJzcy0+YnNzaWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAKLQlpZiAoYnNzICYmIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgogCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOwpAQCAtNTUyLDggKzU1Myw3IEBACiAJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOwogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAkJcmV0dXJuOwotCX0gZWxzZSBpZiAoYnNzKQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOwpAQCAtODI5LDcgKzgyOSw3IEBACiAJCWlmICghc2RhdGEtPnUuaWJzcy5zc2lkX2xlbikKIAkJCWNvbnRpbnVlOwogCQlzZGF0YS0+dS5pYnNzLmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwotCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJCW1vZF90aW1lcigmc2RhdGEtPnUuaWJzcy50aW1lciwgMCk7CiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IGUxMmE3ODYuLjI5YjgyZTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogICogQGh3bXBfaWU6IGh3bXAgaW5mb3JtYXRpb24gZWxlbWVudCAoUFJFUCBvciBQUkVRKQogICoKICAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcGF0aCByb3V0aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBvcmlnaW5hdG9yIGFuZCB0aGUKLSAqIHRyYW5zbWl0dGVyIG9mIGEgSFdNUCBQUkVRIG9yIFBSRVAgZnJhbS4KKyAqIHRyYW5zbWl0dGVyIG9mIGEgSFdNUCBQUkVRIG9yIFBSRVAgZnJhbWUuCiAgKgogICogUmV0dXJuczogbWV0cmljIHRvIGZyYW1lIG9yaWdpbmF0b3Igb3IgMCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSBmdXJ0aGVyCiAgKiBwcm9jZXNzZWQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDhkMjZlOWIuLmRjNTA0OWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTQ1Nyw4ICsxNDU3LDcgQEAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7Ci0JCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCWtmcmVlKHdrKTsKKwkJd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFOwogCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggYzAxNTg4Zi4uNzE3MGJmNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTIxNjQsMTEgKzIxNjQsMTcgQEAKIAogCXNrYiA9IHJ4LnNrYjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwlpZiAocnguc2RhdGEgJiYgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7CisJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMocnguc2RhdGEsICZyeCwgaGRyKTsKKwkJaWYgKHByZXBhcmVzKQorCQkJcHJldiA9IHJ4LnNkYXRhOworCX0gZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJCWNvbnRpbnVlOwogCiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTI0NDcsNiArMjQ1Myw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCisJV0FSTl9PTl9PTkNFKHNvZnRpcnFfY291bnQoKSA9PSAwKTsKKwogCWlmIChXQVJOX09OKHN0YXR1cy0+YmFuZCA8IDAgfHwKIAkJICAgIHN0YXR1cy0+YmFuZCA+PSBJRUVFODAyMTFfTlVNX0JBTkRTKSkKIAkJZ290byBkcm9wOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBlZWMwMDE0Li41OTRmMjMxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMzYxLDYgKzM2MSw3IEBACiAJCQkJCSAgICAgdS5hcCk7CiAKIAkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKKwkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCkBAIC00OTYsNiArNDk3LDcgQEAKIAogCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfUkVNT1ZFLAogCQkJICAgICAgICYoKnN0YSktPnN0YSk7CisJCXNkYXRhID0gKCpzdGEpLT5zZGF0YTsKIAl9CiAKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBmZDQwMjgyLi5lYWE0MTE4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAKIAkJCQlpZiAodG1wX3NkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPmRldi0+ZGV2X2FkZHIsCi0JCQkJCQkgICAgICAgaGRyLT5hZGRyMikpIHsKKwkJCQkJCSAgICAgICBoZHItPmFkZHIyKSA9PSAwKSB7CiAJCQkJCWRldl9ob2xkKHRtcF9zZGF0YS0+ZGV2KTsKIAkJCQkJZGV2X3B1dChzZGF0YS0+ZGV2KTsKIAkJCQkJc2RhdGEgPSB0bXBfc2RhdGE7CkBAIC0xNzA0LDcgKzE3MDQsOCBAQAogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLmFkZHIxKSkgewogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLmFkZHIxKTsKLQkJaWYgKHN0YSkKKwkJLyogWFhYOiBpbiB0aGUgZnV0dXJlLCB1c2Ugc2RhdGEgdG8gbG9vayB1cCB0aGUgc3RhICovCisJCWlmIChzdGEgJiYgc3RhLT5zZGF0YSA9PSBzZGF0YSkKIAkJCXN0YV9mbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZGQ2NTY0My4uYWViNjViMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0zMzksNyArMzM5LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlpZiAoV0FSTl9PTighaW5mby0+Y29udHJvbC52aWYpKSB7Ci0JCWtmcmVlKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCiAJCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKLQkJCWtmcmVlKHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjYTZlNjhkLi5iOTE2OGMxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0xMzUxLDYgKzEzNTEsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzMTYgKCpuZl9jdF9uYXRfb2Zmc2V0KShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkJdTMyIHNlcSk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9uYXRfb2Zmc2V0KTsKKwogaW50IG5mX2Nvbm50cmFja19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgcmV0OwpAQCAtMTM2OCw2ICsxMzczLDkgQEAKIAkJLyogRm9yIHVzZSBieSBSRUpFQ1QgdGFyZ2V0ICovCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9jdF9hdHRhY2gsIG5mX2Nvbm50cmFja19hdHRhY2gpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfZGVzdHJveSwgZGVzdHJveV9jb25udHJhY2spOworCisJCS8qIEhvd3RvIGdldCBOQVQgb2Zmc2V0cyAqLworCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfbmF0X29mZnNldCwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDk3YTgyYmEuLmJhMmI3NjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC00OTIsNiArNDkyLDIxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKK3N0YXRpYyBpbmxpbmUgczE2IG5hdF9vZmZzZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkJICAgICB1MzIgc2VxKQoreworCXR5cGVvZihuZl9jdF9uYXRfb2Zmc2V0KSBnZXRfb2Zmc2V0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX2N0X25hdF9vZmZzZXQpOworCisJcmV0dXJuIGdldF9vZmZzZXQgIT0gTlVMTCA/IGdldF9vZmZzZXQoY3QsIGRpciwgc2VxKSA6IDA7Cit9CisjZGVmaW5lIE5BVF9PRkZTRVQocGYsIGN0LCBkaXIsIHNlcSkgXAorCShwZiA9PSBORlBST1RPX0lQVjQgPyBuYXRfb2Zmc2V0KGN0LCBkaXIsIHNlcSkgOiAwKQorI2Vsc2UKKyNkZWZpbmUgTkFUX09GRlNFVChwZiwgY3QsIGRpciwgc2VxKQkwCisjZW5kaWYKKwogc3RhdGljIGJvb2wgdGNwX2luX3dpbmRvdyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgIHN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlLAogCQkJICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLApAQCAtNTA2LDYgKzUyMSw3IEBACiAJc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqcmVjZWl2ZXIgPSAmc3RhdGUtPnNlZW5bIWRpcl07CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUgPSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlOwogCV9fdTMyIHNlcSwgYWNrLCBzYWNrLCBlbmQsIHdpbiwgc3dpbjsKKwlzMTYgcmVjZWl2ZXJfb2Zmc2V0OwogCWJvb2wgcmVzOwogCiAJLyoKQEAgLTUxOSwxMSArNTM1LDE2IEBACiAJaWYgKHJlY2VpdmVyLT5mbGFncyAmIElQX0NUX1RDUF9GTEFHX1NBQ0tfUEVSTSkKIAkJdGNwX3NhY2soc2tiLCBkYXRhb2ZmLCB0Y3BoLCAmc2Fjayk7CiAKKwkvKiBUYWtlIGludG8gYWNjb3VudCBOQVQgc2VxdWVuY2UgbnVtYmVyIG1hbmdsaW5nICovCisJcmVjZWl2ZXJfb2Zmc2V0ID0gTkFUX09GRlNFVChwZiwgY3QsICFkaXIsIGFjayAtIDEpOworCWFjayAtPSByZWNlaXZlcl9vZmZzZXQ7CisJc2FjayAtPSByZWNlaXZlcl9vZmZzZXQ7CisKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogU1RBUlRcbiIpOwogCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiAiKTsKIAluZl9jdF9kdW1wX3R1cGxlKHR1cGxlKTsKLQlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSBzYWNrPSV1IHdpbj0ldSBlbmQ9JXVcbiIsCi0JCSBzZXEsIGFjaywgc2Fjaywgd2luLCBlbmQpOworCXByX2RlYnVnKCJzZXE9JXUgYWNrPSV1KyglZCkgc2Fjaz0ldSsoJWQpIHdpbj0ldSBlbmQ9JXVcbiIsCisJCSBzZXEsIGFjaywgcmVjZWl2ZXJfb2Zmc2V0LCBzYWNrLCByZWNlaXZlcl9vZmZzZXQsIHdpbiwgZW5kKTsKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKIAkJICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKIAkJIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCkBAIC02MTMsOCArNjM0LDggQEAKIAogCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiAiKTsKIAluZl9jdF9kdW1wX3R1cGxlKHR1cGxlKTsKLQlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSBzYWNrID0ldSB3aW49JXUgZW5kPSV1XG4iLAotCQkgc2VxLCBhY2ssIHNhY2ssIHdpbiwgZW5kKTsKKwlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSsoJWQpIHNhY2s9JXUrKCVkKSB3aW49JXUgZW5kPSV1XG4iLAorCQkgc2VxLCBhY2ssIHJlY2VpdmVyX29mZnNldCwgc2FjaywgcmVjZWl2ZXJfb2Zmc2V0LCB3aW4sIGVuZCk7CiAJcHJfZGVidWcoInRjcF9pbl93aW5kb3c6IHNlbmRlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laSAiCiAJCSAicmVjZWl2ZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWlcbiIsCiAJCSBzZW5kZXItPnRkX2VuZCwgc2VuZGVyLT50ZF9tYXhlbmQsIHNlbmRlci0+dGRfbWF4d2luLApAQCAtNzAwLDcgKzcyMSw3IEBACiAJCQliZWZvcmUoc2VxLCBzZW5kZXItPnRkX21heGVuZCArIDEpID8KIAkJCWFmdGVyKGVuZCwgc2VuZGVyLT50ZF9lbmQgLSByZWNlaXZlci0+dGRfbWF4d2luIC0gMSkgPwogCQkJYmVmb3JlKHNhY2ssIHJlY2VpdmVyLT50ZF9lbmQgKyAxKSA/Ci0JCQlhZnRlcihhY2ssIHJlY2VpdmVyLT50ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSkgPyAiQlVHIgorCQkJYWZ0ZXIoc2FjaywgcmVjZWl2ZXItPnRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkgPyAiQlVHIgogCQkJOiAiQUNLIGlzIHVuZGVyIHRoZSBsb3dlciBib3VuZCAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQgQUNLKSIKIAkJCTogIkFDSyBpcyBvdmVyIHRoZSB1cHBlciBib3VuZCAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpIgogCQkJOiAiU0VRIGlzIHVuZGVyIHRoZSBsb3dlciBib3VuZCAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpIgpAQCAtNzE1LDM5ICs3MzYsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAotLyogVXBkYXRlIHNlbmRlci0+dGRfZW5kIGFmdGVyIE5BVCBzdWNjZXNzZnVsbHkgbWFuZ2xlZCB0aGUgcGFja2V0ICovCi0vKiBDYWxsZXIgbXVzdCBsaW5lYXJpemUgc2tiIGF0IHRjcCBoZWFkZXIuICovCi12b2lkIG5mX2Nvbm50cmFja190Y3BfdXBkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGludCBkaXIsCi0JCQkgICAgIHMxNiBvZmZzZXQpCi17Ci0JY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCA9IChjb25zdCB2b2lkICopc2tiLT5kYXRhICsgZGF0YW9mZjsKLQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl07Ci0JY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqcmVjZWl2ZXIgPSAmY3QtPnByb3RvLnRjcC5zZWVuWyFkaXJdOwotCV9fdTMyIGVuZDsKLQotCWVuZCA9IHNlZ21lbnRfc2VxX3BsdXNfbGVuKG50b2hsKHRjcGgtPnNlcSksIHNrYi0+bGVuLCBkYXRhb2ZmLCB0Y3BoKTsKLQotCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwotCS8qCi0JICogV2UgaGF2ZSB0byB3b3JyeSBmb3IgdGhlIGFjayBpbiB0aGUgcmVwbHkgcGFja2V0IG9ubHkuLi4KLQkgKi8KLQlpZiAoY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kICsgb2Zmc2V0ID09IGVuZCkKLQkJY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kID0gZW5kOwotCWN0LT5wcm90by50Y3AubGFzdF9lbmQgPSBlbmQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJmN0LT5sb2NrKTsKLQlwcl9kZWJ1ZygidGNwX3VwZGF0ZTogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKLQkJICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKLQkJIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCi0JCSBzZW5kZXItPnRkX3NjYWxlLAotCQkgcmVjZWl2ZXItPnRkX2VuZCwgcmVjZWl2ZXItPnRkX21heGVuZCwgcmVjZWl2ZXItPnRkX21heHdpbiwKLQkJIHJlY2VpdmVyLT50ZF9zY2FsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfdGNwX3VwZGF0ZSk7Ci0jZW5kaWYKLQogI2RlZmluZQlUSF9GSU4JMHgwMQogI2RlZmluZQlUSF9TWU4JMHgwMgogI2RlZmluZQlUSF9SU1QJMHgwNApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKaW5kZXggNjgwOTgwOS4uMzhmMDNmNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwKIAkJICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICptYXNrLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKQorCQkgICAgICB1X2ludDhfdCBmYW1pbHkpCiB7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpmb3VuZDsKIAlzdHJ1Y3QgeHRfY29ubmxpbWl0X2Nvbm4gKmNvbm47CkBAIC0xMTMsOCArMTEzLDcgQEAKIAlib29sIGFkZGl0ID0gdHJ1ZTsKIAlpbnQgbWF0Y2hlcyA9IDA7CiAKLQotCWlmIChtYXRjaC0+ZmFtaWx5ID09IE5GUFJPVE9fSVBWNikKKwlpZiAoZmFtaWx5ID09IE5GUFJPVE9fSVBWNikKIAkJaGFzaCA9ICZkYXRhLT5pcGhhc2hbY29ubmxpbWl0X2lwaGFzaDYoYWRkciwgbWFzayldOwogCWVsc2UKIAkJaGFzaCA9ICZkYXRhLT5pcGhhc2hbY29ubmxpbWl0X2lwaGFzaChhZGRyLT5pcCAmIG1hc2stPmlwKV07CkBAIC0xNTcsOCArMTU2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNhbWVfc291cmNlX25ldChhZGRyLCBtYXNrLCAmY29ubi0+dHVwbGUuc3JjLnUzLAotCQkgICAgbWF0Y2gtPmZhbWlseSkpCisJCWlmIChzYW1lX3NvdXJjZV9uZXQoYWRkciwgbWFzaywgJmNvbm4tPnR1cGxlLnNyYy51MywgZmFtaWx5KSkKIAkJCS8qIHNhbWUgc291cmNlIG5ldHdvcmsgLT4gYmUgY291bnRlZCEgKi8KIAkJCSsrbWF0Y2hlczsKIAkJbmZfY3RfcHV0KGZvdW5kX2N0KTsKQEAgLTIwNyw3ICsyMDUsNyBAQAogCiAJc3Bpbl9sb2NrX2JoKCZpbmZvLT5kYXRhLT5sb2NrKTsKIAljb25uZWN0aW9ucyA9IGNvdW50X3RoZW0oaW5mby0+ZGF0YSwgdHVwbGVfcHRyLCAmYWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgJmluZm8tPm1hc2ssIHBhci0+bWF0Y2gpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mby0+bWFzaywgcGFyLT5mYW1pbHkpOwogCXNwaW5fdW5sb2NrX2JoKCZpbmZvLT5kYXRhLT5sb2NrKTsKIAogCWlmIChjb25uZWN0aW9ucyA8IDApIHsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGQ3ZWNjYTAuLmYyZDExNmEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtOTgyLDEwICs5ODIsNyBAQAogCQlnb3RvIG91dF9wdXQ7CiAKIAlzaXplX21heCA9IHBvLT50eF9yaW5nLmZyYW1lX3NpemUKLQkJLSBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykKLQkJLSBwby0+dHBfaGRybGVuCi0JCS0gTExfQUxMT0NBVEVEX1NQQUNFKGRldikKLQkJLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKTsKKwkJLSAocG8tPnRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTsKIAogCWlmIChzaXplX21heCA+IGRldi0+bXR1ICsgcmVzZXJ2ZSkKIAkJc2l6ZV9tYXggPSBkZXYtPm10dSArIHJlc2VydmU7CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKaW5kZXggOTQ3OGQ5Yi4uZjNlMjE5OCAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCisrKyBiL25ldC9yb3NlL3Jvc2Vfcm91dGUuYwpAQCAtNTc4LDE4ICs1NzgsMTggQEAKIAogLyoKICAqCUNoZWNrIHRoYXQgdGhlIGRldmljZSBnaXZlbiBpcyBhIHZhbGlkIEFYLjI1IGludGVyZmFjZSB0aGF0IGlzICJ1cCIuCisgKiAJY2FsbGVkIHdoaXRoIFJUTkwKICAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpyb3NlX2F4MjVfZGV2X2dldChjaGFyICpkZXZuYW1lKQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpyb3NlX2F4MjVfZGV2X2ZpbmQoY2hhciAqZGV2bmFtZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JaWYgKChkZXYgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBkZXZuYW1lKSkgPT0gTlVMTCkKKwlpZiAoKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgZGV2bmFtZSkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBkZXYtPnR5cGUgPT0gQVJQSFJEX0FYMjUpCiAJCXJldHVybiBkZXY7CiAKLQlkZXZfcHV0KGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTcyMCwyNyArNzIwLDIzIEBACiAJY2FzZSBTSU9DQUREUlQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcm9zZV9yb3V0ZSwgYXJnLCBzaXplb2Yoc3RydWN0IHJvc2Vfcm91dGVfc3RydWN0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKChkZXYgPSByb3NlX2F4MjVfZGV2X2dldChyb3NlX3JvdXRlLmRldmljZSkpID09IE5VTEwpCisJCWlmICgoZGV2ID0gcm9zZV9heDI1X2Rldl9maW5kKHJvc2Vfcm91dGUuZGV2aWNlKSkgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAocm9zZV9kZXZfZXhpc3RzKCZyb3NlX3JvdXRlLmFkZHJlc3MpKSB7IC8qIENhbid0IGFkZCByb3V0ZXMgdG8gb3Vyc2VsZiAqLwotCQkJZGV2X3B1dChkZXYpOworCQlpZiAocm9zZV9kZXZfZXhpc3RzKCZyb3NlX3JvdXRlLmFkZHJlc3MpKSAvKiBDYW4ndCBhZGQgcm91dGVzIHRvIG91cnNlbGYgKi8KIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWlmIChyb3NlX3JvdXRlLm1hc2sgPiAxMCkgLyogTWFzayBjYW4ndCBiZSBtb3JlIHRoYW4gMTAgZGlnaXRzICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHJvc2Vfcm91dGUubmRpZ2lzID4gQVgyNV9NQVhfRElHSVMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZXJyID0gcm9zZV9hZGRfbm9kZSgmcm9zZV9yb3V0ZSwgZGV2KTsKLQkJZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gZXJyOwogCiAJY2FzZSBTSU9DREVMUlQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcm9zZV9yb3V0ZSwgYXJnLCBzaXplb2Yoc3RydWN0IHJvc2Vfcm91dGVfc3RydWN0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKChkZXYgPSByb3NlX2F4MjVfZGV2X2dldChyb3NlX3JvdXRlLmRldmljZSkpID09IE5VTEwpCisJCWlmICgoZGV2ID0gcm9zZV9heDI1X2Rldl9maW5kKHJvc2Vfcm91dGUuZGV2aWNlKSkgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQllcnIgPSByb3NlX2RlbF9ub2RlKCZyb3NlX3JvdXRlLCBkZXYpOwotCQlkZXZfcHV0KGRldik7CiAJCXJldHVybiBlcnI7CiAKIAljYXNlIFNJT0NSU0NMUlJUOgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDk2YzBlZDEuLjZiMDM1OWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTM0LDcgKzM0LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwZWRpdF9wb2xpY3lbVENBX1BFRElUX01BWCArIDFdID0gewotCVtUQ0FfUEVESVRfUEFSTVNdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpIH0sCisJW1RDQV9QRURJVF9QQVJNU10JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHRjX3BlZGl0KSB9LAogfTsKIAogc3RhdGljIGludCB0Y2ZfcGVkaXRfaW5pdChzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubGF0dHIgKmVzdCwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDZhNTM2OTQuLjdjZjZjMGYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJdGNtID0gTkxNU0dfREFUQShubGgpOwogCXRjbS0+dGNtX2ZhbWlseSA9IEFGX1VOU1BFQzsKIAl0Y20tPnRjbV9fcGFkMSA9IDA7Ci0JdGNtLT50Y21fX3BhZDEgPSAwOworCXRjbS0+dGNtX19wYWQyID0gMDsKIAl0Y20tPnRjbV9pZmluZGV4ID0gcWRpc2NfZGV2KHRwLT5xKS0+aWZpbmRleDsKIAl0Y20tPnRjbV9wYXJlbnQgPSB0cC0+Y2xhc3NpZDsKIAl0Y20tPnRjbV9pbmZvID0gVENfSF9NQUtFKHRwLT5wcmlvLCB0cC0+cHJvdG9jb2wpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCBjY2M1ZTgzLi4xYzI0NmE0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTExLDcgKzExMSw3IEBACiAJCXJxc3RwLT5ycV94cHJ0X2N0eHQgPSBOVUxMOwogCiAJCWRwcmludGsoInN2Yzogc2VydmljZSAlcCwgcmVsZWFzaW5nIHNrYiAlcFxuIiwgcnFzdHAsIHNrYik7Ci0JCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc3Zzay0+c2tfc2ssIHNrYik7CiAJfQogfQogCkBAIC01NzgsNyArNTc4LDcgQEAKIAkJCQkic3ZjOiByZWNlaXZlZCB1bmtub3duIGNvbnRyb2wgbWVzc2FnZSAlZC8lZDsgIgogCQkJCSJkcm9wcGluZyBSUEMgcmVwbHkgZGF0YWdyYW1cbiIsCiAJCQkJCWNtaC0+Y21zZ19sZXZlbCwgY21oLT5jbXNnX3R5cGUpOwotCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKKwkJc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHN2c2stPnNrX3NrLCBza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU4OCwxOCArNTg4LDE4IEBACiAJCWlmIChjc3VtX3BhcnRpYWxfY29weV90b194ZHIoJnJxc3RwLT5ycV9hcmcsIHNrYikpIHsKIAkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJLyogY2hlY2tzdW0gZXJyb3IgKi8KLQkJCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQkJc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHN2c2stPnNrX3NrLCBza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc3Zzay0+c2tfc2ssIHNrYik7CiAJfSBlbHNlIHsKIAkJLyogd2UgY2FuIHVzZSBpdCBpbi1wbGFjZSAqLwogCQlycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBza2ItPmRhdGEgKwogCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCQlycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2xlbiA9IGxlbjsKIAkJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7Ci0JCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKKwkJCXNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZChzdnNrLT5za19zaywgc2tiKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJxc3RwLT5ycV94cHJ0X2N0eHQgPSBza2I7CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggNTFhYjQ5Ny4uZmM4MjBjZCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTA3NCw2ICsxMDc0LDggQEAKIAllcnIgPSAtRUNPTk5SRUZVU0VEOwogCWlmIChvdGhlci0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikKIAkJZ290byBvdXRfdW5sb2NrOworCWlmIChvdGhlci0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICh1bml4X3JlY3ZxX2Z1bGwob3RoZXIpKSB7CiAJCWVyciA9IC1FQUdBSU47CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCAyYTMzZDhiLi42OGIzMjE5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTM1OCw2ICszNTgsNyBAQAogCQkJICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiAKIHZvaWQgY2ZnODAyMTFfY29ubl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGNmZzgwMjExX3NtZV9mYWlsZWRfYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiBib29sIGNmZzgwMjExX3NtZV9mYWlsZWRfcmVhc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIAogLyogaW50ZXJuYWwgaGVscGVycyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggNzlkMmVlYy4uMGE2YjdhMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC02Miw2ICs2Miw3IEBACiAJdTggKmllID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwogCWludCBpLCBpZW9mZnMgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYXNzb2NfcmVzcC52YXJpYWJsZSk7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzID0gTlVMTDsKKwlib29sIG5lZWRfY29ubmVjdF9yZXN1bHQgPSB0cnVlOwogCiAJd2Rldl9sb2NrKHdkZXYpOwogCkBAIC05NCw2ICs5NSwxNCBAQAogCQl9CiAKIAkJV0FSTl9PTighYnNzKTsKKwl9IGVsc2UgaWYgKHdkZXYtPmNvbm4pIHsKKwkJY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyh3ZGV2KTsKKwkJbmVlZF9jb25uZWN0X3Jlc3VsdCA9IGZhbHNlOworCQkvKgorCQkgKiBkbyBub3QgY2FsbCBjb25uZWN0X3Jlc3VsdCgpIG5vdyBiZWNhdXNlIHRoZQorCQkgKiBzbWUgd2lsbCBzY2hlZHVsZSB3b3JrIHRoYXQgZG9lcyBpdCBsYXRlci4KKwkJICovCisJCWdvdG8gb3V0OwogCX0KIAogCWlmICghd2Rldi0+Y29ubiAmJiB3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0lETEUpIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGVkZGFiMDkuLmNhM2M5MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtNDAyOSw3ICs0MDI5LDcgQEAKIAlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKHJkZXYpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcnRubDsKIAl9CiAKIAluZXQgPSBnZXRfbmV0X25zX2J5X3BpZChwaWQpOwpAQCAtNDA0OSw2ICs0MDQ5LDcgQEAKIAlwdXRfbmV0KG5ldCk7CiAgb3V0OgogCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zbWUuYyBiL25ldC93aXJlbGVzcy9zbWUuYwppbmRleCA5M2MzZWQzLi45ZjBiMjgwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NtZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAJCUNGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRJTkcsCiAJCUNGRzgwMjExX0NPTk5fQVNTT0NJQVRFX05FWFQsCiAJCUNGRzgwMjExX0NPTk5fQVNTT0NJQVRJTkcsCisJCUNGRzgwMjExX0NPTk5fREVBVVRIX0FTU09DX0ZBSUwsCiAJfSBzdGF0ZTsKIAl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOwogCXU4ICppZTsKQEAgLTE0OCw2ICsxNDksMTIgQEAKIAkJCQkJICAgICAgIE5VTEwsIDAsCiAJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CiAJCXJldHVybiBlcnI7CisJY2FzZSBDRkc4MDIxMV9DT05OX0RFQVVUSF9BU1NPQ19GQUlMOgorCQlfX2NmZzgwMjExX21sbWVfZGVhdXRoKHJkZXYsIHdkZXYtPm5ldGRldiwgcGFyYW1zLT5ic3NpZCwKKwkJCQkgICAgICAgTlVMTCwgMCwKKwkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCQkvKiByZXR1cm4gYW4gZXJyb3Igc28gdGhhdCB3ZSBjYWxsIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoKSAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNTgsNiArMTY1LDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCBjb25uX3dvcmspOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJdTggYnNzaWRfYnVmW0VUSF9BTEVOXSwgKmJzc2lkID0gTlVMTDsKIAogCXJ0bmxfbG9jaygpOwogCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKQEAgLTE3MywxMCArMTgxLDEzIEBACiAJCQl3ZGV2X3VubG9jayh3ZGV2KTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICh3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQpIHsKKwkJCW1lbWNweShic3NpZF9idWYsIHdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCwgRVRIX0FMRU4pOworCQkJYnNzaWQgPSBic3NpZF9idWY7CisJCX0KIAkJaWYgKGNmZzgwMjExX2Nvbm5fZG9fd29yayh3ZGV2KSkKIAkJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoCi0JCQkJCXdkZXYtPm5ldGRldiwKLQkJCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLAorCQkJCQl3ZGV2LT5uZXRkZXYsIGJzc2lkLAogCQkJCQlOVUxMLCAwLCBOVUxMLCAwLAogCQkJCQlXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFLAogCQkJCQlmYWxzZSwgTlVMTCk7CkBAIC0zMzcsNiArMzQ4LDE1IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0RFQVVUSF9BU1NPQ19GQUlMOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmNvbm5fd29yayk7Cit9CisKIHZvaWQgX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJCQkgICAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCiAJCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCA4N2JiYjhiLi5iYzQxMTRmIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0yLDcgKzIsNyBAQAogIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCiAjIChjKSAyMDA1LCBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4gKHRoZSB1Z2x5IGJpdCkKICMgKGMpIDIwMDcsMjAwOCwgQW5keSBXaGl0Y3JvZnQgPGFwd0B1ay5pYm0uY29tPiAobmV3IGNvbmRpdGlvbnMsIHRlc3Qgc3VpdGUpCi0jIChjKSAyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisjIChjKSAyMDA4LDIwMDksIEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAKIHVzZSBzdHJpY3Q7CkBAIC0xMCw3ICsxMCw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMjknOworbXkgJFYgPSAnMC4zMCc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTEzMCw3ICsxMzAsMTAgQEAKIAogbXkgJGVtaXR0ZWRfY29ycnVwdCA9IDA7CiAKLW91ciAkSWRlbnQgICAgICAgPSBxcntbQS1aYS16X11bQS1aYS16XGRfXSp9Oworb3VyICRJZGVudAk9IHFyeworCQkJW0EtWmEtel9dW0EtWmEtelxkX10qCisJCQkoPzpccypcI1wjXHMqW0EtWmEtel9dW0EtWmEtelxkX10qKSoKKwkJfXg7CiBvdXIgJFN0b3JhZ2UJPSBxcntleHRlcm58c3RhdGljfGFzbWxpbmthZ2V9Owogb3VyICRTcGFyc2UJPSBxcnsKIAkJCV9fdXNlcnwKQEAgLTk5NywyMyArMTAwMCwyNSBAQAogCiBzdWIgcG9zc2libGUgewogCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOwotCi0JcHJpbnQgIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOwotCWlmICgkcG9zc2libGUgIX4gLyg/OgorCW15ICRub3RQZXJtaXR0ZWQgPSBxcnsoPzoKIAkJXig/OgogCQkJJE1vZGlmaWVyfAogCQkJJFN0b3JhZ2V8CiAJCQkkVHlwZXwKLQkJCURFRklORV9cUyt8CisJCQlERUZJTkVfXFMrCisJCSkkfAorCQleKD86CiAJCQlnb3RvfAogCQkJcmV0dXJufAogCQkJY2FzZXwKIAkJCWVsc2V8CiAJCQlhc218X19hc21fX3wKIAkJCWRvCi0JCSkkfAorCQkpKD86XHN8JCl8CiAJCV4oPzp0eXBlZGVmfHN0cnVjdHxlbnVtKVxiCi0JICAgICkveCkgeworCSAgICApfXg7CisJd2FybiAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAkbm90UGVybWl0dGVkKSB7CiAJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KIAkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CkBAIC0xMDIyLDggKzEwMjcsMTAgQEAKIAkJfSBlbHNpZiAoJHBvc3NpYmxlID1+IC9ccy8pIHsKIAkJCSRwb3NzaWJsZSA9fiBzL1xzKiRUeXBlXHMqLy9nOwogCQkJZm9yIG15ICRtb2RpZmllciAoc3BsaXQoJyAnLCAkcG9zc2libGUpKSB7Ci0JCQkJd2FybiAiTU9ESUZJRVI6ICRtb2RpZmllciAoJHBvc3NpYmxlKSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlKTsKLQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJaWYgKCRtb2RpZmllciAhfiAkbm90UGVybWl0dGVkKSB7CisJCQkJCXdhcm4gIk1PRElGSUVSOiAkbW9kaWZpZXIgKCRwb3NzaWJsZSkgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSk7CisJCQkJCXB1c2goQG1vZGlmaWVyTGlzdCwgJG1vZGlmaWVyKTsKKwkJCQl9CiAJCQl9CiAKIAkJfSBlbHNlIHsKQEAgLTExMzgsNiArMTE0NSw3IEBACiAJIyBzdXBwcmVzc2lvbiBmbGFncwogCW15ICVzdXBwcmVzc19pZmJyYWNlczsKIAlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKKwlteSAlc3VwcHJlc3NfZXhwb3J0OwogCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KQEAgLTEyMzAsNyArMTIzOCw2IEBACiAJCSRsaW5lbnIrKzsKIAogCQlteSAkcmF3bGluZSA9ICRyYXdsaW5lc1skbGluZW5yIC0gMV07Ci0JCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CiAKICNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCiAJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewpAQCAtMTI0Nyw2ICsxMjU0LDcgQEAKIAogCQkJJXN1cHByZXNzX2lmYnJhY2VzID0gKCk7CiAJCQklc3VwcHJlc3Nfd2hpbGV0cmFpbGVycyA9ICgpOworCQkJJXN1cHByZXNzX2V4cG9ydCA9ICgpOwogCQkJbmV4dDsKIAogIyB0cmFjayB0aGUgbGluZSBudW1iZXIgYXMgd2UgbW92ZSB0aHJvdWdoIHRoZSBodW5rLCBub3RlIHRoYXQKQEAgLTEyNzAsNiArMTI3OCw4IEBACiAJCQkkcmVhbGNudC0tOwogCQl9CiAKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKKwogI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKIAkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JHJlYWxsaW5lOiAiIGlmICgkZW1hY3MgJiYgJGZpbGUpOwogCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokbGluZW5yOiAiIGlmICgkZW1hY3MgJiYgISRmaWxlKTsKQEAgLTE0MjAsMTMgKzE0MzAsMjIgQEAKIAkJfQogCiAjIENoZWNrIGZvciBwb3RlbnRpYWwgJ2JhcmUnIHR5cGVzCi0JCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQsCisJCSAgICAkcmVhbGxpbmVfbmV4dCk7CiAJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgewogCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KIAkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKIAkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOwogCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CiAKKwkJCSMgRmluZCB0aGUgcmVhbCBuZXh0IGxpbmUuCisJCQkkcmVhbGxpbmVfbmV4dCA9ICRsaW5lX25yX25leHQ7CisJCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkJICAgICghZGVmaW5lZCAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSB8fAorCQkJICAgICBzdWJzdHIoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0sICRvZmZfbmV4dCkgPX4gL15ccyokLykpIHsKKwkJCQkkcmVhbGxpbmVfbmV4dCsrOworCQkJfQorCiAJCQlteSAkcyA9ICRzdGF0OwogCQkJJHMgPX4gcy97LiokLy9zOwogCkBAIC0xNjYxLDggKzE2ODAsOCBAQAogCQl9CiAKICMgY2hlY2sgZm9yIGluaXRpYWxpc2F0aW9uIHRvIGFnZ3JlZ2F0ZXMgb3BlbiBicmFjZSBvbiB0aGUgbmV4dCBsaW5lCi0JCWlmICgkcHJldmxpbmUgPX4gLyREZWNsYXJlXHMqJElkZW50XHMqPVxzKiQvICYmCi0JCSAgICAkbGluZSA9fiAvXi5ccyp7LykgeworCQlpZiAoJGxpbmUgPX4gL14uXHMqey8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvKD86XnxbXj1dKT1ccyokLykgewogCQkJRVJST1IoInRoYXQgb3BlbiBicmFjZSB7IHNob3VsZCBiZSBvbiB0aGUgcHJldmlvdXMgbGluZVxuIiAuICRoZXJlcHJldik7CiAJCX0KIApAQCAtMTY4NywyMSArMTcwNiw0MCBAQAogCQkkbGluZSA9fiBzQC8vLipAQDsKIAkJJG9wbGluZSA9fiBzQC8vLipAQDsKIAotI0VYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24gY2xvc2luZyB9LgotCQlpZiAoKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8pIHx8Ci0JCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjIEVYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgdGhpbmcgaXQgaXMgZXhwb3J0aW5nLCBjb25zaWRlcgorIyB0aGUgd2hvbGUgc3RhdGVtZW50LgorI3ByaW50ICJBUFcgPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPlxuIjsKKwkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJICAgIGV4aXN0cyAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSAmJgorCQkgICAgIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gJiYKKwkJICAgICgkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CiAJCQlteSAkbmFtZSA9ICQxOwotCQkJaWYgKCRwcmV2bGluZSAhfiAvKD86Ci0JCQkJXi59fAorCQkJaWYgKCRzdGF0ICF+IC8oPzoKKwkJCQlcbi59XHMqJHwKIAkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKLQkJCQleLiRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8Ci0JCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD18XFspCisJCQkJXi4oPzokU3RvcmFnZVxzKyk/JFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKKwkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpKlxzKig/Ojt8PXxcW3xcKCkKIAkJCSAgICApL3gpIHsKLQkJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKKyNwcmludCAiRk9PIEE8JGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0+IHN0YXQ8JHN0YXQ+IG5hbWU8JG5hbWU+XG4iOworCQkJCSRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAxOwogCQkJfQogCQl9CisJCWlmICghZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ICYmCisJCSAgICAkcHJldmxpbmUgPX4gL14uXHMqJC8gJiYKKwkJICAgICgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjcHJpbnQgIkZPTyBCIDwkbGluZXNbJGxpbmVuciAtIDFdPlxuIjsKKwkJCSRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPSAyOworCQl9CisJCWlmIChkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPT0gMikgeworCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CisJCX0KIAogIyBjaGVjayBmb3IgZXh0ZXJuYWwgaW5pdGlhbGlzZXJzLgogCQlpZiAoJGxpbmUgPX4gL14uJFR5cGVccyokSWRlbnRccyooPzpccyskTW9kaWZpZXIpKlxzKj1ccyooMHxOVUxMfGZhbHNlKVxzKjsvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCBjZGI0NGI2Li44MWE2N2E0IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTUsMTUgKzUsMTUgQEAKICMgUHJpbnQgc2VsZWN0ZWQgTUFJTlRBSU5FUlMgaW5mb3JtYXRpb24gZm9yCiAjIHRoZSBmaWxlcyBtb2RpZmllZCBpbiBhIHBhdGNoIG9yIGZvciBhIGZpbGUKICMKLSMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIDxwYXRjaD4KLSMgICAgICAgIHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIC1mIDxmaWxlPgorIyB1c2FnZTogcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSA8cGF0Y2g+CisjICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwgW09QVElPTlNdIC1mIDxmaWxlPgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKIAogbXkgJFAgPSAkMDsKLW15ICRWID0gJzAuMjAnOworbXkgJFYgPSAnMC4yMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTM3LDYgKzM3LDcgQEAKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKK215ICRrZXl3b3JkcyA9IDE7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CiBteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CkBAIC04NCw2ICs4NSw3IEBACiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEzMiw2ICsxMzQsOCBAQAogIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3IgdHlwZS92YWx1ZSBwYWlycwogCiBteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNoOworCiBvcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7CiB3aGlsZSAoPE1BSU5UPikgewogICAgIG15ICRsaW5lID0gJF87CkBAIC0xNDksNiArMTUzLDggQEAKIAkgICAgaWYgKCgtZCAkdmFsdWUpKSB7CiAJCSR2YWx1ZSA9fiBzQChbXi9dKSRAJDEvQDsKIAkgICAgfQorCX0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCSAgICAka2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOwogCX0KIAlwdXNoKEB0eXBldmFsdWUsICIkdHlwZTokdmFsdWUiKTsKICAgICB9IGVsc2lmICghL14oXHMpKiQvKSB7CkBAIC0xODgsNiArMTk0LDcgQEAKIAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3JkX3R2aSA9ICgpOwogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewogICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKQEAgLTE5OCwxMSArMjA1LDI0IEBACiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgeworCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CisJICAgIHdoaWxlICg8RklMRT4pIHsKKwkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgY2xvc2UoRklMRSk7CisJfQogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOwogCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CisJICAgIG15ICRwYXRjaF9saW5lID0gJF87CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKQEAgLTIxMyw2ICsyMzMsMTIgQEAKIAkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKIAkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CiAJCX0KKwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXlsrLV0uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yODYsNiArMzEyLDEzIEBACiAgICAgfQogfQogCitpZiAoJGtleXdvcmRzKSB7CisgICAgQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5d29yZF90dmkpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKyAgICB9Cit9CisKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKQEAgLTM4NCw2ICs0MTcsNyBAQAogCiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIApAQCAtNDg2LDcgKzUyMCw2IEBACiB9CiAKIHN1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKLQogICAgIG15ICgkaW5kZXgpID0gQF87CiAKICAgICB3aGlsZSAoJGluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggMmZiMjhlZi4uMDZlYzcyMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC04NzMsNyArODczLDcgQEAKIAkvKiBvdGhlcndpc2Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24ga2V5cmluZyByZWNvcmRlZCBpbiB0aGUKIAkgKiBhdXRob3Jpc2F0aW9uIGtleSAoYW55IEtFWV9TUEVDXypfS0VZUklORykgKi8KIAlpZiAocmluZ2lkID49IEtFWV9TUEVDX1JFUVVFU1RPUl9LRVlSSU5HKSB7Ci0JCSpfZGVzdF9rZXlyaW5nID0gcmthLT5kZXN0X2tleXJpbmc7CisJCSpfZGVzdF9rZXlyaW5nID0ga2V5X2dldChya2EtPmRlc3Rfa2V5cmluZyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMGMxNDQwMS4uYzY5YzYwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC05NTMsMTEgKzk1MywxMiBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX25vdGlmeSAqbm90aWZ5OwogCWNoYXIgc3RyWzE2XTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWlmIChzbmRfQlVHX09OKCFwY20gfHwgIWRldmljZSkpCisJaWYgKHNuZF9CVUdfT04oIWRldmljZSB8fCAhZGV2aWNlLT5kZXZpY2VfZGF0YSkpCiAJCXJldHVybiAtRU5YSU87CisJcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJZXJyID0gc25kX3BjbV9hZGQocGNtKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IGMwYWRjMTQuLjcwZDZmMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0yNDgsNyArMjQ4LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKIAkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CiAJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8Ci0JCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkgfHwKKwkJCSAgICAhc3Vic3RyZWFtLT5hcHBlbmQpCiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CkBAIC0yNjYsMTcgKzI2NywyMSBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0Jc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwotCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCisJaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50ID09IDApIHsKKwkJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKIAkJc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZyA9IDA7Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQotCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKKwkJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwl9CisJc3Vic3RyZWFtLT51c2VfY291bnQrKzsKIAlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOwogCXJldHVybiAwOwogfQpAQCAtMjk3LDI3ICszMDIsMjcgQEAKIAkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCiAJCQkJICAgICAgIG1vZGUsICZzaW5wdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewogCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCiAJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKIAkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKHNpbnB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCBtb2RlKTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoc291dHB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc291dHB1dCwgbW9kZSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpZiAoc2lucHV0KQogCQkJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCAwKTsKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKQEAgLTMyNSwxMyArMzMwLDYgQEAKIAlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CiAJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CiAJcmV0dXJuIDA7Ci0KLSAgICAgIF9fZXJyb3I6Ci0JaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOwotCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKLQlyZXR1cm4gZXJyOwogfQogCiAvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNmJhMDY2Yy4uMjUyZTA0YyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZXZzLCAiUENNIGRldmljZXMgIyAoMC00KSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9zdWJzdHJlYW1zLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwY21fc3Vic3RyZWFtcywgIlBDTSBzdWJzdHJlYW1zICMgKDEtMTYpIGZvciBkdW1teSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xMjgpIGZvciBkdW1teSBkcml2ZXIuIik7CiAvL21vZHVsZV9wYXJhbV9hcnJheShtaWRpX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiAvL01PRFVMRV9QQVJNX0RFU0MobWlkaV9kZXZzLCAiTUlESSBkZXZpY2VzICMgKDAtMikgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbShmYWtlX2J1ZmZlciwgYm9vbCwgMDQ0NCk7CkBAIC04MDgsOCArODA4LDYgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CiAKLQlpZiAoc25kX0JVR19PTighZHVtbXkpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaW5pdCgmZHVtbXktPm1peGVyX2xvY2spOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJEdW1teSBNaXhlciIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCmluZGV4IDg0Y2MyNjUuLmUxMTQ1YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCkBAIC0zOSwyNSArMzksMjAgQEAKIC8qIHdyaXRlIHRoZSBwb3J0IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV4cGlyZSB0aW1lIGluIG5zOwogICogY2FsbGVkIGF0IHRoZSB0cmlnZ2VyLXN0YXJ0IGFuZCBpbiBocnRpbWVyIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdTY0IHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyX2NudCwgdmFsOwogCXU2NCBuczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hpcC0+dGhhbGYpIHsKIAkJb3V0YihjaGlwLT52YWw2MSwgMHg2MSk7CiAJCWNoaXAtPnRoYWxmID0gMDsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJCXJldHVybiAwOwogCQlyZXR1cm4gY2hpcC0+bnNfcmVtOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCXJldHVybiAwOwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CkBAIC04OCwyNCArODMsMTcgQEAKIAlyZXR1cm4gbnM7CiB9CiAKLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB2b2lkIHBjc3BfcG9pbnRlcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBwZXJpb2RzX2VsYXBzZWQsIHBvaW50ZXJfdXBkYXRlOwogCXNpemVfdCBwZXJpb2RfYnl0ZXMsIGJ1ZmZlcl9ieXRlczsKLQl1bnNpZ25lZCBsb25nIG5zOworCWludCBwZXJpb2RzX2VsYXBzZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOwotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoaGFuZGxlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAkvKiB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uICovCiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCXJldHVybjsKIAogCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCWJ1ZmZlcl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtMTM0LDYgKzEyMiwyNiBAQAogCiAJaWYgKHBlcmlvZHNfZWxhcHNlZCkKIAkJdGFza2xldF9zY2hlZHVsZSgmcGNzcF9wY21fdGFza2xldCk7Cit9CisKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKKwlpbnQgcG9pbnRlcl91cGRhdGU7CisJdTY0IG5zOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSB8fCAhY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKKwlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGNoaXApOworCWlmICghbnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENTUDogdW5leHBlY3RlZCBzdG9wXG4iKTsKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCWlmIChwb2ludGVyX3VwZGF0ZSkKKwkJcGNzcF9wb2ludGVyX3VwZGF0ZShjaGlwKTsKIAogCWhydGltZXJfZm9yd2FyZChoYW5kbGUsIGhydGltZXJfZ2V0X2V4cGlyZXMoaGFuZGxlKSwgbnNfdG9fa3RpbWUobnMpKTsKIApAQCAtMTQyLDggKzE1MCw2IEBACiAKIHN0YXRpYyBpbnQgcGNzcF9zdGFydF9wbGF5aW5nKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQl1bnNpZ25lZCBsb25nIG5zOwotCiAjaWYgUENTUF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHN0YXJ0X3BsYXlpbmcgY2FsbGVkXG4iKTsKICNlbmRpZgpAQCAtMTU5LDExICsxNjUsNyBAQAogCWF0b21pY19zZXQoJmNoaXAtPnRpbWVyX2FjdGl2ZSwgMSk7CiAJY2hpcC0+dGhhbGYgPSAwOwogCi0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZSgmcGNzcF9jaGlwLnRpbWVyKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gLUVJTzsKLQotCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIG5zKSwgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgMCksIEhSVElNRVJfTU9ERV9SRUwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMjEgKzIzNCwyMiBAQAogc3RhdGljIGludCBzbmRfcGNzcF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKLQkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWlcbiIsCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLwotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMpOwotI2VuZGlmCiAJcGNzcF9zeW5jX3N0b3AoY2hpcCk7CiAJY2hpcC0+cGxheWJhY2tfcHRyID0gMDsKIAljaGlwLT5wZXJpb2RfcHRyID0gMDsKIAljaGlwLT5mbXRfc2l6ZSA9CiAJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSA+PiAzOwogCWNoaXAtPmlzX3NpZ25lZCA9IHNuZF9wY21fZm9ybWF0X3NpZ25lZChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CisjaWYgUENTUF9ERUJVRworCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCisJCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpIGZzaXplPSVpXG4iLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzLAorCQkJY2hpcC0+Zm10X3NpemUpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCmluZGV4IDE5OWIwMzMuLjkwM2JjODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmICh0cmVibGUgIT0gY2hpcC0+dHJlYmxlKSB7CiAJCWNoaXAtPnRyZWJsZSA9IHRyZWJsZTsKICNpZiBQQ1NQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVpXG4iLCBQQ1NQX1JBVEUoKSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVsaVxuIiwgUENTUF9SQVRFKCkpOwogI2VuZGlmCiAJCWNoYW5nZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDc5M2I3ZjQuLjNmM2MzZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMjE5LDcgKzIxOSw5IEBACiAgICAgICogIE1pZCBsZXZlbCBzdHVmZgogICAgICAqLwogCi1zdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7IC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07CitzdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7CisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChkbWFzb3VuZC5sb2NrKQorfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvdW5kX3NpbGVuY2Uodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jb21tb24uYyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwppbmRleCA3N2QwZTVlLi5jZTRkYjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKKysrIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQkvKiBwcmludGsoS0VSTl9XQVJOICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCQkJCTsKIAkJfQogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJCQkJOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2Vzcy5jIGIvc291bmQvb3NzL3NiX2Vzcy5jCmluZGV4IDE4MGU5NWMuLjUxYTNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9lc3MuYworKysgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDo7Ci0JCQkvKiBwcmludGsoS0VSTl9XQVJOICJFU1M6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIkVTUzogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggZTkyNDQ5Mi4uZjQ3ZjllMiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC02MjQsNiArNjI0LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKKwlpZiAoc25kX0JVR19PTighaCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaGFybW9ueV9kaXNhYmxlX2ludGVycnVwdHMoaCk7CiAJCiAgICAJZXJyID0gc25kX3BjbV9uZXcoaC0+Y2FyZCwgImhhcm1vbnkiLCAwLCAxLCAxLCAmcGNtKTsKQEAgLTg2NSwxMSArODY4LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogc25kX2hhcm1vbnlfbWl4ZXJfaW5pdChzdHJ1Y3Qgc25kX2hhcm1vbnkgKmgpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gaC0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGlkeCwgZXJyOwogCiAJaWYgKHNuZF9CVUdfT04oIWgpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwljYXJkID0gaC0+Y2FyZDsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiSGFybW9ueSBHYWluIGNvbnRyb2wgaW50ZXJmYWNlIik7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEhBUk1PTllfQ09OVFJPTFM7IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGZiNWVlM2MuLjc1YzYwMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0yNTksNyArMjU5LDYgQEAKIAogY29uZmlnIFNORF9DUzU1MzVBVURJTwogCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IEF1ZGlvIgotCWRlcGVuZHMgb24gWDg2ICYmICFYODZfNjQKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBiNDU4ZDIwLi5hYWY0ZGE2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC05NzMsNyArOTczLDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiZnJlZV92b2ljZTogY2hhbm5lbD0lZFxuIixwdm9pY2UtPm51bWJlcik7Ci0JaWYgKHB2b2ljZSA9PSBOVUxMIHx8ICFwdm9pY2UtPnVzZSkKKwlpZiAoIXB2b2ljZS0+dXNlKQogCQlyZXR1cm47CiAJc25kX2FsaV9jbGVhcl92b2ljZXMoY29kZWMsIHB2b2ljZS0+bnVtYmVyLCBwdm9pY2UtPm51bWJlcik7CiAJc3Bpbl9sb2NrX2lycSgmY29kZWMtPnZvaWNlX2FsbG9jKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGM5YWQxODIuLjY1MTdmNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNzIyLDkgKzcyMiwxMCBAQAogCQkgICBjaGlwLT5sYXN0X2NtZFthZGRyXSk7CiAJY2hpcC0+c2luZ2xlX2NtZCA9IDE7CiAJYnVzLT5yZXNwb25zZV9yZXNldCA9IDA7Ci0JLyogcmUtaW5pdGlhbGl6ZSBDT1JCL1JJUkIgKi8KKwkvKiByZWxlYXNlIENPUkIvUklSQiAqLwogCWF6eF9mcmVlX2NtZF9pbyhjaGlwKTsKLQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CisJLyogZGlzYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgKi8KKwlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSAmIH5JQ0g2X0dDVExfVU5TT0wpOwogCXJldHVybiAtMTsKIH0KIApAQCAtODY1LDcgKzg2Niw5IEBACiAJfQogCiAJLyogQWNjZXB0IHVuc29saWNpdGVkIHJlc3BvbnNlcyAqLwotCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwgSUNINl9HQ1RMX1VOU09MKTsKKwlpZiAoIWNoaXAtPnNpbmdsZV9jbWQpCisJCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwKKwkJCSAgIElDSDZfR0NUTF9VTlNPTCk7CiAKIAkvKiBkZXRlY3QgY29kZWNzICovCiAJaWYgKCFjaGlwLT5jb2RlY19tYXNrKSB7CkBAIC05ODAsNyArOTgzLDggQEAKIAlhenhfaW50X2VuYWJsZShjaGlwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGNvZGVjIGNvbW1hbmQgSS9PICovCi0JYXp4X2luaXRfY21kX2lvKGNoaXApOworCWlmICghY2hpcC0+c2luZ2xlX2NtZCkKKwkJYXp4X2luaXRfY21kX2lvKGNoaXApOwogCiAJLyogcHJvZ3JhbSB0aGUgcG9zaXRpb24gYnVmZmVyICovCiAJYXp4X3dyaXRlbChjaGlwLCBEUExCQVNFLCAodTMyKWNoaXAtPnBvc2J1Zi5hZGRyKTsKQEAgLTI2NzQsNiArMjY3OCw3IEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNDRiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1ZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTkwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAzZmJiYzhjLi45MDU4NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTE5MjcsNiArMTkyOCwxMSBAQAogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2NhcHNyY19uaWRzWzFdID0geyAweDE3IH07CiAjZGVmaW5lIENYVDUwNjZfU1BESUZfT1VUCTB4MjEKIAorLyogT0xQQydzIG1pY3JvcGhvbmUgcG9ydCBpcyBEQyBjb3VwbGVkIGZvciB1c2Ugd2l0aCBleHRlcm5hbCBzZW5zb3JzLAorICogdGhlcmVmb3JlIHdlIHVzZSBhIDUwJSBtaWMgYmlhcyBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGlucHV0IHNpZ25hbCB3aXRoCisgKiB0aGUgREMgaW5wdXQgcmFuZ2Ugb2YgdGhlIGNvZGVjLiAqLworI2RlZmluZSBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTIFBJTl9WUkVGNTAKKwogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNjZfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwpAQCAtMTk4MCw5ICsxOTg2LDEwIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0gewogCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCiAKIAkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLwogCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LApAQCAtMjIzNSw3ICsyMjQyLDcgQEAKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCiAKIAkvKiBQb3J0IEI6IGV4dGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTfSwKIAogCS8qIFBvcnQgQzogaW50ZXJuYWwgbWljcm9waG9uZSAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMjMyNSw2ICsyMzMyLDcgQEAKIAkJICAgICAgQ1hUNTA2Nl9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjUsICJEZWxsIiwKIAkJICAgICAgQ1hUNTA2Nl9ERUxMX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJe30KIH07CiAKQEAgLTIzNTIsNiArMjM2MCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKKwlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yMzgzLDYgKzIzOTIsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZXh0X21pY19iaWFzID0gQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUzsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggYzA4Y2E2Ni4uZGFmNjk3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTk2NSw2ICs5NjUsOCBAQAogCXVuc2lnbmVkIGludCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJaW50IGk7CiAKKwlpZiAoIW5pZCkKKwkJcmV0dXJuOwogCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9UUklHX1JFUSkgLyogbmVlZCB0cmlnZ2VyPyAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKQEAgLTQ2ODIsOSArNDY4NCw5IEBACiAJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CiAJCWVsc2UgewogCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKLQkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7Ci0JCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCiAJCQkJYnJlYWs7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwogCQl9CiAJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCkBAIC02MjQ3LDcgKzYyNDksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOGYsICJBY2VyIiwgQUxDMjYwX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDQ1NDAsICJGYXZvcml0IDEwMFhTIiwgQUxDMjYwX0ZBVk9SSVQxMDApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDgsICJIUCBkNTcwMCIsIEFMQzI2MF9IUF8zMDEzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfSFBfMzAxMyksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0FVVE8pLCAvKiBubyBxdWlyayAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTAsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDExLCAiSFAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMiwgIkhQIiwgQUxDMjYwX0hQX0RDNzYwMCksCkBAIC05ODExLDkgKzk4MTMsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtMTE0NTgsNiArMTE0NjAsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDI1LCAiU29ueSBWQUlPIFoyMU1OIiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDM1LCAiU29ueSBWQUlPIFZHTi1GVzE3MEoiLCBBTEMyNjJfQVVUTyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAogCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLApAQCAtMTI2MDIsNyArMTI2MDUsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIE1pbmk5IiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMjgsIDB4ZmZmMCwgMHgwMmIwLAorCQkJIkRlbGwgSW5zcGlyb24gTWluaTkvVm9zdHJvIEE5MCIsIEFMQzI2OF9ERUxMKSwKIAkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOwogCSAqIGF1dG8tcHJvYmluZyBzZWVtcyB3b3JraW5nIGZpbmUKIAkgKi8KQEAgLTE3Mzc0LDcgKzE3Mzc4LDcgQEAKIAogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KICNkZWZpbmUgYWxjNjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMgXAotCWFsYzg4MF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzCisJYWxjODgyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNjZjMDg3Ni4uOGViNjUwOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KQEAgLTE2OTMsNiArMTY5NCw4IEBACiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ3MUJYWF9SRUYpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGZiLAogCQkgICAgICAiSFAgZHY0LTEyMjJuciIsIFNUQUNfSFBfRFY0XzEyMjJOUiksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgxNzIwLAorCQkJICAiSFAiLCBTVEFDX0hQX0RWNSksCiAJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMDgwLAogCQkgICAgICAiSFAiLCBTVEFDX0hQX0RWNSksCiAJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMGYwLApAQCAtNDY2NSw2ICs0NjY4LDI2IEBACiAJfQogfQogCitzdGF0aWMgaW50IGhwX2JzZXJpZXNfc3lzdGVtKHUzMiBzdWJzeXN0ZW1faWQpCit7CisJc3dpdGNoIChzdWJzeXN0ZW1faWQpIHsKKwljYXNlIDB4MTAzYzMwN2U6CisJY2FzZSAweDEwM2MzMDdmOgorCWNhc2UgMHgxMDNjMzA4MDoKKwljYXNlIDB4MTAzYzMwODE6CisJY2FzZSAweDEwM2MxNzIyOgorCWNhc2UgMHgxMDNjMTcyMzoKKwljYXNlIDB4MTAzYzE3MjQ6CisJY2FzZSAweDEwM2MxNzI1OgorCWNhc2UgMHgxMDNjMTcyNjoKKwljYXNlIDB4MTAzYzE3Mjc6CisJY2FzZSAweDEwM2MxNzI4OgorCWNhc2UgMHgxMDNjMTcyOToKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIHN0YWM5MmhkX3Byb2NfaG9vayhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCiAJCQkgICAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCkBAIC00NzU0LDYgKzQ3NzcsMTEgQEAKIAkJZWxzZQogCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOyAvKiB3aGl0ZSAqLwogCisJCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCQkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KKwkJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKKwkJfQorCiAJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKIAkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAogCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKQEAgLTUyNDMsNiArNTI3MSw3IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CiAJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKKwl1bnNpZ25lZCBpbnQgcGluX2NmZzsKIAlpbnQgZXJyID0gMDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKQEAgLTU0MjYsNiArNTQ1NSw0NSBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoaHBfYnNlcmllc19zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKKwkJcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CisJCWlmIChnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0xJTkVfT1VUIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIgIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0hQX09VVCkgeworCQkJLyogSXQgd2FzIGNoYW5nZWQgaW4gdGhlIEJJT1MgdG8ganVzdCBzYXRpc2Z5IE1TIERUTS4KKwkJCSAqIExldHMgdHVybiBpdCBiYWNrIGludG8gc2xhdmVkIEhQCisJCQkgKi8KKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+QUNfREVGQ0ZHX0RFVklDRSkpCisJCQkJCXwgKEFDX0pBQ0tfSFBfT1VUIDw8CisJCQkJCQlBQ19ERUZDRkdfREVWSUNFX1NISUZUKTsKKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+KEFDX0RFRkNGR19ERUZfQVNTT0MKKwkJCQkJCQl8IEFDX0RFRkNGR19TRVFVRU5DRSkpKQorCQkJCQkJCQl8IDB4MWY7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIHBpbl9jZmcpOworCQl9CisJfQorCisJaWYgKChjb2RlYy0+c3Vic3lzdGVtX2lkID4+IDE2KSA9PSBQQ0lfVkVORE9SX0lEX0hQKSB7CisJCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOworCQl3aGlsZSAoKGRldiA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfT0VNX1NUUklORywKKwkJCQkJICAgICAgTlVMTCwgZGV2KSkpIHsKKwkJCWlmIChzdHJjbXAoZGV2LT5uYW1lLCAiSFBfTXV0ZV9MRURfMSIpKSB7CisJCQkJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJCQkJY2FzZSAweDExMWQ3NjA4OgorCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHgxMTFkNzYwMDoKKwkJCQljYXNlIDB4MTExZDc2MDE6CisJCQkJY2FzZSAweDExMWQ3NjAyOgorCQkJCWNhc2UgMHgxMTFkNzYwMzoKKwkJCQkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CiAJCXNwZWMtPmdwaW9fbWFzayB8PSBzcGVjLT5ncGlvX2xlZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggNzU0ODY3ZS4uYWFjMjBmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTE5NTAsNiArMTk1MCwxMiBAQAogCX0sCiAJewogCQkuc3VidmVuZG9yID0gMHgxMDRkLAorCQkuc3ViZGV2aWNlID0gMHg4MTQ0LAorCQkubmFtZSA9ICJTb255IiwKKwkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKKwl9LAorCXsKKwkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKIAkJLnN1YmRldmljZSA9IDB4ODE5NywKIAkJLm5hbWUgPSAiU29ueSBTMVhQIiwKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IDkxNjgzYTMuLjhhMzMyZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMzg2LDYgKzM4Niw3IEBACiAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtc1syXTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmR4c19jb250cm9sc1s0XTsKIAogCXN0cnVjdCBzbmRfYWM5N19idXMgKmFjOTdfYnVzOwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKQEAgLTEyMTYsOSArMTIxNyw5IEBACiAKIAogLyoKLSAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NiBhbmQgdmlhODIzeCBEU1gKKyAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NgogICovCi1zdGF0aWMgaW50IHNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF92aWE2ODZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgdmlhZGV2ICp2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKQEAgLTEyMzAsNiArMTIzMSwzMiBAQAogfQogCiAvKgorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhODIzeCBEWFMKKyAqLworc3RhdGljIGludCBzbmRfdmlhODIzM19wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldjsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtOworCWludCBlcnI7CisKKwl2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKKwlpZiAoKGVyciA9IHNuZF92aWE4Mnh4X3BjbV9vcGVuKGNoaXAsIHZpYWRldiwgc3Vic3RyZWFtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPnBsYXliYWNrX3ZvbHVtZVtzdHJlYW1dWzBdID0gMDsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMV0gPSAwOworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzICY9CisJCQl+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSB8CisJCQkgICAgICAgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IG11bHRpLWNoYW5uZWwKICAqLwogc3RhdGljIGludCBzbmRfdmlhODIzM19tdWx0aV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTMwMiwxMCArMTMyOSwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzdHJlYW07CisKKwlzdHJlYW0gPSB2aWFkZXYtPnJlZ19vZmZzZXQgLyAweDEwOworCWlmIChjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXSkgeworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzIHw9CisJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sCisJCQkgICAgICAgJmNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT5pZCk7CisJfQorCXJldHVybiBzbmRfdmlhODJ4eF9wY21fY2xvc2Uoc3Vic3RyZWFtKTsKK30KKwogCiAvKiB2aWE2ODYgcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE2ODZfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCisJLm9wZW4gPQkJc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuLAogCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX3ZpYTgyeHhfaHdfcGFyYW1zLApAQCAtMTMzMSw4ICsxMzc0LDggQEAKIAogLyogdmlhODIzeCBEU1ggcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE4MjMzX3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQlzbmRfdmlhODJ4eF9wbGF5YmFja19vcGVuLAotCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKKwkub3BlbiA9CQlzbmRfdmlhODIzM19wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCiAJLmh3X2ZyZWUgPQlzbmRfdmlhODJ4eF9od19mcmVlLApAQCAtMTcwOSw4ICsxNzUyLDkgQEAKIAkuZGV2aWNlID0gMCwKIAkvKiAuc3ViZGV2aWNlIHNldCBsYXRlciAqLwogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAotCS5hY2Nlc3MgPSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8Ci0JCSAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCksCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFLAogCS5pbmZvID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9pbmZvLAogCS5nZXQgPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX2dldCwKIAkucHV0ID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9wdXQsCkBAIC0xOTQ4LDYgKzE5OTIsNyBAQAogCQkJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGtjdGwpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlyZXR1cm4gZXJyOworCQkJCWNoaXAtPmR4c19jb250cm9sc1tpXSA9IGtjdGw7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA3ZGVhNzRiLi42NGI4NTk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTIxNywyMCArMjE3LDI1IEBACiAgKiBjb25maWd1cmF0aW9uIGNhbGxiYWNrCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHBkYWNmX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZiA9IGxpbmstPnByaXY7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJwZGFjZl9jb25maWcgY2FsbGVkXG4iKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg1OwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJaWYgKHNuZF9wZGFjZl9hc3NpZ25fcmVzb3VyY2VzKHBkYWNmLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKQEAgLTIzOCw4ICsyNDMsNiBAQAogCWxpbmstPmRldl9ub2RlID0gJnBkYWNmLT5ub2RlOwogCXJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggNzQ0NWNjOC4uMTQ5Mjc0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTIxMywxNCArMjEzLDExIEBACiAgKiBjb25maWd1cmF0aW9uIGNhbGxiYWNrCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHZ4cG9ja2V0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAidnhwb2NrZXRfY29uZmlnIGNhbGxlZFxuIik7CiAKQEAgLTIzNSw5ICsyMzIsMTcgQEAKIAkJc3RyY3B5KGNoaXAtPmNhcmQtPmRyaXZlciwgdnhwNDQwX2h3Lm5hbWUpOwogCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCWNoaXAtPmRldiA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKQEAgLTI0OCw4ICsyNTMsNiBAQAogCWxpbmstPmRldl9ub2RlID0gJnZ4cC0+bm9kZTsKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvS2NvbmZpZyBiL3NvdW5kL3BwYy9LY29uZmlnCmluZGV4IGJkMjMzOGEuLjA1MTljNjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9LY29uZmlnCisrKyBiL3NvdW5kL3BwYy9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogCiBtZW51Y29uZmlnIFNORF9QUEMKIAlib29sICJQb3dlclBDIHNvdW5kIGRldmljZXMiCi0JZGVwZW5kcyBvbiBQUEM2NCB8fCBQUEMzMgorCWRlcGVuZHMgb24gUFBDCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU3VwcG9ydCBmb3Igc291bmQgZGV2aWNlcyBzcGVjaWZpYyB0byBQb3dlclBDIGFyY2hpdGVjdHVyZXMuCmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggNTgzYTM2OS4uYTBkZjQwMSAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNDksNiArNDksNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcmVhbWNhc3QgQUlDQSBzb3VuZCAocGNtKSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1lhbWFoYS9TRUdBLCBBSUNBfX0iKTsKK01PRFVMRV9GSVJNV0FSRSgiYWljYV9maXJtd2FyZS5iaW4iKTsKIAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgQ0FSRF9OQU1FICJBSUNBIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggMmRlZTk4My4uNjUzYTM2MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC0yMSw3ICsyMSwxOCBAQAogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19DWDIwNDQyCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBBbXN0cmFkIERlbHRhLgorCSAgU2F5IFkgIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0ICBmb3IgU29DIGF1ZGlvIGRldmljZSAgY29ubmVjdGVkIHRvCisJICBhIGhhbmRzZXQgYW5kIGEgc3BlYWtlcnBob25lIGZvdW5kIG9uIEFtc3RyYWQgRTMgKERlbHRhKSB2aWRlb3Bob25lLgorCisJICBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gZ2V0IHRob3NlIGRldmljZXMgZnVsbHkgc3VwcG9ydGVkLCAgeW91IGhhdmUgdG8KKwkgIGJ1aWxkICB0aGUga2VybmVsICB3aXRoICBzdGFuZGFyZCAgc2VyaWFsIHBvcnQgIGRyaXZlciAgaW5jbHVkZWQgIGFuZAorCSAgY29uZmlndXJlZCBmb3IgYXQgbGVhc3QgNCBwb3J0cy4gIFRoZW4sIGZyb20gdXNlcnNwYWNlLCB5b3UgbXVzdCBsb2FkCisJICBhIGxpbmUgZGlzY2lwbGluZSAjMTkgb24gdGhlIG1vZGVtICh0dHlTMykgc2VyaWFsIGxpbmUuICBUaGUgc2ltcGxlc3QKKwkgIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gaW5zdGFsbCB1dGlsLWxpbnV4LW5nICBhbmQgdXNlIHRoZSBpbmNsdWRlZAorCSAgbGRhdHRhY2ggIHV0aWxpdHkuICBUaGlzICBjYW4gYmUgIHN0YXJ0ZWQgIGF1dG9tYXRpY2FsbHkgIGZyb20gIHVkZXYsCisJICBhIHNpbXBsZSBydWxlIGxpa2UgdGhpcyBvbmUgc2hvdWxkIGRvIHRoZSB0cmljayAoaXQgZG9lcyBmb3IgbWUpOgorCSAgCUFDVElPTj09ImFkZCIsIEtFUk5FTD09ImNvbnRyb2xDMCIsIFwKKwkJCQlSVU4rPSIvdXNyL3NiaW4vbGRhdHRhY2ggMTkgL2Rldi90dHlTMyIKIAogY29uZmlnIFNORF9PTUFQX1NPQ19PU0s1OTEyCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBvbWFwIG9zazU5MTIiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCA1NzM1OTQ1Li42YTgyOWVlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTE5NSw4ICsxOTUsMTIgQEAKIAllbHNlCiAJCW9tYXBfZW5hYmxlX2RtYV9pcnEocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9GUkFNRV9JUlEpOwogCi0Jb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9CVVJTVF8xNik7Ci0Jb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCWlmICghKGNwdV9jbGFzc19pc19vbWFwMSgpKSkgeworCQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLAorCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLAorCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwppbmRleCA1Y2JiZGM4Li4xZjM1YzZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKQEAgLTc1LDExICs3NSwxOSBAQAogewogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWRtYV9hZGRyX3QgcG9zID0gcHJ0ZC0+ZG1hX3BvczsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CiAJaW50IHJldDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IHBydGQtPmRtYV9saW1pdCkgeworCWlmIChzM2NfZG1hX2hhc19jaXJjdWxhcigpKSB7CisJCWxpbWl0ID0gKHBydGQtPmRtYV9lbmQgLSBwcnRkLT5kbWFfc3RhcnQpIC8gcHJ0ZC0+ZG1hX3BlcmlvZDsKKwl9IGVsc2UKKwkJbGltaXQgPSBwcnRkLT5kbWFfbGltaXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGxvYWRlZCAlZCwgbGltaXQgJWRcbiIsIF9fZnVuY19fLCBwcnRkLT5kbWFfbG9hZGVkLCBsaW1pdCk7CisKKwl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IGxpbWl0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKIAogCQlwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOwpAQCAtMTIzLDcgKzEzMSw3IEBACiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7Ci0JaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORykgeworCWlmIChwcnRkLT5zdGF0ZSAmIFNUX1JVTk5JTkcgJiYgIXMzY19kbWFfaGFzX2NpcmN1bGFyKCkpIHsKIAkJcHJ0ZC0+ZG1hX2xvYWRlZC0tOwogCQlzM2MyNHh4X3BjbV9lbnF1ZXVlKHN1YnN0cmVhbSk7CiAJfQpAQCAtMTY0LDYgKzE3MiwxMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKworCQkvKiB1c2UgdGhlIGNpcmN1bGFyIGJ1ZmZlcmluZyBpZiB3ZSBoYXZlIGl0IGF2YWlsYWJsZS4gKi8KKwkJaWYgKHMzY19kbWFfaGFzX2NpcmN1bGFyKCkpCisJCQlzM2MyNDEwX2RtYV9zZXRmbGFncyhwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJCSAgICAgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKTsKIAl9CiAKIAlzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4ocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKaW5kZXggM2MwNmM0MC4uMTA1YTc3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0yMjAsNiArMjIwLDggQEAKIAkJZ290byBlcnI7CiAJfQogCisJY2xrX2VuYWJsZShpMnMtPmlpc19jY2xrKTsKKwogCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksIGkycywgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA3ZmYwNGFkLi4wYTFiMmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtODM0LDYgKzgzNCw5IEBACiAjZGVmaW5lIHNvY19yZXN1bWUJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKK307CisKIHN0YXRpYyB2b2lkIHNuZF9zb2NfaW5zdGFudGlhdGVfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBjb250YWluZXJfb2YoY2FyZC0+ZGV2LApAQCAtODc3LDYgKzg4MCwxMSBAQAogCQkJYWM5NyA9IDE7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CisJCWlmICghY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMpCisJCQljYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWktPm9wcyA9ICZudWxsX2RhaV9vcHM7CisJfQorCiAJLyogSWYgd2UgaGF2ZSBBQzk3IGluIHRoZSBzeXN0ZW0gdGhlbiBkb24ndCB3YWl0IGZvciB0aGUKIAkgKiBjb2RlYy4gIFRoaXMgd2lsbCBuZWVkIHJldmlzaXRpbmcgaWYgd2UgaGF2ZSB0byBoYW5kbGUKIAkgKiBzeXN0ZW1zIHdpdGggbWl4ZWQgQUM5NyBhbmQgbm9uLUFDOTcgcGFydHMuICBPbmx5IGNoZWNrIGZvcgpAQCAtMjMyOSw5ICsyMzM3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0gewotfTsKLQogLyoqCiAgKiBzbmRfc29jX3JlZ2lzdGVyX2RhaSAtIFJlZ2lzdGVyIGEgREFJIHdpdGggdGhlIEFTb0MgY29yZQogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggOGRlNmY5ZC4uZDg5ZjZkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTIwNzIsOSArMjA3Miw5IEBACiAJCQl9CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiAJZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBldmVudCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCWR1bXBfZGFwbShjb2RlYywgX19mdW5jX18pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwppbmRleCAxMjFhZjA2Li44NmIyYzNiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwpAQCAtNjIsMTAgKzYyLDE0IEBACiBhY3RpdmF0ZV9zdWJzdHJlYW0oc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKIAkgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViKQogeworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisKIAlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJZGV2LT5zdWJfcGxheWJhY2tbc3ViLT5udW1iZXJdID0gc3ViOwogCWVsc2UKIAkJZGV2LT5zdWJfY2FwdHVyZVtzdWItPm51bWJlcl0gPSBzdWI7CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjksMTYgKzI3MywyMiBAQAogewogCWludCBpbmRleCA9IHN1Yi0+bnVtYmVyOwogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1Yik7CisJc25kX3BjbV91ZnJhbWVzX3QgcHRyOworCisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKIAogCWlmIChkZXYtPmlucHV0X3BhbmljIHx8IGRldi0+b3V0cHV0X3BhbmljKQotCQlyZXR1cm4gU05EUlZfUENNX1BPU19YUlVOOworCQlwdHIgPSBTTkRSVl9QQ01fUE9TX1hSVU47CiAKIAlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCisJCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCiAJCQkJCWRldi0+YXVkaW9fb3V0X2J1Zl9wb3NbaW5kZXhdKTsKIAllbHNlCi0JCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQlwdHIgPSBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAogCQkJCQlkZXYtPmF1ZGlvX2luX2J1Zl9wb3NbaW5kZXhdKTsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwlyZXR1cm4gcHRyOwogfQogCiAvKiBvcGVyYXRvcnMgZm9yIGJvdGggcGxheWJhY2sgYW5kIGNhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwppbmRleCA4M2U2YzEzLi5hM2YwMmRkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiaW5wdXQuaCIKIAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xOSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjIwIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wzfSwiCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2JhdWRpby5oCmluZGV4IDhlN2Y3ODkuLmU5YTNhOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC0yMTAsNyArMjEwLDcgQEAKIC8qCiAgKi8KIAotI2RlZmluZSBjb21iaW5lX3dvcmQocykgICAgKCgqcykgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCisjZGVmaW5lIGNvbWJpbmVfd29yZChzKSAgICAoKCoocykpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzFdIDw8IDgpKQogI2RlZmluZSBjb21iaW5lX3RyaXBsZShzKSAgKGNvbWJpbmVfd29yZChzKSB8ICgodW5zaWduZWQgaW50KShzKVsyXSA8PCAxNikpCiAjZGVmaW5lIGNvbWJpbmVfcXVhZChzKSAgICAoY29tYmluZV90cmlwbGUocykgfCAoKHVuc2lnbmVkIGludCkocylbM10gPDwgMjQpKQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1iZW5jaC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1iZW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1MjVhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJlbmNoLnR4dApAQCAtMCwwICsxLDEyMCBAQAorcGVyZi1iZW5jaCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtYmVuY2ggLSBHZW5lcmFsIGZyYW1ld29yayBmb3IgYmVuY2htYXJrIHN1aXRlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGJlbmNoJyBbPGNvbW1vbiBvcHRpb25zPl0gPHN1YnN5c3RlbT4gPHN1aXRlPiBbPG9wdGlvbnM+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgJ3BlcmYgYmVuY2gnIGNvbW1hbmQgaXMgZ2VuZXJhbCBmcmFtZXdvcmsgZm9yIGJlbmNobWFyayBzdWl0ZXMuCisKK0NPTU1PTiBPUFRJT05TCistLS0tLS0tLS0tLS0tLQorLWY6OgorLS1mb3JtYXQ9OjoKK1NwZWNpZnkgZm9ybWF0IHN0eWxlLgorQ3VycmVudCBhdmFpbGFibGUgZm9ybWF0IHN0eWxlcyBhcmUsCisKKydkZWZhdWx0Jzo6CitEZWZhdWx0IHN0eWxlLiBUaGlzIGlzIG1haW5seSBmb3IgaHVtYW4gcmVhZGluZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBwZXJmIGJlbmNoIHNjaGVkIHBpcGUgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoIG5vIHN0eWxlIHNwZWNpZnkKKyhleGVjdXRpbmcgMTAwMDAwMCBwaXBlIG9wZXJhdGlvbnMgYmV0d2VlbiB0d28gdGFza3MpCisgICAgICAgIFRvdGFsIHRpbWU6NS44NTUgc2VjCisgICAgICAgICAgICAgICAgNS44NTUwNjEgdXNlY3Mvb3AKKwkJMTcwNzkyIG9wcy9zZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnc2ltcGxlJzo6CitUaGlzIHNpbXBsZSBzdHlsZSBpcyBmcmllbmRseSBmb3IgYXV0b21hdGVkCitwcm9jZXNzaW5nIGJ5IHNjcmlwdHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgcGVyZiBiZW5jaCAtLWZvcm1hdD1zaW1wbGUgc2NoZWQgcGlwZSAgICAgICMgc3BlY2lmaWVkIHNpbXBsZQorNS45ODgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTVUJTWVNURU0KKy0tLS0tLS0tLQorCisnc2NoZWQnOjoKKwlTY2hlZHVsZXIgYW5kIElQQyBtZWNoYW5pc21zLgorCitTVUlURVMgRk9SICdzY2hlZCcKK35+fn5+fn5+fn5+fn5+fn5+fgorKm1lc3NhZ2luZyo6OgorU3VpdGUgZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2Ugb2Ygc2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtcy4KK0Jhc2VkIG9uIGhhY2tiZW5jaCBieSBSdXN0eSBSdXNzZWxsLgorCitPcHRpb25zIG9mICpwaXBlKgorXl5eXl5eXl5eXl5eXl5eXl4KKy1wOjoKKy0tcGlwZTo6CitVc2UgcGlwZSgpIGluc3RlYWQgb2Ygc29ja2V0cGFpcigpCisKKy10OjoKKy0tdGhyZWFkOjoKK0JlIG11bHRpIHRocmVhZCBpbnN0ZWFkIG9mIG11bHRpIHByb2Nlc3MKKworLWc6OgorLS1ncm91cD06OgorU3BlY2lmeSBudW1iZXIgb2YgZ3JvdXBzCisKKy1sOjoKKy0tbG9vcD06OgorU3BlY2lmeSBudW1iZXIgb2YgbG9vcHMKKworRXhhbXBsZSBvZiAqbWVzc2FnaW5nKgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgcGVyZiBiZW5jaCBzY2hlZCBtZXNzYWdpbmcgICAgICAgICAgICAgICAgICMgcnVuIHdpdGggZGVmYXVsdAorb3B0aW9ucyAoMjAgc2VuZGVyIGFuZCByZWNlaXZlciBwcm9jZXNzZXMgcGVyIGdyb3VwKQorKDEwIGdyb3VwcyA9PSA0MDAgcHJvY2Vzc2VzIHJ1bikKKworICAgICAgVG90YWwgdGltZTowLjMwOCBzZWMKKworJSBwZXJmIGJlbmNoIHNjaGVkIG1lc3NhZ2luZyAtdCAtZyAyMCAgICAgICAgIyBiZSBtdWx0aS10aHJlYWQsd2l0aCAyMCBncm91cHMKKygyMCBzZW5kZXIgYW5kIHJlY2VpdmVyIHRocmVhZHMgcGVyIGdyb3VwKQorKDIwIGdyb3VwcyA9PSA4MDAgdGhyZWFkcyBydW4pCisKKyAgICAgIFRvdGFsIHRpbWU6MC41ODIgc2VjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKnBpcGUqOjoKK1N1aXRlIGZvciBwaXBlKCkgc3lzdGVtIGNhbGwuCitCYXNlZCBvbiBwaXBlLXRlc3QtMW0uYyBieSBJbmdvIE1vbG5hci4KKworT3B0aW9ucyBvZiAqcGlwZSoKK15eXl5eXl5eXl5eXl5eXl5eCistbDo6CistLWxvb3A9OjoKK1NwZWNpZnkgbnVtYmVyIG9mIGxvb3BzLgorCitFeGFtcGxlIG9mICpwaXBlKgorXl5eXl5eXl5eXl5eXl5eXl4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislIHBlcmYgYmVuY2ggc2NoZWQgcGlwZQorKGV4ZWN1dGluZyAxMDAwMDAwIHBpcGUgb3BlcmF0aW9ucyBiZXR3ZWVuIHR3byB0YXNrcykKKworICAgICAgICBUb3RhbCB0aW1lOjguMDkxIHNlYworICAgICAgICAgICAgICAgIDguMDkxODMzIHVzZWNzL29wCisgICAgICAgICAgICAgICAgMTIzNTgxIG9wcy9zZWMKKworJSBwZXJmIGJlbmNoIHNjaGVkIHBpcGUgLWwgMTAwMCAgICAgICAgICAgICAgIyBsb29wIDEwMDAKKyhleGVjdXRpbmcgMTAwMCBwaXBlIG9wZXJhdGlvbnMgYmV0d2VlbiB0d28gdGFza3MpCisKKyAgICAgICAgVG90YWwgdGltZTowLjAxNiBzZWMKKyAgICAgICAgICAgICAgICAxNi45NDgwMDAgdXNlY3Mvb3AKKyAgICAgICAgICAgICAgICA1OTAwNCBvcHMvc2VjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWxpc3QudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI2NDJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1saXN0LnR4dApAQCAtMCwwICsxLDM0IEBACitwZXJmLWJ1aWxkaWQtbGlzdCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1idWlsZGlkLWxpc3QgLSBMaXN0IHRoZSBidWlsZGlkcyBpbiBhIHBlcmYuZGF0YSBmaWxlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgYnVpbGRpZC1saXN0IDxvcHRpb25zPicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGJ1aWxkaWRzIGZvdW5kIGluIGEgcGVyZi5kYXRhIGZpbGUsIHNvIHRoYXQgb3RoZXIKK3Rvb2xzIGNhbiBiZSB1c2VkIHRvIGZldGNoIHBhY2thZ2VzIHdpdGggbWF0Y2hpbmcgc3ltYm9sIHRhYmxlcyBmb3IgdXNlIGJ5CitwZXJmIHJlcG9ydC4KKworT1BUSU9OUworLS0tLS0tLQorLWk6OgorLS1pbnB1dD06OgorICAgICAgICBJbnB1dCBmaWxlIG5hbWUuIChkZWZhdWx0OiBwZXJmLmRhdGEpCistZjo6CistLWZvcmNlOjoKKwlEb24ndCBkbyBvd25lcnNoaXAgdmFsaWRhdGlvbi4KKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgbW9yZSB2ZXJib3NlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRvcFsxXSwKK2xpbmtwZXJmOnBlcmYtcmVwb3J0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MDU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dApAQCAtMCwwICsxLDQ5IEBACitwZXJmLXByb2JlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtcHJvYmUgLSBEZWZpbmUgbmV3IGR5bmFtaWMgdHJhY2Vwb2ludHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBwcm9iZScgW29wdGlvbnNdIC0tYWRkICdQUk9CRScgWy0tYWRkICdQUk9CRScgLi4uXQorb3IKKydwZXJmIHByb2JlJyBbb3B0aW9uc10gJ1BST0JFJyBbJ1BST0JFJyAuLi5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZGVmaW5lcyBkeW5hbWljIHRyYWNlcG9pbnQgZXZlbnRzLCBieSBzeW1ib2wgYW5kIHJlZ2lzdGVycword2l0aG91dCBkZWJ1Z2luZm8sIG9yIGJ5IEMgZXhwcmVzc2lvbnMgKEMgbGluZSBudW1iZXJzLCBDIGZ1bmN0aW9uIG5hbWVzLAorYW5kIEMgbG9jYWwgdmFyaWFibGVzKSB3aXRoIGRlYnVnaW5mby4KKworCitPUFRJT05TCistLS0tLS0tCistazo6CistLXZtbGludXg9UEFUSDo6CisJU3BlY2lmeSB2bWxpbnV4IHBhdGggd2hpY2ggaGFzIGRlYnVnaW5mbyAoRHdhcmYgYmluYXJ5KS4KKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgbW9yZSB2ZXJib3NlIChzaG93IHBhcnNlZCBhcmd1bWVudHMsIGV0YykuCisKKy1hOjoKKy0tYWRkOjoKKwlEZWZpbmUgYSBwcm9iZSBwb2ludCAoc2VlIFBST0JFIFNZTlRBWCBmb3IgZGV0YWlsKQorCitQUk9CRSBTWU5UQVgKKy0tLS0tLS0tLS0tLQorUHJvYmUgcG9pbnRzIGFyZSBkZWZpbmVkIGJ5IGZvbGxvd2luZyBzeW50YXguCisKKyAiRlVOQ1srT0ZGU3w6UkxOfCVyZXR1cm5dW0BTUkNdfFNSQzpBTE4gW0FSRyAuLi5dIgorCisnRlVOQycgc3BlY2lmaWVzIGEgcHJvYmVkIGZ1bmN0aW9uIG5hbWUsIGFuZCBpdCBtYXkgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOyAnK09GRlMnIGlzIHRoZSBvZmZzZXQgZnJvbSBmdW5jdGlvbiBlbnRyeSBhZGRyZXNzIGluIGJ5dGVzLCAnUkxOJyBpcyB0aGUgcmVsYXRpdmUtbGluZSBudW1iZXIgZnJvbSBmdW5jdGlvbiBlbnRyeSBsaW5lLCBhbmQgJyVyZXR1cm4nIG1lYW5zIHRoYXQgaXQgcHJvYmVzIGZ1bmN0aW9uIHJldHVybi4gSW4gYWRkaXRpb24sICdTUkMnIHNwZWNpZmllcyBhIHNvdXJjZSBmaWxlIHdoaWNoIGhhcyB0aGF0IGZ1bmN0aW9uLgorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgcHJvYmUgcG9pbnQgYnkgdGhlIHNvdXJjZSBsaW5lIG51bWJlciBieSB1c2luZyAnU1JDOkFMTicgc3ludGF4LCB3aGVyZSAnU1JDJyBpcyB0aGUgc291cmNlIGZpbGUgcGF0aCBhbmQgJ0FMTicgaXMgdGhlIGxpbmUgbnVtYmVyLgorJ0FSRycgc3BlY2lmaWVzIHRoZSBhcmd1bWVudHMgb2YgdGhpcyBwcm9iZSBwb2ludC4gWW91IGNhbiB1c2UgdGhlIG5hbWUgb2YgbG9jYWwgdmFyaWFibGUsIG9yIGtwcm9iZS10cmFjZXIgYXJndW1lbnQgZm9ybWF0IChlLmcuICRyZXR2YWwsICVheCwgZXRjKS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmLXRyYWNlWzFdLCBsaW5rcGVyZjpwZXJmLXJlY29yZFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKaW5kZXggNTlmMGI4NC4uOWRjY2IxOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CkBAIC0yNCwxMSArMjQsMTEgQEAKIC0tZHNvcz06OgogCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBkc29zLiBDU1YgdGhhdCB1bmRlcnN0YW5kcwogCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLgotLW4KLS0tc2hvdy1uci1zYW1wbGVzCistbjo6CistLXNob3ctbnItc2FtcGxlczo6CiAJU2hvdyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIGVhY2ggc3ltYm9sCi0tVAotLS10aHJlYWRzCistVDo6CistLXRocmVhZHM6OgogCVNob3cgcGVyLXRocmVhZCBldmVudCBjb3VudGVycwogLUM6OgogLS1jb21tcz06OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKaW5kZXggYTc5MTAwOS4uNGIxNzg4MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CkBAIC0zMSw5ICszMSwxMiBAQAogLXc6OgogLS13aWR0aD06OgogICAgICAgICBTZWxlY3QgdGhlIHdpZHRoIG9mIHRoZSBTVkcgZmlsZSAoZGVmYXVsdDogMTAwMCkKLS1wOjoKKy1QOjoKIC0tcG93ZXItb25seTo6CiAgICAgICAgIE9ubHkgb3V0cHV0IHRoZSBDUFUgcG93ZXIgc2VjdGlvbiBvZiB0aGUgZGlhZ3JhbQorLXA6OgorLS1wcm9jZXNzOjoKKyAgICAgICAgU2VsZWN0IHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSwgYnkgbmFtZSBvciBQSUQKIAogCiBTRUUgQUxTTwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMTA2YzE1MC4uZDcxOThjNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0xNDUsNiArMTQ1LDggQEAKICMgRGVmaW5lIE5PX0VYVEVSTkFMX0dSRVAgaWYgeW91IGRvbid0IHdhbnQgInBlcmYgZ3JlcCIgdG8gZXZlciBjYWxsCiAjIHlvdXIgZXh0ZXJuYWwgZ3JlcCAoZS5nLiwgaWYgeW91ciBzeXN0ZW0gbGFja3MgZ3JlcCwgaWYgaXRzIGdyZXAgaXMKICMgYnJva2VuLCBvciBzcGF3bmluZyBleHRlcm5hbCBwcm9jZXNzIGlzIHNsb3dlciB0aGFuIGJ1aWx0LWluIGdyZXAgcGVyZiBoYXMpLgorIworIyBEZWZpbmUgTERGTEFHUz0tc3RhdGljIHRvIGJ1aWxkIGEgc3RhdGljIGJpbmFyeS4KIAogUEVSRi1WRVJTSU9OLUZJTEU6IC5GT1JDRS1QRVJGLVZFUlNJT04tRklMRQogCUAkKFNIRUxMX1BBVEgpIHV0aWwvUEVSRi1WRVJTSU9OLUdFTgpAQCAtMTY0LDEwICsxNjYsMTIgQEAKICAgTUJJVFMgOj0gLW0zMgogZWxzZQogICAjCi0gICMgSWYgd2UncmUgb24gYSA2NC1iaXQga2VybmVsLCB1c2UgLW02NDoKKyAgIyBJZiB3ZSdyZSBvbiBhIDY0LWJpdCBrZXJuZWwgKGV4Y2VwdCBpYTY0KSwgdXNlIC1tNjQ6CiAgICMKLSAgaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKLSAgICBNQklUUyA6PSAtbTY0CisgIGlmbmVxICgkKHVuYW1lX00pLGlhNjQpCisgICAgaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKKyAgICAgIE1CSVRTIDo9IC1tNjQKKyAgICBlbmRpZgogICBlbmRpZgogZW5kaWYKIApAQCAtMTc3LDggKzE4MSw3IEBACiAjIEluY2x1ZGUgc2FuZXIgd2FybmluZ3MgaGVyZSwgd2hpY2ggY2FuIGNhdGNoIGJ1Z3M6CiAjCiAKLUVYVFJBX1dBUk5JTkdTIDo9IC1XY2FzdC1hbGlnbgotRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQKK0VYVFJBX1dBUk5JTkdTIDo9IC1XZm9ybWF0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC1zZWN1cml0eQogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQteTJrCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3NoYWRvdwpAQCAtMjAxLDggKzIwNCwxNSBAQAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdHJpY3QtcHJvdG90eXBlcwogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQKIAotQ0ZMQUdTID0gJChNQklUUykgLWdnZGIzIC1XYWxsIC1XZXh0cmEgLXN0ZD1nbnU5OSAtV2Vycm9yIC1PNiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKQotTERGTEFHUyA9IC1scHRocmVhZCAtbHJ0IC1sZWxmIC1sbQoraWZlcSAoIiQob3JpZ2luIERFQlVHKSIsICJjb21tYW5kIGxpbmUiKQorICBQRVJGX0RFQlVHID0gJChERUJVRykKK2VuZGlmCitpZm5kZWYgUEVSRl9ERUJVRworICBDRkxBR1NfT1BUSU1JWkUgPSAtTzYKK2VuZGlmCisKK0NGTEFHUyA9ICQoTUJJVFMpIC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAkKENGTEFHU19PUFRJTUlaRSkgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKQorRVhUTElCUyA9IC1scHRocmVhZCAtbHJ0IC1sZWxmIC1sbQogQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKQogQUxMX0xERkxBR1MgPSAkKExERkxBR1MpCiBTVFJJUCA/PSBzdHJpcApAQCAtMjUzLDYgKzI2Myw5IEBACiAjIGV4cGxpY2l0bHkgd2hhdCBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgZm9yLiBGaXggdGhpcyB1cCBmb3IgeW91cnMuLgogU1BBUlNFX0ZMQUdTID0gLURfX0JJR19FTkRJQU5fXyAtRF9fcG93ZXJwY19fCiAKK2lmZXEgKCQoc2hlbGwgc2ggLWMgImVjaG8gJ2ludCBmb28odm9pZCkge2NoYXIgWFsyXTsgcmV0dXJuIDM7fScgfCAkKENDKSAteCBjIC1jIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC0gLW8gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKyAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKK2VuZGlmCiAKIAogIyMjIC0tLSBFTkQgQ09ORklHVVJBVElPTiBTRUNUSU9OIC0tLQpAQCAtMzI4LDggKzM0MSwyNyBAQAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvbGlzdC5oCitMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9jdHlwZS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgva2VybmVsLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYml0b3BzLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vc3dhYi5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3N5c3RlbS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAogTElCX0ggKz0gcGVyZi5oCitMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAogTElCX0ggKz0gdXRpbC9ldmVudC5oCiBMSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaApAQCAtMzU1LDcgKzM4Nyw5IEBACiBMSUJfT0JKUyArPSB1dGlsL2FsaWFzLm8KIExJQl9PQkpTICs9IHV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9IHV0aWwvY3R5cGUubworTElCX09CSlMgKz0gdXRpbC9kZWJ1Z2ZzLm8KIExJQl9PQkpTICs9IHV0aWwvZW52aXJvbm1lbnQubworTElCX09CSlMgKz0gdXRpbC9ldmVudC5vCiBMSUJfT0JKUyArPSB1dGlsL2V4ZWNfY21kLm8KIExJQl9PQkpTICs9IHV0aWwvaGVscC5vCiBMSUJfT0JKUyArPSB1dGlsL2xldmVuc2h0ZWluLm8KQEAgLTM2Myw2ICszOTcsOSBAQAogTElCX09CSlMgKz0gdXRpbC9wYXJzZS1ldmVudHMubwogTElCX09CSlMgKz0gdXRpbC9wYXRoLm8KIExJQl9PQkpTICs9IHV0aWwvcmJ0cmVlLm8KK0xJQl9PQkpTICs9IHV0aWwvYml0bWFwLm8KK0xJQl9PQkpTICs9IHV0aWwvaHdlaWdodC5vCitMSUJfT0JKUyArPSB1dGlsL2ZpbmRfbmV4dF9iaXQubwogTElCX09CSlMgKz0gdXRpbC9ydW4tY29tbWFuZC5vCiBMSUJfT0JKUyArPSB1dGlsL3F1b3RlLm8KIExJQl9PQkpTICs9IHV0aWwvc3RyYnVmLm8KQEAgLTM4OSw4ICs0MjYsMTYgQEAKIExJQl9PQkpTICs9IHV0aWwvZGF0YV9tYXAubwogCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hbm5vdGF0ZS5vCisKK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLWJlbmNoLm8KKworIyBCZW5jaG1hcmsgbW9kdWxlcworQlVJTFRJTl9PQkpTICs9IGJlbmNoL3NjaGVkLW1lc3NhZ2luZy5vCitCVUlMVElOX09CSlMgKz0gYmVuY2gvc2NoZWQtcGlwZS5vCisKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWhlbHAubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tc2NoZWQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tYnVpbGRpZC1saXN0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxpc3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVjb3JkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcG9ydC5vCkBAIC0zOTgsNiArNDQzLDggQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRpbWVjaGFydC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10b3AubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdHJhY2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcHJvYmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4ta21lbS5vCiAKIFBFUkZMSUJTID0gJChMSUJfRklMRSkKIApAQCAtNDI4LDI3ICs0NzUsNDQgQEAKIAlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQoraWZlcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8Z251L2xpYmMtdmVyc2lvbi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgY29uc3QgY2hhciAqIHZlcnNpb24gPSBnbnVfZ2V0X2xpYmNfdmVyc2lvbigpOyByZXR1cm4gKGxvbmcpdmVyc2lvbjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwltc2cgOj0gJChlcnJvciBObyBnbnUvbGliYy12ZXJzaW9uLmggZm91bmQsIHBsZWFzZSBpbnN0YWxsIGdsaWJjLWRldltlbF0pOworZW5kaWYKKworCWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCQlCQVNJQ19DRkxBR1MgKz0gLURMSUJFTEZfTk9fTU1BUAorCWVuZGlmCitlbHNlCiAJbXNnIDo9ICQoZXJyb3IgTm8gbGliZWxmLmgvbGliZWxmIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBsaWJlbGYtZGV2L2VsZnV0aWxzLWxpYmVsZi1kZXZlbCBhbmQgZ2xpYmMtZGV2W2VsXSk7CiBlbmRpZgogCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZHdhcmYvZHdhcmYuaD4nOyBlY2hvICdcI2luY2x1ZGUgPGxpYmR3YXJmL2xpYmR3YXJmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBEd2FyZl9EZWJ1ZyBkYmc7IER3YXJmX0Vycm9yIGVycjsgRHdhcmZfUmFuZ2VzICpybmc7IGR3YXJmX2luaXQoMCwgRFdfRExDX1JFQUQsIDAsIDAsICZkYmcsICZlcnIpOyBkd2FyZl9nZXRfcmFuZ2VzKGRiZywgMCwgJnJuZywgMCwgMCwgJmVycik7IHJldHVybiAobG9uZylkYmc7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1sZHdhcmYgLWxlbGYgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwltc2cgOj0gJCh3YXJuaW5nIE5vIGxpYmR3YXJmLmggZm91bmQgb3Igb2xkIGxpYmR3YXJmLmggZm91bmQsIGRpc2FibGVzIGR3YXJmIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGxpYmR3YXJmLWRldi9saWJkd2FyZi1kZXZlbCA+PSAyMDA4MTIzMSk7CisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCRFdBUkYKK2Vsc2UKKwlFWFRMSUJTICs9IC1sZWxmIC1sZHdhcmYKKwlMSUJfSCArPSB1dGlsL3Byb2JlLWZpbmRlci5oCisJTElCX09CSlMgKz0gdXRpbC9wcm9iZS1maW5kZXIubworZW5kaWYKKwogaWZkZWYgTk9fREVNQU5HTEUKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERU1BTkdMRQogZWxzZQotCWhhc19iZmQgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgLWxiZmQgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKQorCWhhc19iZmQgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpCiAKIAlpZmVxICgkKGhhc19iZmQpLHkpCiAJCUVYVExJQlMgKz0gLWxiZmQKIAllbHNlCi0JCWhhc19iZmRfaWJlcnR5IDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGJmZC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgYmZkX2RlbWFuZ2xlKDAsIDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpIC1sYmZkIC1saWJlcnR5ID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IikKKwkJaGFzX2JmZF9pYmVydHkgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCAtbGliZXJ0eSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpCiAJCWlmZXEgKCQoaGFzX2JmZF9pYmVydHkpLHkpCiAJCQlFWFRMSUJTICs9IC1sYmZkIC1saWJlcnR5CiAJCWVsc2UKLQkJCWhhc19iZmRfaWJlcnR5X3ogOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgLWxiZmQgLWxpYmVydHkgLWx6ID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IikKKwkJCWhhc19iZmRfaWJlcnR5X3ogOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCAtbGliZXJ0eSAtbHogPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKQogCQkJaWZlcSAoJChoYXNfYmZkX2liZXJ0eV96KSx5KQogCQkJCUVYVExJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CiAJCQllbHNlCi0JCQkJaGFzX2NwbHVzX2RlbWFuZ2xlIDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdleHRlcm4gY2hhciAqY3BsdXNfZGVtYW5nbGUoY29uc3QgY2hhciAqLCBpbnQpOyc7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgY3BsdXNfZGVtYW5nbGUoMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgLWxpYmVydHkgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKQorCQkJCWhhc19jcGx1c19kZW1hbmdsZSA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsnOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGNwbHVzX2RlbWFuZ2xlKDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxpYmVydHkgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKQogCQkJCWlmZXEgKCQoaGFzX2NwbHVzX2RlbWFuZ2xlKSx5KQogCQkJCQlFWFRMSUJTICs9IC1saWJlcnR5CiAJCQkJCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQ1BMVVNfREVNQU5HTEUKQEAgLTc5MCw2ICs4NTQsMTkgQEAKIHV0aWwvcmJ0cmVlLm86IC4uLy4uL2xpYi9yYnRyZWUuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9yYnRyZWUubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CiAKKyMgc29tZSBwZXJmIHdhcm5pbmcgcG9saWNpZXMgY2FuJ3QgZml0IHRvIGxpYi9iaXRtYXAuYywgZWc6IGl0IHdhcm5zIGFib3V0IHZhcmlhYmxlIHNoYWRvd2luZworIyBmcm9tIDxzdHJpbmcuaD4gdGhhdCBjb21lcyBmcm9tIGtlcm5lbCBoZWFkZXJzIHdyYXBwaW5nLgorS0JJVE1BUF9GTEFHUz1gZWNobyAkKEFMTF9DRkxBR1MpIHwgc2VkIHMvLVdzaGFkb3cvLyB8IHNlZCBzLy1Xc3dpdGNoLWRlZmF1bHQvLyB8IHNlZCBzLy1XZXh0cmEvL2AKKwordXRpbC9iaXRtYXAubzogLi4vLi4vbGliL2JpdG1hcC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2JpdG1hcC5vIC1jICQoS0JJVE1BUF9GTEFHUykgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKKwordXRpbC9od2VpZ2h0Lm86IC4uLy4uL2xpYi9od2VpZ2h0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvaHdlaWdodC5vIC1jICQoQUxMX0NGTEFHUykgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKKwordXRpbC9maW5kX25leHRfYml0Lm86IC4uLy4uL2xpYi9maW5kX25leHRfYml0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvZmluZF9uZXh0X2JpdC5vIC1jICQoQUxMX0NGTEFHUykgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKKwogcGVyZi0lJFg6ICUubyAkKFBFUkZMSUJTKQogCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2JlbmNoL2JlbmNoLmggYi90b29scy9wZXJmL2JlbmNoL2JlbmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiZDhkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvYmVuY2guaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIEJFTkNIX0gKKyNkZWZpbmUgQkVOQ0hfSAorCitleHRlcm4gaW50IGJlbmNoX3NjaGVkX21lc3NhZ2luZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGJlbmNoX3NjaGVkX3BpcGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworCisjZGVmaW5lIEJFTkNIX0ZPUk1BVF9ERUZBVUxUX1NUUgkiZGVmYXVsdCIKKyNkZWZpbmUgQkVOQ0hfRk9STUFUX0RFRkFVTFQJCTAKKyNkZWZpbmUgQkVOQ0hfRk9STUFUX1NJTVBMRV9TVFIJCSJzaW1wbGUiCisjZGVmaW5lIEJFTkNIX0ZPUk1BVF9TSU1QTEUJCTEKKworI2RlZmluZSBCRU5DSF9GT1JNQVRfVU5LTk9XTgkJLTEKKworZXh0ZXJuIGludCBiZW5jaF9mb3JtYXQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1tZXNzYWdpbmcuYyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtbWVzc2FnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YTJhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtbWVzc2FnaW5nLmMKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKgorICogYnVpbHRpbi1iZW5jaC1tZXNzYWdpbmcuYworICoKKyAqIG1lc3NhZ2luZzogQmVuY2htYXJrIGZvciBzY2hlZHVsZXIgYW5kIElQQyBtZWNoYW5pc21zCisgKgorICogQmFzZWQgb24gaGFja2JlbmNoIGJ5IFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KKyAqIFBvcnRlZCB0byBwZXJmIGJ5IEhpdG9zaGkgTWl0YWtlIDxtaXRha2VAZGNsLmluZm8ud2FzZWRhLmFjLmpwPgorICoKKyAqLworCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwvdXRpbC5oIgorI2luY2x1ZGUgIi4uL3V0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgIi4uL2J1aWx0aW4uaCIKKyNpbmNsdWRlICJiZW5jaC5oIgorCisvKiBUZXN0IGdyb3VwcyBvZiAyMCBwcm9jZXNzZXMgc3ByYXlpbmcgdG8gMjAgcmVjZWl2ZXJzICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNkZWZpbmUgREFUQVNJWkUgMTAwCisKK3N0YXRpYyBpbnQgdXNlX3BpcGVzID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHRocmVhZF9tb2RlID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2dyb3VwcyA9IDEwOworCitzdHJ1Y3Qgc2VuZGVyX2NvbnRleHQgeworCXVuc2lnbmVkIGludCBudW1fZmRzOworCWludCByZWFkeV9vdXQ7CisJaW50IHdha2VmZDsKKwlpbnQgb3V0X2Zkc1swXTsKK307CisKK3N0cnVjdCByZWNlaXZlcl9jb250ZXh0IHsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhY2tldHM7CisJaW50IGluX2Zkc1syXTsKKwlpbnQgcmVhZHlfb3V0OworCWludCB3YWtlZmQ7Cit9OworCitzdGF0aWMgdm9pZCBiYXJmKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIChlcnJvcjogJXMpXG4iLCBtc2csIHN0cmVycm9yKGVycm5vKSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgZmRwYWlyKGludCBmZHNbMl0pCit7CisJaWYgKHVzZV9waXBlcykgeworCQlpZiAocGlwZShmZHMpID09IDApCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIGZkcykgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwliYXJmKHVzZV9waXBlcyA/ICJwaXBlKCkiIDogInNvY2tldHBhaXIoKSIpOworfQorCisvKiBCbG9jayB1bnRpbCB3ZSdyZSByZWFkeSB0byBnbyAqLworc3RhdGljIHZvaWQgcmVhZHkoaW50IHJlYWR5X291dCwgaW50IHdha2VmZCkKK3sKKwljaGFyIGR1bW15OworCXN0cnVjdCBwb2xsZmQgcG9sbGZkID0geyAuZmQgPSB3YWtlZmQsIC5ldmVudHMgPSBQT0xMSU4gfTsKKworCS8qIFRlbGwgdGhlbSB3ZSdyZSByZWFkeS4gKi8KKwlpZiAod3JpdGUocmVhZHlfb3V0LCAmZHVtbXksIDEpICE9IDEpCisJCWJhcmYoIkNMSUVOVDogcmVhZHkgd3JpdGUiKTsKKworCS8qIFdhaXQgZm9yICJHTyIgc2lnbmFsICovCisJaWYgKHBvbGwoJnBvbGxmZCwgMSwgLTEpICE9IDEpCisJCWJhcmYoInBvbGwiKTsKK30KKworLyogU2VuZGVyIHNwcmF5cyBsb29wcyBtZXNzYWdlcyBkb3duIGVhY2ggZmlsZSBkZXNjcmlwdG9yICovCitzdGF0aWMgdm9pZCAqc2VuZGVyKHN0cnVjdCBzZW5kZXJfY29udGV4dCAqY3R4KQoreworCWNoYXIgZGF0YVtEQVRBU0laRV07CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlyZWFkeShjdHgtPnJlYWR5X291dCwgY3R4LT53YWtlZmQpOworCisJLyogTm93IHB1bXAgdG8gZXZlcnkgcmVjZWl2ZXIuICovCisJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGN0eC0+bnVtX2ZkczsgaisrKSB7CisJCQlpbnQgcmV0LCBkb25lID0gMDsKKworYWdhaW46CisJCQlyZXQgPSB3cml0ZShjdHgtPm91dF9mZHNbal0sIGRhdGEgKyBkb25lLAorCQkJCSAgICBzaXplb2YoZGF0YSktZG9uZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQliYXJmKCJTRU5ERVI6IHdyaXRlIik7CisJCQlkb25lICs9IHJldDsKKwkJCWlmIChkb25lIDwgREFUQVNJWkUpCisJCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisKKy8qIE9uZSByZWNlaXZlciBwZXIgZmQgKi8KK3N0YXRpYyB2b2lkICpyZWNlaXZlcihzdHJ1Y3QgcmVjZWl2ZXJfY29udGV4dCogY3R4KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF0aHJlYWRfbW9kZSkKKwkJY2xvc2UoY3R4LT5pbl9mZHNbMV0pOworCisJLyogV2FpdCBmb3Igc3RhcnQuLi4gKi8KKwlyZWFkeShjdHgtPnJlYWR5X291dCwgY3R4LT53YWtlZmQpOworCisJLyogUmVjZWl2ZSB0aGVtIGFsbCAqLworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWNrZXRzOyBpKyspIHsKKwkJY2hhciBkYXRhW0RBVEFTSVpFXTsKKwkJaW50IHJldCwgZG9uZSA9IDA7CisKK2FnYWluOgorCQlyZXQgPSByZWFkKGN0eC0+aW5fZmRzWzBdLCBkYXRhICsgZG9uZSwgREFUQVNJWkUgLSBkb25lKTsKKwkJaWYgKHJldCA8IDApCisJCQliYXJmKCJTRVJWRVI6IHJlYWQiKTsKKwkJZG9uZSArPSByZXQ7CisJCWlmIChkb25lIDwgREFUQVNJWkUpCisJCQlnb3RvIGFnYWluOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgcHRocmVhZF90IGNyZWF0ZV93b3JrZXIodm9pZCAqY3R4LCB2b2lkICooKmZ1bmMpKHZvaWQgKikpCit7CisJcHRocmVhZF9hdHRyX3QgYXR0cjsKKwlwdGhyZWFkX3QgY2hpbGRpZDsKKwlpbnQgZXJyOworCisJaWYgKCF0aHJlYWRfbW9kZSkgeworCQkvKiBwcm9jZXNzIG1vZGUgKi8KKwkJLyogRm9yayB0aGUgcmVjZWl2ZXIuICovCisJCXN3aXRjaCAoZm9yaygpKSB7CisJCWNhc2UgLTE6CisJCQliYXJmKCJmb3JrKCkiKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQkoKmZ1bmMpIChjdHgpOworCQkJZXhpdCgwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gKHB0aHJlYWRfdCkwOworCX0KKworCWlmIChwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cikgIT0gMCkKKwkJYmFyZigicHRocmVhZF9hdHRyX2luaXQ6Iik7CisKKyNpZm5kZWYgX19pYTY0X18KKwlpZiAocHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgUFRIUkVBRF9TVEFDS19NSU4pICE9IDApCisJCWJhcmYoInB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUiKTsKKyNlbmRpZgorCisJZXJyID0gcHRocmVhZF9jcmVhdGUoJmNoaWxkaWQsICZhdHRyLCBmdW5jLCBjdHgpOworCWlmIChlcnIgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXN0cmVycm9yKGVyciksIGVycik7CisJCWV4aXQoLTEpOworCX0KKwlyZXR1cm4gY2hpbGRpZDsKK30KKworc3RhdGljIHZvaWQgcmVhcF93b3JrZXIocHRocmVhZF90IGlkKQoreworCWludCBwcm9jX3N0YXR1czsKKwl2b2lkICp0aHJlYWRfc3RhdHVzOworCisJaWYgKCF0aHJlYWRfbW9kZSkgeworCQkvKiBwcm9jZXNzIG1vZGUgKi8KKwkJd2FpdCgmcHJvY19zdGF0dXMpOworCQlpZiAoIVdJRkVYSVRFRChwcm9jX3N0YXR1cykpCisJCQlleGl0KDEpOworCX0gZWxzZSB7CisJCXB0aHJlYWRfam9pbihpZCwgJnRocmVhZF9zdGF0dXMpOworCX0KK30KKworLyogT25lIGdyb3VwIG9mIHNlbmRlcnMgYW5kIHJlY2VpdmVycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBncm91cChwdGhyZWFkX3QgKnB0aCwKKwkJdW5zaWduZWQgaW50IG51bV9mZHMsCisJCWludCByZWFkeV9vdXQsCisJCWludCB3YWtlZmQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNlbmRlcl9jb250ZXh0ICpzbmRfY3R4ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VuZGVyX2NvbnRleHQpCisJCQkrIG51bV9mZHMgKiBzaXplb2YoaW50KSk7CisKKwlpZiAoIXNuZF9jdHgpCisJCWJhcmYoIm1hbGxvYygpIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZkczsgaSsrKSB7CisJCWludCBmZHNbMl07CisJCXN0cnVjdCByZWNlaXZlcl9jb250ZXh0ICpjdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKKworCQlpZiAoIWN0eCkKKwkJCWJhcmYoIm1hbGxvYygpIik7CisKKworCQkvKiBDcmVhdGUgdGhlIHBpcGUgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciAqLworCQlmZHBhaXIoZmRzKTsKKworCQljdHgtPm51bV9wYWNrZXRzID0gbnVtX2ZkcyAqIGxvb3BzOworCQljdHgtPmluX2Zkc1swXSA9IGZkc1swXTsKKwkJY3R4LT5pbl9mZHNbMV0gPSBmZHNbMV07CisJCWN0eC0+cmVhZHlfb3V0ID0gcmVhZHlfb3V0OworCQljdHgtPndha2VmZCA9IHdha2VmZDsKKworCQlwdGhbaV0gPSBjcmVhdGVfd29ya2VyKGN0eCwgKHZvaWQgKilyZWNlaXZlcik7CisKKwkJc25kX2N0eC0+b3V0X2Zkc1tpXSA9IGZkc1sxXTsKKwkJaWYgKCF0aHJlYWRfbW9kZSkKKwkJCWNsb3NlKGZkc1swXSk7CisJfQorCisJLyogTm93IHdlIGhhdmUgYWxsIHRoZSBmZHMsIGZvcmsgdGhlIHNlbmRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZkczsgaSsrKSB7CisJCXNuZF9jdHgtPnJlYWR5X291dCA9IHJlYWR5X291dDsKKwkJc25kX2N0eC0+d2FrZWZkID0gd2FrZWZkOworCQlzbmRfY3R4LT5udW1fZmRzID0gbnVtX2ZkczsKKworCQlwdGhbbnVtX2ZkcytpXSA9IGNyZWF0ZV93b3JrZXIoc25kX2N0eCwgKHZvaWQgKilzZW5kZXIpOworCX0KKworCS8qIENsb3NlIHRoZSBmZHMgd2UgaGF2ZSBsZWZ0ICovCisJaWYgKCF0aHJlYWRfbW9kZSkKKwkJZm9yIChpID0gMDsgaSA8IG51bV9mZHM7IGkrKykKKwkJCWNsb3NlKHNuZF9jdHgtPm91dF9mZHNbaV0pOworCisJLyogUmV0dXJuIG51bWJlciBvZiBjaGlsZHJlbiB0byByZWFwICovCisJcmV0dXJuIG51bV9mZHMgKiAyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oJ3AnLCAicGlwZSIsICZ1c2VfcGlwZXMsCisJCSAgICAiVXNlIHBpcGUoKSBpbnN0ZWFkIG9mIHNvY2tldHBhaXIoKSIpLAorCU9QVF9CT09MRUFOKCd0JywgInRocmVhZCIsICZ0aHJlYWRfbW9kZSwKKwkJICAgICJCZSBtdWx0aSB0aHJlYWQgaW5zdGVhZCBvZiBtdWx0aSBwcm9jZXNzIiksCisJT1BUX0lOVEVHRVIoJ2cnLCAiZ3JvdXAiLCAmbnVtX2dyb3VwcywKKwkJICAgICJTcGVjaWZ5IG51bWJlciBvZiBncm91cHMiKSwKKwlPUFRfSU5URUdFUignbCcsICJsb29wIiwgJmxvb3BzLAorCQkgICAgIlNwZWNpZnkgbnVtYmVyIG9mIGxvb3BzIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJlbmNoX3NjaGVkX21lc3NhZ2VfdXNhZ2VbXSA9IHsKKwkicGVyZiBiZW5jaCBzY2hlZCBtZXNzYWdpbmcgPG9wdGlvbnM+IiwKKwlOVUxMCit9OworCitpbnQgYmVuY2hfc2NoZWRfbWVzc2FnaW5nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJdW5zaWduZWQgaW50IGksIHRvdGFsX2NoaWxkcmVuOworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBzdG9wLCBkaWZmOworCXVuc2lnbmVkIGludCBudW1fZmRzID0gMjA7CisJaW50IHJlYWR5ZmRzWzJdLCB3YWtlZmRzWzJdOworCWNoYXIgZHVtbXk7CisJcHRocmVhZF90ICpwdGhfdGFiOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywKKwkJCSAgICAgYmVuY2hfc2NoZWRfbWVzc2FnZV91c2FnZSwgMCk7CisKKwlwdGhfdGFiID0gbWFsbG9jKG51bV9mZHMgKiAyICogbnVtX2dyb3VwcyAqIHNpemVvZihwdGhyZWFkX3QpKTsKKwlpZiAoIXB0aF90YWIpCisJCWJhcmYoIm1haW46bWFsbG9jKCkiKTsKKworCWZkcGFpcihyZWFkeWZkcyk7CisJZmRwYWlyKHdha2VmZHMpOworCisJdG90YWxfY2hpbGRyZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1fZ3JvdXBzOyBpKyspCisJCXRvdGFsX2NoaWxkcmVuICs9IGdyb3VwKHB0aF90YWIrdG90YWxfY2hpbGRyZW4sIG51bV9mZHMsCisJCQkJCXJlYWR5ZmRzWzFdLCB3YWtlZmRzWzBdKTsKKworCS8qIFdhaXQgZm9yIGV2ZXJ5b25lIHRvIGJlIHJlYWR5ICovCisJZm9yIChpID0gMDsgaSA8IHRvdGFsX2NoaWxkcmVuOyBpKyspCisJCWlmIChyZWFkKHJlYWR5ZmRzWzBdLCAmZHVtbXksIDEpICE9IDEpCisJCQliYXJmKCJSZWFkaW5nIGZvciByZWFkeWZkcyIpOworCisJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CisKKwkvKiBLaWNrIHRoZW0gb2ZmICovCisJaWYgKHdyaXRlKHdha2VmZHNbMV0sICZkdW1teSwgMSkgIT0gMSkKKwkJYmFyZigiV3JpdGluZyB0byBzdGFydCB0aGVtIik7CisKKwkvKiBSZWFwIHRoZW0gYWxsICovCisJZm9yIChpID0gMDsgaSA8IHRvdGFsX2NoaWxkcmVuOyBpKyspCisJCXJlYXBfd29ya2VyKHB0aF90YWJbaV0pOworCisJZ2V0dGltZW9mZGF5KCZzdG9wLCBOVUxMKTsKKworCXRpbWVyc3ViKCZzdG9wLCAmc3RhcnQsICZkaWZmKTsKKworCXN3aXRjaCAoYmVuY2hfZm9ybWF0KSB7CisJY2FzZSBCRU5DSF9GT1JNQVRfREVGQVVMVDoKKwkJcHJpbnRmKCIjICVkIHNlbmRlciBhbmQgcmVjZWl2ZXIgJXMgcGVyIGdyb3VwXG4iLAorCQkgICAgICAgbnVtX2ZkcywgdGhyZWFkX21vZGUgPyAidGhyZWFkcyIgOiAicHJvY2Vzc2VzIik7CisJCXByaW50ZigiIyAlZCBncm91cHMgPT0gJWQgJXMgcnVuXG5cbiIsCisJCSAgICAgICBudW1fZ3JvdXBzLCBudW1fZ3JvdXBzICogMiAqIG51bV9mZHMsCisJCSAgICAgICB0aHJlYWRfbW9kZSA/ICJ0aHJlYWRzIiA6ICJwcm9jZXNzZXMiKTsKKwkJcHJpbnRmKCIgJTE0czogJWx1LiUwM2x1IFtzZWNdXG4iLCAiVG90YWwgdGltZSIsCisJCSAgICAgICBkaWZmLnR2X3NlYywgZGlmZi50dl91c2VjLzEwMDApOworCQlicmVhazsKKwljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6CisJCXByaW50ZigiJWx1LiUwM2x1XG4iLCBkaWZmLnR2X3NlYywgZGlmZi50dl91c2VjLzEwMDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiByZWFjaGluZyBoZXJlIGlzIHNvbWV0aGluZyBkaXNhc3RlciAqLworCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZm9ybWF0OiVkXG4iLCBiZW5jaF9mb3JtYXQpOworCQlleGl0KDEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jIGIvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICoKKyAqIGJ1aWx0aW4tYmVuY2gtcGlwZS5jCisgKgorICogcGlwZTogQmVuY2htYXJrIGZvciBwaXBlKCkKKyAqCisgKiBCYXNlZCBvbiBwaXBlLXRlc3QtMW0uYyBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqICBodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vbWluZ28vY2ZzLXNjaGVkdWxlci90b29scy9waXBlLXRlc3QtMW0uYworICogUG9ydGVkIHRvIHBlcmYgYnkgSGl0b3NoaSBNaXRha2UgPG1pdGFrZUBkY2wuaW5mby53YXNlZGEuYWMuanA+CisgKgorICovCisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC91dGlsLmgiCisjaW5jbHVkZSAiLi4vdXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiLi4vYnVpbHRpbi5oIgorI2luY2x1ZGUgImJlbmNoLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIExPT1BTX0RFRkFVTFQgMTAwMDAwMAorc3RhdGljIGludCBsb29wcyA9IExPT1BTX0RFRkFVTFQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfSU5URUdFUignbCcsICJsb29wIiwgJmxvb3BzLAorCQkgICAgIlNwZWNpZnkgbnVtYmVyIG9mIGxvb3BzIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJlbmNoX3NjaGVkX3BpcGVfdXNhZ2VbXSA9IHsKKwkicGVyZiBiZW5jaCBzY2hlZCBwaXBlIDxvcHRpb25zPiIsCisJTlVMTAorfTsKKworaW50IGJlbmNoX3NjaGVkX3BpcGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJaW50IHBpcGVfMVsyXSwgcGlwZV8yWzJdOworCWludCBtID0gMCwgaTsKKwlzdHJ1Y3QgdGltZXZhbCBzdGFydCwgc3RvcCwgZGlmZjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0X3VzZWMgPSAwOworCisJLyoKKwkgKiB3aHkgZG9lcyAicmV0IiBleGlzdD8KKwkgKiBkaXNjYXJkaW5nIHJldHVybmVkIHZhbHVlIG9mIHJlYWQoKSwgd3JpdGUoKQorCSAqIGNhdXNlcyBlcnJvciBpbiBidWlsZGluZyBlbnZpcm9ubWVudCBmb3IgcGVyZgorCSAqLworCWludCByZXQsIHdhaXRfc3RhdDsKKwlwaWRfdCBwaWQsIHJldHBpZDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsCisJCQkgICAgIGJlbmNoX3NjaGVkX3BpcGVfdXNhZ2UsIDApOworCisJYXNzZXJ0KCFwaXBlKHBpcGVfMSkpOworCWFzc2VydCghcGlwZShwaXBlXzIpKTsKKworCXBpZCA9IGZvcmsoKTsKKwlhc3NlcnQocGlkID49IDApOworCisJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CisKKwlpZiAoIXBpZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgeworCQkJcmV0ID0gcmVhZChwaXBlXzFbMF0sICZtLCBzaXplb2YoaW50KSk7CisJCQlyZXQgPSB3cml0ZShwaXBlXzJbMV0sICZtLCBzaXplb2YoaW50KSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgeworCQkJcmV0ID0gd3JpdGUocGlwZV8xWzFdLCAmbSwgc2l6ZW9mKGludCkpOworCQkJcmV0ID0gcmVhZChwaXBlXzJbMF0sICZtLCBzaXplb2YoaW50KSk7CisJCX0KKwl9CisKKwlnZXR0aW1lb2ZkYXkoJnN0b3AsIE5VTEwpOworCXRpbWVyc3ViKCZzdG9wLCAmc3RhcnQsICZkaWZmKTsKKworCWlmIChwaWQpIHsKKwkJcmV0cGlkID0gd2FpdHBpZChwaWQsICZ3YWl0X3N0YXQsIDApOworCQlhc3NlcnQoKHJldHBpZCA9PSBwaWQpICYmIFdJRkVYSVRFRCh3YWl0X3N0YXQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChiZW5jaF9mb3JtYXQpIHsKKwljYXNlIEJFTkNIX0ZPUk1BVF9ERUZBVUxUOgorCQlwcmludGYoIiMgRXh0ZWN1dGVkICVkIHBpcGUgb3BlcmF0aW9ucyBiZXR3ZWVuIHR3byB0YXNrc1xuXG4iLAorCQkJbG9vcHMpOworCisJCXJlc3VsdF91c2VjID0gZGlmZi50dl9zZWMgKiAxMDAwMDAwOworCQlyZXN1bHRfdXNlYyArPSBkaWZmLnR2X3VzZWM7CisKKwkJcHJpbnRmKCIgJTE0czogJWx1LiUwM2x1IFtzZWNdXG5cbiIsICJUb3RhbCB0aW1lIiwKKwkJICAgICAgIGRpZmYudHZfc2VjLCBkaWZmLnR2X3VzZWMvMTAwMCk7CisKKwkJcHJpbnRmKCIgJTE0bGYgdXNlY3Mvb3BcbiIsCisJCSAgICAgICAoZG91YmxlKXJlc3VsdF91c2VjIC8gKGRvdWJsZSlsb29wcyk7CisJCXByaW50ZigiICUxNGQgb3BzL3NlY1xuIiwKKwkJICAgICAgIChpbnQpKChkb3VibGUpbG9vcHMgLworCQkJICAgICAoKGRvdWJsZSlyZXN1bHRfdXNlYyAvIChkb3VibGUpMTAwMDAwMCkpKTsKKwkJYnJlYWs7CisKKwljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6CisJCXByaW50ZigiJWx1LiUwM2x1XG4iLAorCQkgICAgICAgZGlmZi50dl9zZWMsIGRpZmYudHZfdXNlYyAvIDEwMDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHJlYWNoaW5nIGhlcmUgaXMgc29tZXRoaW5nIGRpc2FzdGVyICovCisJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBmb3JtYXQ6JWRcbiIsIGJlbmNoX2Zvcm1hdCk7CisJCWV4aXQoMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA1NmJhNzE2Li43N2Q1MGE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtMzcsMTIgKzM3LDQ1IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwYWdlX3NpemU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwltbWFwX3dpbmRvdyA9IDMyOwogCitzdHJ1Y3Qgc3ltX2hpc3QgeworCXU2NAkJc3VtOworCXU2NAkJaXBbMF07Cit9OworCiBzdHJ1Y3Qgc3ltX2V4dCB7CiAJc3RydWN0IHJiX25vZGUJbm9kZTsKIAlkb3VibGUJCXBlcmNlbnQ7CiAJY2hhcgkJKnBhdGg7CiB9OwogCitzdHJ1Y3Qgc3ltX3ByaXYgeworCXN0cnVjdCBzeW1faGlzdAkqaGlzdDsKKwlzdHJ1Y3Qgc3ltX2V4dAkqZXh0OworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bV9oaXN0X2ZpbHRlcjsKKworc3RhdGljIGludCBzeW1ib2xfZmlsdGVyKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlpZiAoc3ltX2hpc3RfZmlsdGVyID09IE5VTEwgfHwKKwkgICAgc3RyY21wKHN5bS0+bmFtZSwgc3ltX2hpc3RfZmlsdGVyKSA9PSAwKSB7CisJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOworCQljb25zdCBpbnQgc2l6ZSA9IChzaXplb2YoKnByaXYtPmhpc3QpICsKKwkJCQkgIChzeW0tPmVuZCAtIHN5bS0+c3RhcnQpICogc2l6ZW9mKHU2NCkpOworCisJCXByaXYtPmhpc3QgPSBtYWxsb2Moc2l6ZSk7CisJCWlmIChwcml2LT5oaXN0KQorCQkJbWVtc2V0KHByaXYtPmhpc3QsIDAsIHNpemUpOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBmaWx0ZXIgaXQgb3V0LCBhcyB3ZSBkb24ndCB3YW50IHRvIGdvIHRocnUgc3ltYm9scworCSAqIHdlJ3JlIG5vdCBpbnRlcmVzdGVkLCBhbmQgaWYgYSBEU08gZW5kcyB1cCB3aXRoIG5vIHN5bWJvbHMsIGRlbGV0ZSBpdCB0b28sCisJICogYnV0IHJpZ2h0IG5vdyB0aGUga2VybmVsIGxvYWRpbmcgcm91dGluZXMgaW4gc3ltYm9sLmMgYmFpbCBvdXQgaWYgbm8gc3ltYm9scworCSAqIGFyZSBmb3VuZCwgZml4IGl0IGxhdGVyLgorCSAqLworCXJldHVybiAwOworfQogCiAvKgogICogY29sbGVjdCBoaXN0b2dyYW0gY291bnRzCkBAIC01MSwyOCArODQsMzggQEAKIHsKIAl1bnNpZ25lZCBpbnQgc3ltX3NpemUsIG9mZnNldDsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBoZS0+c3ltOworCXN0cnVjdCBzeW1fcHJpdiAqcHJpdjsKKwlzdHJ1Y3Qgc3ltX2hpc3QgKmg7CiAKIAloZS0+Y291bnQrKzsKIAotCWlmICghc3ltIHx8ICFzeW0tPmhpc3QpCisJaWYgKCFzeW0gfHwgIWhlLT5tYXApCisJCXJldHVybjsKKworCXByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwlpZiAoIXByaXYtPmhpc3QpCiAJCXJldHVybjsKIAogCXN5bV9zaXplID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwotCWlwID0gaGUtPm1hcC0+bWFwX2lwKGhlLT5tYXAsIGlwKTsKIAlvZmZzZXQgPSBpcCAtIHN5bS0+c3RhcnQ7CiAKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIlczogaXA9JUx4XG4iLCBfX2Z1bmNfXywKKwkJCWhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CisKIAlpZiAob2Zmc2V0ID49IHN5bV9zaXplKQogCQlyZXR1cm47CiAKLQlzeW0tPmhpc3Rfc3VtKys7Ci0Jc3ltLT5oaXN0W29mZnNldF0rKzsKKwloID0gcHJpdi0+aGlzdDsKKwloLT5zdW0rKzsKKwloLT5pcFtvZmZzZXRdKys7CiAKIAlpZiAodmVyYm9zZSA+PSAzKQogCQlwcmludGYoIiVwICVzOiBjb3VudCsrIFtpcDogJXAsICUwOEx4XSA9PiAlTGRcbiIsCiAJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhlLT5zeW0tPnN0YXJ0LAogCQkJaGUtPnN5bS0+bmFtZSwKIAkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpaXAsIGlwIC0gaGUtPnN5bS0+c3RhcnQsCi0JCQlzeW0tPmhpc3Rbb2Zmc2V0XSk7CisJCQloLT5pcFtvZmZzZXRdKTsKIH0KIAogc3RhdGljIGludCBoaXN0X2VudHJ5X19hZGQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFwICptYXAsCkBAIC04Myw4ICsxMjYsNyBAQAogCQkJCQkJICBjb3VudCwgbGV2ZWwsICZoaXQpOwogCWlmIChoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoaGl0KQotCQloaXN0X2hpdChoZSwgaXApOworCWhpc3RfaGl0KGhlLCBpcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMyw3ICsxNjUsNyBAQAogCQlpZiAobWFwICE9IE5VTEwpIHsKIGdvdF9tYXA6CiAJCQlpcCA9IG1hcC0+bWFwX2lwKG1hcCwgaXApOwotCQkJc3ltID0gbWFwLT5kc28tPmZpbmRfc3ltYm9sKG1hcC0+ZHNvLCBpcCk7CisJCQlzeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgaXAsIHN5bWJvbF9maWx0ZXIpOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIElmIHRoaXMgaXMgb3V0c2lkZSBvZiBhbGwga25vd24gbWFwcywKQEAgLTI2MCwxNCArMzAyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgbGVuKQorc3RhdGljIGludCBwYXJzZV9saW5lKEZJTEUgKmZpbGUsIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGxlbikKIHsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBoZS0+c3ltOwogCWNoYXIgKmxpbmUgPSBOVUxMLCAqdG1wLCAqdG1wMjsKIAlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOwogCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc2l6ZV90IGxpbmVfbGVuOworCXU2NCBzdGFydDsKIAlzNjQgbGluZV9pcDsKIAlpbnQgcmV0OwogCWNoYXIgKmM7CkBAIC0zMDQsMjIgKzM0NywyNiBAQAogCQkJbGluZV9pcCA9IC0xOwogCX0KIAorCXN0YXJ0ID0gaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CisKIAlpZiAobGluZV9pcCAhPSAtMSkgewogCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IGhpdHMgPSAwOwogCQlkb3VibGUgcGVyY2VudCA9IDAuMDsKIAkJY29uc3QgY2hhciAqY29sb3I7Ci0JCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gc3ltLT5wcml2OworCQlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwkJc3RydWN0IHN5bV9leHQgKnN5bV9leHQgPSBwcml2LT5leHQ7CisJCXN0cnVjdCBzeW1faGlzdCAqaCA9IHByaXYtPmhpc3Q7CiAKLQkJb2Zmc2V0ID0gbGluZV9pcCAtIHN5bS0+c3RhcnQ7CisJCW9mZnNldCA9IGxpbmVfaXAgLSBzdGFydDsKIAkJaWYgKG9mZnNldCA8IGxlbikKLQkJCWhpdHMgPSBzeW0tPmhpc3Rbb2Zmc2V0XTsKKwkJCWhpdHMgPSBoLT5pcFtvZmZzZXRdOwogCiAJCWlmIChvZmZzZXQgPCBsZW4gJiYgc3ltX2V4dCkgewogCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOwogCQkJcGVyY2VudCA9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OwotCQl9IGVsc2UgaWYgKHN5bS0+aGlzdF9zdW0pCi0JCQlwZXJjZW50ID0gMTAwLjAgKiBoaXRzIC8gc3ltLT5oaXN0X3N1bTsKKwkJfSBlbHNlIGlmIChoLT5zdW0pCisJCQlwZXJjZW50ID0gMTAwLjAgKiBoaXRzIC8gaC0+c3VtOwogCiAJCWNvbG9yID0gZ2V0X3BlcmNlbnRfY29sb3IocGVyY2VudCk7CiAKQEAgLTM3Miw5ICs0MTksMTAgQEAKIAlyYl9pbnNlcnRfY29sb3IoJnN5bV9leHQtPm5vZGUsICZyb290X3N5bV9leHQpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3NvdXJjZV9saW5lKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGZyZWVfc291cmNlX2xpbmUoc3RydWN0IGhpc3RfZW50cnkgKmhlLCBpbnQgbGVuKQogewotCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gc3ltLT5wcml2OworCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihoZS0+c3ltKTsKKwlzdHJ1Y3Qgc3ltX2V4dCAqc3ltX2V4dCA9IHByaXYtPmV4dDsKIAlpbnQgaTsKIAogCWlmICghc3ltX2V4dCkKQEAgLTM4NCwyNiArNDMyLDMwIEBACiAJCWZyZWUoc3ltX2V4dFtpXS5wYXRoKTsKIAlmcmVlKHN5bV9leHQpOwogCi0Jc3ltLT5wcml2ID0gTlVMTDsKKwlwcml2LT5leHQgPSBOVUxMOwogCXJvb3Rfc3ltX2V4dCA9IFJCX1JPT1Q7CiB9CiAKIC8qIEdldCB0aGUgZmlsZW5hbWU6bGluZSBmb3IgdGhlIGNvbG9yZWQgZW50cmllcyAqLwogc3RhdGljIHZvaWQKLWdldF9zb3VyY2VfbGluZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBsZW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZ2V0X3NvdXJjZV9saW5lKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgaW50IGxlbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwl1NjQgc3RhcnQ7CiAJaW50IGk7CiAJY2hhciBjbWRbUEFUSF9NQVggKiAyXTsKIAlzdHJ1Y3Qgc3ltX2V4dCAqc3ltX2V4dDsKKwlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwlzdHJ1Y3Qgc3ltX2hpc3QgKmggPSBwcml2LT5oaXN0OwogCi0JaWYgKCFzeW0tPmhpc3Rfc3VtKQorCWlmICghaC0+c3VtKQogCQlyZXR1cm47CiAKLQlzeW0tPnByaXYgPSBjYWxsb2MobGVuLCBzaXplb2Yoc3RydWN0IHN5bV9leHQpKTsKLQlpZiAoIXN5bS0+cHJpdikKKwlzeW1fZXh0ID0gcHJpdi0+ZXh0ID0gY2FsbG9jKGxlbiwgc2l6ZW9mKHN0cnVjdCBzeW1fZXh0KSk7CisJaWYgKCFwcml2LT5leHQpCiAJCXJldHVybjsKIAotCXN5bV9leHQgPSBzeW0tPnByaXY7CisJc3RhcnQgPSBoZS0+bWFwLT51bm1hcF9pcChoZS0+bWFwLCBzeW0tPnN0YXJ0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQljaGFyICpwYXRoID0gTlVMTDsKQEAgLTQxMSwxMSArNDYzLDExIEBACiAJCXU2NCBvZmZzZXQ7CiAJCUZJTEUgKmZwOwogCi0JCXN5bV9leHRbaV0ucGVyY2VudCA9IDEwMC4wICogc3ltLT5oaXN0W2ldIC8gc3ltLT5oaXN0X3N1bTsKKwkJc3ltX2V4dFtpXS5wZXJjZW50ID0gMTAwLjAgKiBoLT5pcFtpXSAvIGgtPnN1bTsKIAkJaWYgKHN5bV9leHRbaV0ucGVyY2VudCA8PSAwLjUpCiAJCQljb250aW51ZTsKIAotCQlvZmZzZXQgPSBzeW0tPnN0YXJ0ICsgaTsKKwkJb2Zmc2V0ID0gc3RhcnQgKyBpOwogCQlzcHJpbnRmKGNtZCwgImFkZHIybGluZSAtZSAlcyAlMDE2bGx4IiwgZmlsZW5hbWUsIG9mZnNldCk7CiAJCWZwID0gcG9wZW4oY21kLCAiciIpOwogCQlpZiAoIWZwKQpAQCAtNDY1LDggKzUxNywxMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IHN5bWJvbCAqc3ltKQorc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKKwlzdHJ1Y3QgbWFwICptYXAgPSBoZS0+bWFwOworCXN0cnVjdCBkc28gKmRzbyA9IG1hcC0+ZHNvOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CiAJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkc28tPmxvbmdfbmFtZSwgKmRfZmlsZW5hbWU7CiAJdTY0IGxlbjsKIAljaGFyIGNvbW1hbmRbUEFUSF9NQVgqMl07CkBAIC00NzUsNiArNTMwLDEyIEBACiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSVMeCwgZW5kPSVMeFxuIiwKKwkJCV9fZnVuY19fLCBmaWxlbmFtZSwgc3ltLT5uYW1lLAorCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAorCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CisKIAlpZiAoZnVsbF9wYXRocykKIAkJZF9maWxlbmFtZSA9IGZpbGVuYW1lOwogCWVsc2UKQEAgLTQ4Myw3ICs1NDQsNyBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCWlmIChwcmludF9saW5lKSB7Ci0JCWdldF9zb3VyY2VfbGluZShzeW0sIGxlbiwgZmlsZW5hbWUpOworCQlnZXRfc291cmNlX2xpbmUoaGUsIGxlbiwgZmlsZW5hbWUpOwogCQlwcmludF9zdW1tYXJ5KGZpbGVuYW1lKTsKIAl9CiAKQEAgLTQ5Niw3ICs1NTcsOCBAQAogCQkgICAgICAgZHNvLCBkc28tPmxvbmdfbmFtZSwgc3ltLCBzeW0tPm5hbWUpOwogCiAJc3ByaW50Zihjb21tYW5kLCAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzfGdyZXAgLXYgJXMiLAotCQlzeW0tPnN0YXJ0LCBzeW0tPmVuZCwgZmlsZW5hbWUsIGZpbGVuYW1lKTsKKwkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLAorCQlmaWxlbmFtZSwgZmlsZW5hbWUpOwogCiAJaWYgKHZlcmJvc2UgPj0gMykKIAkJcHJpbnRmKCJkb2luZzogJXNcbiIsIGNvbW1hbmQpOwpAQCAtNTA2LDM1ICs1NjgsMzggQEAKIAkJcmV0dXJuOwogCiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7Ci0JCWlmIChwYXJzZV9saW5lKGZpbGUsIHN5bSwgbGVuKSA8IDApCisJCWlmIChwYXJzZV9saW5lKGZpbGUsIGhlLCBsZW4pIDwgMCkKIAkJCWJyZWFrOwogCX0KIAogCXBjbG9zZShmaWxlKTsKIAlpZiAocHJpbnRfbGluZSkKLQkJZnJlZV9zb3VyY2VfbGluZShzeW0sIGxlbik7CisJCWZyZWVfc291cmNlX2xpbmUoaGUsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmRfYW5ub3RhdGlvbnModm9pZCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0Jc3RydWN0IGRzbyAqZHNvOwotCWludCBjb3VudCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzbywgJmRzb3MsIG5vZGUpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJm91dHB1dF9oaXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdjsKIAotCQlmb3IgKG5kID0gcmJfZmlyc3QoJmRzby0+c3ltcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CisJCWlmIChoZS0+c3ltID09IE5VTEwpCisJCQljb250aW51ZTsKIAotCQkJaWYgKHN5bS0+aGlzdCkgewotCQkJCWFubm90YXRlX3N5bShkc28sIHN5bSk7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJfQorCQlwcml2ID0gc3ltYm9sX19wcml2KGhlLT5zeW0pOworCQlpZiAocHJpdi0+aGlzdCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJYW5ub3RhdGVfc3ltKGhlKTsKKwkJLyoKKwkJICogU2luY2Ugd2UgaGF2ZSBhIGhpc3RfZW50cnkgcGVyIElQIGZvciB0aGUgc2FtZSBzeW1ib2wsIGZyZWUKKwkJICogaGUtPnN5bS0+aGlzdCB0byBzaWduYWwgd2UgYWxyZWFkeSBwcm9jZXNzZWQgdGhpcyBzeW1ib2wuCisJCSAqLworCQlmcmVlKHByaXYtPmhpc3QpOworCQlwcml2LT5oaXN0ID0gTlVMTDsKIAl9Ci0KLQlpZiAoIWNvdW50KQotCQlwcmludGYoIiBFcnJvcjogc3ltYm9sICclcycgbm90IHByZXNlbnQgYW1vbmdzdCB0aGUgc2FtcGxlcy5cbiIsIHN5bV9oaXN0X2ZpbHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgX19jbWRfYW5ub3RhdGUodm9pZCkKQEAgLTU3MSw3ICs2MzYsNyBAQAogCQlleGl0KDApOwogCX0KIAotCWlmIChsb2FkX2tlcm5lbCgpIDwgMCkgeworCWlmIChsb2FkX2tlcm5lbChzeW1ib2xfZmlsdGVyKSA8IDApIHsKIAkJcGVycm9yKCJmYWlsZWQgdG8gbG9hZCBrZXJuZWwgc3ltYm9scyIpOwogCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwogCX0KQEAgLTcwMyw3ICs3NjgsNyBAQAogCiBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlzeW1ib2xfX2luaXQoKTsKKwlzeW1ib2xfX2luaXQoc2l6ZW9mKHN0cnVjdCBzeW1fcHJpdikpOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIApAQCAtNzIyLDkgKzc4Nyw2IEBACiAJCXN5bV9oaXN0X2ZpbHRlciA9IGFyZ3ZbMF07CiAJfQogCi0JaWYgKCFzeW1faGlzdF9maWx0ZXIpCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhhbm5vdGF0ZV91c2FnZSwgb3B0aW9ucyk7Ci0KIAlzZXR1cF9wYWdlcigpOwogCiAJaWYgKGZpZWxkX3NlcCAmJiAqZmllbGRfc2VwID09ICcuJykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJlbmNoLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMzOWJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJlbmNoLmMKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKgorICogYnVpbHRpbi1iZW5jaC5jCisgKgorICogR2VuZXJhbCBiZW5jaG1hcmtpbmcgc3Vic3lzdGVtIHByb3ZpZGVkIGJ5IHBlcmYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIEhpdG9zaGkgTWl0YWtlIDxtaXRha2VAZGNsLmluZm8ud2FzZWRhLmFjLmpwPgorICoKKyAqLworCisvKgorICoKKyAqIEF2YWlsYWJsZSBzdWJzeXN0ZW0gbGlzdDoKKyAqICBzY2hlZCAuLi4gc2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtCisgKgorICovCisKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC91dGlsLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImJlbmNoL2JlbmNoLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdHJ1Y3QgYmVuY2hfc3VpdGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqc3VtbWFyeTsKKwlpbnQgKCpmbikoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOworfTsKKworc3RhdGljIHN0cnVjdCBiZW5jaF9zdWl0ZSBzY2hlZF9zdWl0ZXNbXSA9IHsKKwl7ICJtZXNzYWdpbmciLAorCSAgIkJlbmNobWFyayBmb3Igc2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtcyIsCisJICBiZW5jaF9zY2hlZF9tZXNzYWdpbmcgfSwKKwl7ICJwaXBlIiwKKwkgICJGbG9vZCBvZiBjb21tdW5pY2F0aW9uIG92ZXIgcGlwZSgpIGJldHdlZW4gdHdvIHByb2Nlc3NlcyIsCisJICBiZW5jaF9zY2hlZF9waXBlICAgICAgfSwKKwl7IE5VTEwsCisJICBOVUxMLAorCSAgTlVMTCAgICAgICAgICAgICAgICAgIH0KK307CisKK3N0cnVjdCBiZW5jaF9zdWJzeXMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqc3VtbWFyeTsKKwlzdHJ1Y3QgYmVuY2hfc3VpdGUgKnN1aXRlczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfc3Vic3lzIHN1YnN5c3RlbXNbXSA9IHsKKwl7ICJzY2hlZCIsCisJICAic2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtIiwKKwkgIHNjaGVkX3N1aXRlcyB9LAorCXsgTlVMTCwKKwkgIE5VTEwsCisJICBOVUxMICAgICAgICAgfQorfTsKKworc3RhdGljIHZvaWQgZHVtcF9zdWl0ZXMoaW50IHN1YnN5c19pbmRleCkKK3sKKwlpbnQgaTsKKworCXByaW50ZigiTGlzdCBvZiBhdmFpbGFibGUgc3VpdGVzIGZvciAlcy4uLlxuXG4iLAorCSAgICAgICBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0ubmFtZSk7CisKKwlmb3IgKGkgPSAwOyBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0uc3VpdGVzW2ldLm5hbWU7IGkrKykKKwkJcHJpbnRmKCJcdCVzOiAlc1xuIiwKKwkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0ubmFtZSwKKwkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0uc3VtbWFyeSk7CisKKwlwcmludGYoIlxuIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgY2hhciAqYmVuY2hfZm9ybWF0X3N0cjsKK2ludCBiZW5jaF9mb3JtYXQgPSBCRU5DSF9GT1JNQVRfREVGQVVMVDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gYmVuY2hfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2YnLCAiZm9ybWF0IiwgJmJlbmNoX2Zvcm1hdF9zdHIsICJkZWZhdWx0IiwKKwkJICAgICJTcGVjaWZ5IGZvcm1hdCBzdHlsZSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiZW5jaF91c2FnZVtdID0geworCSJwZXJmIGJlbmNoIFs8Y29tbW9uIG9wdGlvbnM+XSA8c3Vic3lzdGVtPiA8c3VpdGU+IFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBwcmludF91c2FnZSh2b2lkKQoreworCWludCBpOworCisJcHJpbnRmKCJVc2FnZTogXG4iKTsKKwlmb3IgKGkgPSAwOyBiZW5jaF91c2FnZVtpXTsgaSsrKQorCQlwcmludGYoIlx0JXNcbiIsIGJlbmNoX3VzYWdlW2ldKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoIkxpc3Qgb2YgYXZhaWxhYmxlIHN1YnN5c3RlbXMuLi5cblxuIik7CisKKwlmb3IgKGkgPSAwOyBzdWJzeXN0ZW1zW2ldLm5hbWU7IGkrKykKKwkJcHJpbnRmKCJcdCVzOiAlc1xuIiwKKwkJICAgICAgIHN1YnN5c3RlbXNbaV0ubmFtZSwgc3Vic3lzdGVtc1tpXS5zdW1tYXJ5KTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgYmVuY2hfc3RyMmludChjaGFyICpzdHIpCit7CisJaWYgKCFzdHIpCisJCXJldHVybiBCRU5DSF9GT1JNQVRfREVGQVVMVDsKKworCWlmICghc3RyY21wKHN0ciwgQkVOQ0hfRk9STUFUX0RFRkFVTFRfU1RSKSkKKwkJcmV0dXJuIEJFTkNIX0ZPUk1BVF9ERUZBVUxUOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCBCRU5DSF9GT1JNQVRfU0lNUExFX1NUUikpCisJCXJldHVybiBCRU5DSF9GT1JNQVRfU0lNUExFOworCisJcmV0dXJuIEJFTkNIX0ZPUk1BVF9VTktOT1dOOworfQorCitpbnQgY21kX2JlbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlpbnQgaSwgaiwgc3RhdHVzID0gMDsKKworCWlmIChhcmdjIDwgMikgeworCQkvKiBObyBzdWJzeXN0ZW0gc3BlY2lmaWVkLiAqLworCQlwcmludF91c2FnZSgpOworCQlnb3RvIGVuZDsKKwl9CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBiZW5jaF9vcHRpb25zLCBiZW5jaF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwliZW5jaF9mb3JtYXQgPSBiZW5jaF9zdHIyaW50KGJlbmNoX2Zvcm1hdF9zdHIpOworCWlmIChiZW5jaF9mb3JtYXQgPT0gQkVOQ0hfRk9STUFUX1VOS05PV04pIHsKKwkJcHJpbnRmKCJVbmtub3duIGZvcm1hdCBkZXNjcmlwdG9yOiVzXG4iLCBiZW5jaF9mb3JtYXRfc3RyKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGFyZ2MgPCAxKSB7CisJCXByaW50X3VzYWdlKCk7CisJCWdvdG8gZW5kOworCX0KKworCWZvciAoaSA9IDA7IHN1YnN5c3RlbXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmIChzdHJjbXAoc3Vic3lzdGVtc1tpXS5uYW1lLCBhcmd2WzBdKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhcmdjIDwgMikgeworCQkJLyogTm8gc3VpdGUgc3BlY2lmaWVkLiAqLworCQkJZHVtcF9zdWl0ZXMoaSk7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWZvciAoaiA9IDA7IHN1YnN5c3RlbXNbaV0uc3VpdGVzW2pdLm5hbWU7IGorKykgeworCQkJaWYgKHN0cmNtcChzdWJzeXN0ZW1zW2ldLnN1aXRlc1tqXS5uYW1lLCBhcmd2WzFdKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGJlbmNoX2Zvcm1hdCA9PSBCRU5DSF9GT1JNQVRfREVGQVVMVCkKKwkJCQlwcmludGYoIiMgUnVubmluZyAlcy8lcyBiZW5jaG1hcmsuLi5cbiIsCisJCQkJICAgICAgIHN1YnN5c3RlbXNbaV0ubmFtZSwKKwkJCQkgICAgICAgc3Vic3lzdGVtc1tpXS5zdWl0ZXNbal0ubmFtZSk7CisJCQlzdGF0dXMgPSBzdWJzeXN0ZW1zW2ldLnN1aXRlc1tqXS5mbihhcmdjIC0gMSwKKwkJCQkJCQkgICAgYXJndiArIDEsIHByZWZpeCk7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItaCIpIHx8ICFzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpKSB7CisJCQlkdW1wX3N1aXRlcyhpKTsKKwkJCWdvdG8gZW5kOworCQl9CisKKwkJcHJpbnRmKCJVbmtub3duIHN1aXRlOiVzIGZvciAlc1xuIiwgYXJndlsxXSwgYXJndlswXSk7CisJCXN0YXR1cyA9IDE7CisJCWdvdG8gZW5kOworCX0KKworCXByaW50ZigiVW5rbm93biBzdWJzeXN0ZW06JXNcbiIsIGFyZ3ZbMF0pOworCXN0YXR1cyA9IDE7CisKK2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWU5ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogYnVpbHRpbi1idWlsZGlkLWxpc3QuYworICoKKyAqIEJ1aWx0aW4gYnVpbGRpZC1saXN0IGNvbW1hbmQ6IGxpc3QgYnVpbGRpZHMgaW4gcGVyZi5kYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKK3N0YXRpYyBpbnQgZm9yY2U7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsZGlkX2xpc3RfdXNhZ2VbXSA9IHsKKwkicGVyZiByZXBvcnQgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCQkgICAgICAgaW50IGZlYXQsIGludCBmZCkKK3sKKwlpZiAoZmVhdCAhPSBIRUFERVJfQlVJTERfSUQpCisJCXJldHVybiAwOworCisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJcHJfd2FybmluZygiRmFpbGVkIHRvIGxzZWVrIHRvICVMZCBvZmZzZXQgZm9yIGJ1aWxkaWRzIVxuIiwKKwkJCSAgIHNlbGYtPm9mZnNldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2NtZF9idWlsZGlkX2xpc3Qodm9pZCkKK3sKKwlpbnQgZXJyID0gLTE7CisJc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CisJc3RydWN0IHN0YXQgaW5wdXRfc3RhdDsKKwlpbnQgaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKKworCWlmIChpbnB1dCA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIGlucHV0X25hbWUpOworCQlpZiAoIXN0cmNtcChpbnB1dF9uYW1lLCAicGVyZi5kYXRhIikpCisJCQlwcl9lcnIoIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOworCQlwcl9lcnIoIlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGZzdGF0KGlucHV0LCAmaW5wdXRfc3RhdCk7CisJaWYgKGVyciA8IDApIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghZm9yY2UgJiYgaW5wdXRfc3RhdC5zdF91aWQgJiYgKGlucHV0X3N0YXQuc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKKwkJcHJfZXJyKCJmaWxlICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdFxuIiwKKwkJICAgICAgIGlucHV0X25hbWUpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAoIWlucHV0X3N0YXQuc3Rfc2l6ZSkgeworCQlwcl9pbmZvKCJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gLTE7CisJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWlmIChoZWFkZXIgPT0gTlVMTCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlpZiAocGVyZl9maWxlX2hlYWRlcl9fcmVhZCgmZl9oZWFkZXIsIGhlYWRlciwgaW5wdXQpIDwgMCkgeworCQlwcl93YXJuaW5nKCJpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoaGVhZGVyLCBpbnB1dCwKKwkJCQkgICAgICAgICBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2Vzc19idWlsZGlkcyk7CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0KTsKK291dF9jbG9zZToKKwljbG9zZShpbnB1dCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IGNtZF9idWlsZGlkX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWxkaWRfbGlzdF91c2FnZSwgMCk7CisJc2V0dXBfcGFnZXIoKTsKKwlyZXR1cm4gX19jbWRfYnVpbGRpZF9saXN0KCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4taGVscC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwppbmRleCA0ZmI4NzM0Li43NjhmOWM4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKQEAgLTYxLDggKzYxLDcgQEAKIHsKIAlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKnZpZXdlcjsKIAotCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQotCXsKKwlmb3IgKHZpZXdlciA9IG1hbl92aWV3ZXJfaW5mb19saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkgewogCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdmlld2VyLT5uYW1lKSkKIAkJCXJldHVybiB2aWV3ZXItPmluZm87CiAJfQpAQCAtMTE1LDcgKzExNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKIHsKIAlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgewogCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLwpAQCAtMTI5LDcgKzEyOCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9rb25xdWVyb3IoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKIAlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgewpAQCAtMTU3LDcgKzE1Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX21hbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWlmICghcGF0aCkKIAkJcGF0aCA9ICJtYW4iOwpAQCAtMzY0LDkgKzM2Myw4IEBACiAKIAlzZXR1cF9tYW5fcGF0aCgpOwogCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkKLQl7CiAJCWV4ZWNfdmlld2VyKHZpZXdlci0+bmFtZSwgcGFnZSk7IC8qIHdpbGwgcmV0dXJuIHdoZW4gdW5hYmxlICovCi0JfQorCiAJaWYgKGZhbGxiYWNrKQogCQlleGVjX3ZpZXdlcihmYWxsYmFjaywgcGFnZSk7CiAJZXhlY192aWV3ZXIoIm1hbiIsIHBhZ2UpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNWIwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTAsMCArMSw1NzggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorCisjaW5jbHVkZSAidXRpbC91dGlsLmgiCisjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvZGF0YV9tYXAuaCIKKworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCitzdHJ1Y3QgYWxsb2Nfc3RhdDsKK3R5cGVkZWYgaW50ICgqc29ydF9mbl90KShzdHJ1Y3QgYWxsb2Nfc3RhdCAqLCBzdHJ1Y3QgYWxsb2Nfc3RhdCAqKTsKKworc3RhdGljIGNoYXIgY29uc3QJCSppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKK3N0YXRpYyB1NjQJCQlzYW1wbGVfdHlwZTsKKworc3RhdGljIGludAkJCWFsbG9jX2ZsYWc7CitzdGF0aWMgaW50CQkJY2FsbGVyX2ZsYWc7CisKK3NvcnRfZm5fdAkJCWFsbG9jX3NvcnRfZm47Citzb3J0X2ZuX3QJCQljYWxsZXJfc29ydF9mbjsKKworc3RhdGljIGludAkJCWFsbG9jX2xpbmVzID0gLTE7CitzdGF0aWMgaW50CQkJY2FsbGVyX2xpbmVzID0gLTE7CisKK3N0YXRpYyBjaGFyCQkJKmN3ZDsKK3N0YXRpYyBpbnQJCQljd2RsZW47CisKK3N0cnVjdCBhbGxvY19zdGF0IHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQljaGFyCSpuYW1lOworCQkJdTY0CWNhbGxfc2l0ZTsKKwkJfTsKKwkJdTY0CXB0cjsKKwl9OworCXU2NAlieXRlc19yZXE7CisJdTY0CWJ5dGVzX2FsbG9jOworCXUzMgloaXQ7CisKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOworfTsKKworc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3RfYWxsb2Nfc3RhdDsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X2FsbG9jX3NvcnRlZDsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X2NhbGxlcl9zdGF0Oworc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3RfY2FsbGVyX3NvcnRlZDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfcmVxdWVzdGVkLCB0b3RhbF9hbGxvY2F0ZWQ7CisKK3N0cnVjdCByYXdfZXZlbnRfc2FtcGxlIHsKKwl1MzIgc2l6ZTsKKwljaGFyIGRhdGFbMF07Cit9OworCitzdGF0aWMgaW50Citwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQpOworCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0NPTU06ICVzOiVkXG4iLAorCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKKwkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKKwkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCB8fAorCSAgICB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9hbGxvY19zdGF0KHVuc2lnbmVkIGxvbmcgcHRyLAorCQkJICAgICAgaW50IGJ5dGVzX3JlcSwgaW50IGJ5dGVzX2FsbG9jKQoreworCXN0cnVjdCByYl9ub2RlICoqbm9kZSA9ICZyb290X2FsbG9jX3N0YXQucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdCAqZGF0YSA9IE5VTEw7CisKKwlpZiAoIWFsbG9jX2ZsYWcpCisJCXJldHVybjsKKworCXdoaWxlICgqbm9kZSkgeworCQlwYXJlbnQgPSAqbm9kZTsKKwkJZGF0YSA9IHJiX2VudHJ5KCpub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisKKwkJaWYgKHB0ciA+IGRhdGEtPnB0cikKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKHB0ciA8IGRhdGEtPnB0cikKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRhdGEgJiYgZGF0YS0+cHRyID09IHB0cikgeworCQlkYXRhLT5oaXQrKzsKKwkJZGF0YS0+Ynl0ZXNfcmVxICs9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfcmVxOworCX0gZWxzZSB7CisJCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CisJCWRhdGEtPnB0ciA9IHB0cjsKKwkJZGF0YS0+aGl0ID0gMTsKKwkJZGF0YS0+Ynl0ZXNfcmVxID0gYnl0ZXNfcmVxOworCQlkYXRhLT5ieXRlc19hbGxvYyA9IGJ5dGVzX2FsbG9jOworCisJCXJiX2xpbmtfbm9kZSgmZGF0YS0+bm9kZSwgcGFyZW50LCBub2RlKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZkYXRhLT5ub2RlLCAmcm9vdF9hbGxvY19zdGF0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9jYWxsZXJfc3RhdCh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCSAgICAgIGludCBieXRlc19yZXEsIGludCBieXRlc19hbGxvYykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5vZGUgPSAmcm9vdF9jYWxsZXJfc3RhdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBhbGxvY19zdGF0ICpkYXRhID0gTlVMTDsKKworCWlmICghY2FsbGVyX2ZsYWcpCisJCXJldHVybjsKKworCXdoaWxlICgqbm9kZSkgeworCQlwYXJlbnQgPSAqbm9kZTsKKwkJZGF0YSA9IHJiX2VudHJ5KCpub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisKKwkJaWYgKGNhbGxfc2l0ZSA+IGRhdGEtPmNhbGxfc2l0ZSkKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKGNhbGxfc2l0ZSA8IGRhdGEtPmNhbGxfc2l0ZSkKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRhdGEgJiYgZGF0YS0+Y2FsbF9zaXRlID09IGNhbGxfc2l0ZSkgeworCQlkYXRhLT5oaXQrKzsKKwkJZGF0YS0+Ynl0ZXNfcmVxICs9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfcmVxOworCX0gZWxzZSB7CisJCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CisJCWRhdGEtPmNhbGxfc2l0ZSA9IGNhbGxfc2l0ZTsKKwkJZGF0YS0+aGl0ID0gMTsKKwkJZGF0YS0+Ynl0ZXNfcmVxID0gYnl0ZXNfcmVxOworCQlkYXRhLT5ieXRlc19hbGxvYyA9IGJ5dGVzX2FsbG9jOworCisJCXJiX2xpbmtfbm9kZSgmZGF0YS0+bm9kZSwgcGFyZW50LCBub2RlKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZkYXRhLT5ub2RlLCAmcm9vdF9jYWxsZXJfc3RhdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2FsbG9jX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCisJCQkJc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCQlpbnQgY3B1IF9fdXNlZCwKKwkJCQl1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkLAorCQkJCWludCBub2RlIF9fdXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZTsKKwl1bnNpZ25lZCBsb25nIHB0cjsKKwlpbnQgYnl0ZXNfcmVxOworCWludCBieXRlc19hbGxvYzsKKworCXB0ciA9IHJhd19maWVsZF92YWx1ZShldmVudCwgInB0ciIsIHJhdy0+ZGF0YSk7CisJY2FsbF9zaXRlID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAiY2FsbF9zaXRlIiwgcmF3LT5kYXRhKTsKKwlieXRlc19yZXEgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJieXRlc19yZXEiLCByYXctPmRhdGEpOworCWJ5dGVzX2FsbG9jID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAiYnl0ZXNfYWxsb2MiLCByYXctPmRhdGEpOworCisJaW5zZXJ0X2FsbG9jX3N0YXQocHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jKTsKKwlpbnNlcnRfY2FsbGVyX3N0YXQoY2FsbF9zaXRlLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jKTsKKworCXRvdGFsX3JlcXVlc3RlZCArPSBieXRlc19yZXE7CisJdG90YWxfYWxsb2NhdGVkICs9IGJ5dGVzX2FsbG9jOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2ZyZWVfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdyBfX3VzZWQsCisJCQkgICAgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICAgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NfcmF3X2V2ZW50KGV2ZW50X3QgKnJhd19ldmVudCBfX3VzZWQsIHZvaWQgKm1vcmVfZGF0YSwKKwkJICBpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdyA9IG1vcmVfZGF0YTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCB0eXBlOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHJhdy0+ZGF0YSk7CisJZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOworCisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWFsbG9jIikgfHwKKwkgICAgIXN0cmNtcChldmVudC0+bmFtZSwgImttZW1fY2FjaGVfYWxsb2MiKSkgeworCQlwcm9jZXNzX2FsbG9jX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQsIDApOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWFsbG9jX25vZGUiKSB8fAorCSAgICAhc3RyY21wKGV2ZW50LT5uYW1lLCAia21lbV9jYWNoZV9hbGxvY19ub2RlIikpIHsKKwkJcHJvY2Vzc19hbGxvY19ldmVudChyYXcsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkLCAxKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAia2ZyZWUiKSB8fAorCSAgICAhc3RyY21wKGV2ZW50LT5uYW1lLCAia21lbV9jYWNoZV9mcmVlIikpIHsKKwkJcHJvY2Vzc19mcmVlX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgaW50Citwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3sKKwl1NjQgaXAgPSBldmVudC0+aXAuaXA7CisJdTY0IHRpbWVzdGFtcCA9IC0xOworCXUzMiBjcHUgPSAtMTsKKwl1NjQgcGVyaW9kID0gMTsKKwl2b2lkICptb3JlX2RhdGEgPSBldmVudC0+aXAuX19tb3JlX2RhdGE7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKKwkJdGltZXN0YW1wID0gKih1NjQgKiltb3JlX2RhdGE7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKKwl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpIHsKKwkJY3B1ID0gKih1MzIgKiltb3JlX2RhdGE7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTMyKTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOyAvKiByZXNlcnZlZCAqLworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkgeworCQlwZXJpb2QgPSAqKHU2NCAqKW1vcmVfZGF0YTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOworCX0KKworCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKKwkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCisJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCisJCWV2ZW50LT5oZWFkZXIubWlzYywKKwkJZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLnRpZCwKKwkJKHZvaWQgKikobG9uZylpcCwKKwkJKGxvbmcgbG9uZylwZXJpb2QpOworCisJaWYgKHRocmVhZCA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCSBldmVudC0+aGVhZGVyLnR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CisKKwlwcm9jZXNzX3Jhd19ldmVudChldmVudCwgbW9yZV9kYXRhLCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQoreworCXNhbXBsZV90eXBlID0gdHlwZTsKKworCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKKwkJCSJ3aXRob3V0IC1SPyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCit9OworCitzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCit7CisJcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKKworCXJldHVybiBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLCAwLCAwLAorCQkJCSAgICAgICAmY3dkbGVuLCAmY3dkKTsKK30KKworc3RhdGljIGRvdWJsZSBmcmFnbWVudGF0aW9uKHVuc2lnbmVkIGxvbmcgbl9yZXEsIHVuc2lnbmVkIGxvbmcgbl9hbGxvYykKK3sKKwlpZiAobl9hbGxvYyA9PSAwKQorCQlyZXR1cm4gMC4wOworCWVsc2UKKwkJcmV0dXJuIDEwMC4wIC0gKDEwMC4wICogbl9yZXEgLyBuX2FsbG9jKTsKK30KKworc3RhdGljIHZvaWQgX19wcmludF9yZXN1bHQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGludCBuX2xpbmVzLCBpbnQgaXNfY2FsbGVyKQoreworCXN0cnVjdCByYl9ub2RlICpuZXh0OworCisJcHJpbnRmKCJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWlmIChpc19jYWxsZXIpCisJCXByaW50ZigiIENhbGxzaXRlICAgICAgICAgIHwiKTsKKwllbHNlCisJCXByaW50ZigiIEFsbG9jIFB0ciAgICAgICAgIHwiKTsKKwlwcmludGYoIiBUb3RhbF9hbGxvYy9QZXIgfCAgVG90YWxfcmVxL1BlciAgfCAgSGl0ICAgfCBGcmFnbWVudGF0aW9uXG4iKTsKKwlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOworCisJd2hpbGUgKG5leHQgJiYgbl9saW5lcy0tKSB7CisJCXN0cnVjdCBhbGxvY19zdGF0ICpkYXRhOworCisJCWRhdGEgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisKKwkJcHJpbnRmKCIgJS0xNnAgIHwgJThsbHUvJS02bHUgfCAlOGxsdS8lLTZsdSB8ICU2bHUgfCAlOC4zZiUlXG4iLAorCQkgICAgICAgaXNfY2FsbGVyID8gKHZvaWQgKikodW5zaWduZWQgbG9uZylkYXRhLT5jYWxsX3NpdGUgOgorCQkJCSAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpZGF0YS0+cHRyLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkYXRhLT5ieXRlc19hbGxvYywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWRhdGEtPmJ5dGVzX2FsbG9jIC8gZGF0YS0+aGl0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkYXRhLT5ieXRlc19yZXEsCisJCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhLT5ieXRlc19yZXEgLyBkYXRhLT5oaXQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhLT5oaXQsCisJCSAgICAgICBmcmFnbWVudGF0aW9uKGRhdGEtPmJ5dGVzX3JlcSwgZGF0YS0+Ynl0ZXNfYWxsb2MpKTsKKworCQluZXh0ID0gcmJfbmV4dChuZXh0KTsKKwl9CisKKwlpZiAobl9saW5lcyA9PSAtMSkKKwkJcHJpbnRmKCIgLi4uICAgICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgfCAuLi4gICAgfCAuLi4gICBcbiIpOworCisJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3VtbWFyeSh2b2lkKQoreworCXByaW50ZigiXG5TVU1NQVJZXG49PT09PT09XG4iKTsKKwlwcmludGYoIlRvdGFsIGJ5dGVzIHJlcXVlc3RlZDogJWx1XG4iLCB0b3RhbF9yZXF1ZXN0ZWQpOworCXByaW50ZigiVG90YWwgYnl0ZXMgYWxsb2NhdGVkOiAlbHVcbiIsIHRvdGFsX2FsbG9jYXRlZCk7CisJcHJpbnRmKCJUb3RhbCBieXRlcyB3YXN0ZWQgb24gaW50ZXJuYWwgZnJhZ21lbnRhdGlvbjogJWx1XG4iLAorCSAgICAgICB0b3RhbF9hbGxvY2F0ZWQgLSB0b3RhbF9yZXF1ZXN0ZWQpOworCXByaW50ZigiSW50ZXJuYWwgZnJhZ21lbnRhdGlvbjogJWYlJVxuIiwKKwkgICAgICAgZnJhZ21lbnRhdGlvbih0b3RhbF9yZXF1ZXN0ZWQsIHRvdGFsX2FsbG9jYXRlZCkpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9yZXN1bHQodm9pZCkKK3sKKwlpZiAoY2FsbGVyX2ZsYWcpCisJCV9fcHJpbnRfcmVzdWx0KCZyb290X2NhbGxlcl9zb3J0ZWQsIGNhbGxlcl9saW5lcywgMSk7CisJaWYgKGFsbG9jX2ZsYWcpCisJCV9fcHJpbnRfcmVzdWx0KCZyb290X2FsbG9jX3NvcnRlZCwgYWxsb2NfbGluZXMsIDApOworCXByaW50X3N1bW1hcnkoKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBhbGxvY19zdGF0ICpkYXRhLAorCQkJc29ydF9mbl90IHNvcnRfZm4pCit7CisJc3RydWN0IHJiX25vZGUgKipuZXcgPSAmKHJvb3QtPnJiX25vZGUpOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCisJd2hpbGUgKCpuZXcpIHsKKwkJc3RydWN0IGFsbG9jX3N0YXQgKnRoaXM7CisJCWludCBjbXA7CisKKwkJdGhpcyA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBhbGxvY19zdGF0LCBub2RlKTsKKwkJcGFyZW50ID0gKm5ldzsKKworCQljbXAgPSBzb3J0X2ZuKGRhdGEsIHRoaXMpOworCisJCWlmIChjbXAgPiAwKQorCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOworCQllbHNlCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOworCX0KKworCXJiX2xpbmtfbm9kZSgmZGF0YS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmZGF0YS0+bm9kZSwgcm9vdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc29ydF9yZXN1bHQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCByYl9yb290ICpyb290X3NvcnRlZCwKKwkJCSAgc29ydF9mbl90IHNvcnRfZm4pCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGFsbG9jX3N0YXQgKmRhdGE7CisKKwlmb3IgKDs7KSB7CisJCW5vZGUgPSByYl9maXJzdChyb290KTsKKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CisKKwkJcmJfZXJhc2Uobm9kZSwgcm9vdCk7CisJCWRhdGEgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisJCXNvcnRfaW5zZXJ0KHJvb3Rfc29ydGVkLCBkYXRhLCBzb3J0X2ZuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcmVzdWx0KHZvaWQpCit7CisJX19zb3J0X3Jlc3VsdCgmcm9vdF9hbGxvY19zdGF0LCAmcm9vdF9hbGxvY19zb3J0ZWQsIGFsbG9jX3NvcnRfZm4pOworCV9fc29ydF9yZXN1bHQoJnJvb3RfY2FsbGVyX3N0YXQsICZyb290X2NhbGxlcl9zb3J0ZWQsIGNhbGxlcl9zb3J0X2ZuKTsKK30KKworc3RhdGljIGludCBfX2NtZF9rbWVtKHZvaWQpCit7CisJc2V0dXBfcGFnZXIoKTsKKwlyZWFkX2V2ZW50cygpOworCXNvcnRfcmVzdWx0KCk7CisJcHJpbnRfcmVzdWx0KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrbWVtX3VzYWdlW10gPSB7CisJInBlcmYga21lbSBbPG9wdGlvbnM+XSB7cmVjb3JkfSIsCisJTlVMTAorfTsKKworCitzdGF0aWMgaW50IHB0cl9jbXAoc3RydWN0IGFsbG9jX3N0YXQgKmwsIHN0cnVjdCBhbGxvY19zdGF0ICpyKQoreworCWlmIChsLT5wdHIgPCByLT5wdHIpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChsLT5wdHIgPiByLT5wdHIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhbGxzaXRlX2NtcChzdHJ1Y3QgYWxsb2Nfc3RhdCAqbCwgc3RydWN0IGFsbG9jX3N0YXQgKnIpCit7CisJaWYgKGwtPmNhbGxfc2l0ZSA8IHItPmNhbGxfc2l0ZSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGwtPmNhbGxfc2l0ZSA+IHItPmNhbGxfc2l0ZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnl0ZXNfY21wKHN0cnVjdCBhbGxvY19zdGF0ICpsLCBzdHJ1Y3QgYWxsb2Nfc3RhdCAqcikKK3sKKwlpZiAobC0+Ynl0ZXNfYWxsb2MgPCByLT5ieXRlc19hbGxvYykKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGwtPmJ5dGVzX2FsbG9jID4gci0+Ynl0ZXNfYWxsb2MpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3NvcnRfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlzb3J0X2ZuX3Qgc29ydF9mbjsKKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RyY21wKGFyZywgInB0ciIpID09IDApCisJCXNvcnRfZm4gPSBwdHJfY21wOworCWVsc2UgaWYgKHN0cmNtcChhcmcsICJjYWxsX3NpdGUiKSA9PSAwKQorCQlzb3J0X2ZuID0gY2FsbHNpdGVfY21wOworCWVsc2UgaWYgKHN0cmNtcChhcmcsICJieXRlcyIpID09IDApCisJCXNvcnRfZm4gPSBieXRlc19jbXA7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY2FsbGVyX2ZsYWcgPiBhbGxvY19mbGFnKQorCQljYWxsZXJfc29ydF9mbiA9IHNvcnRfZm47CisJZWxzZQorCQlhbGxvY19zb3J0X2ZuID0gc29ydF9mbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3N0YXRfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0cmNtcChhcmcsICJhbGxvYyIpID09IDApCisJCWFsbG9jX2ZsYWcgPSAoY2FsbGVyX2ZsYWcgKyAxKTsKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiY2FsbGVyIikgPT0gMCkKKwkJY2FsbGVyX2ZsYWcgPSAoYWxsb2NfZmxhZyArIDEpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmVfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlpbnQgbGluZXM7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJbGluZXMgPSBzdHJ0b3VsKGFyZywgTlVMTCwgMTApOworCisJaWYgKGNhbGxlcl9mbGFnID4gYWxsb2NfZmxhZykKKwkJY2FsbGVyX2xpbmVzID0gbGluZXM7CisJZWxzZQorCQlhbGxvY19saW5lcyA9IGxpbmVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGttZW1fb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0NBTExCQUNLKDAsICJzdGF0IiwgTlVMTCwgIjxhbGxvYz58PGNhbGxlcj4iLAorCQkgICAgICJzdGF0IHNlbGVjdG9yLCBQYXNzICdhbGxvYycgb3IgJ2NhbGxlcicuIiwKKwkJICAgICBwYXJzZV9zdGF0X29wdCksCisJT1BUX0NBTExCQUNLKCdzJywgInNvcnQiLCBOVUxMLCAia2V5IiwKKwkJICAgICAic29ydCBieSBrZXk6IHB0ciwgY2FsbF9zaXRlLCBoaXQsIGJ5dGVzIiwKKwkJICAgICBwYXJzZV9zb3J0X29wdCksCisJT1BUX0NBTExCQUNLKCdsJywgImxpbmUiLCBOVUxMLCAibnVtIiwKKwkJICAgICAic2hvdyBuIGxpbnMiLAorCQkgICAgIHBhcnNlX2xpbmVfb3B0KSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0geworCSJyZWNvcmQiLAorCSItYSIsCisJIi1SIiwKKwkiLU0iLAorCSItZiIsCisJIi1jIiwgIjEiLAorCSItZSIsICJrbWVtOmttYWxsb2MiLAorCSItZSIsICJrbWVtOmttYWxsb2Nfbm9kZSIsCisJIi1lIiwgImttZW06a2ZyZWUiLAorCSItZSIsICJrbWVtOmttZW1fY2FjaGVfYWxsb2MiLAorCSItZSIsICJrbWVtOmttZW1fY2FjaGVfYWxsb2Nfbm9kZSIsCisJIi1lIiwgImttZW06a21lbV9jYWNoZV9mcmVlIiwKK307CisKK3N0YXRpYyBpbnQgX19jbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgcmVjX2FyZ2MsIGksIGo7CisJY29uc3QgY2hhciAqKnJlY19hcmd2OworCisJcmVjX2FyZ2MgPSBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKSArIGFyZ2MgLSAxOworCXJlY19hcmd2ID0gY2FsbG9jKHJlY19hcmdjICsgMSwgc2l6ZW9mKGNoYXIgKikpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpOyBpKyspCisJCXJlY19hcmd2W2ldID0gc3RyZHVwKHJlY29yZF9hcmdzW2ldKTsKKworCWZvciAoaiA9IDE7IGogPCAodW5zaWduZWQgaW50KWFyZ2M7IGorKywgaSsrKQorCQlyZWNfYXJndltpXSA9IGFyZ3Zbal07CisKKwlyZXR1cm4gY21kX3JlY29yZChpLCByZWNfYXJndiwgTlVMTCk7Cit9CisKK2ludCBjbWRfa21lbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJc3ltYm9sX19pbml0KDApOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwga21lbV9vcHRpb25zLCBrbWVtX3VzYWdlLCAwKTsKKworCWlmIChhcmdjICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZWMiLCAzKSkKKwkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmIChhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoa21lbV91c2FnZSwga21lbV9vcHRpb25zKTsKKworCWlmICghYWxsb2Nfc29ydF9mbikKKwkJYWxsb2Nfc29ydF9mbiA9IGJ5dGVzX2NtcDsKKwlpZiAoIWNhbGxlcl9zb3J0X2ZuKQorCQljYWxsZXJfc29ydF9mbiA9IGJ5dGVzX2NtcDsKKworCXJldHVybiBfX2NtZF9rbWVtKCk7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YTNkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0wLDAgKzEsNDM1IEBACisvKgorICogYnVpbHRpbi1wcm9iZS5jCisgKgorICogQnVpbHRpbiBwcm9iZSBjb21tYW5kOiBTZXQgdXAgcHJvYmUgZXZlbnRzIGJ5IEMgZXhwcmVzc2lvbgorICoKKyAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI3VuZGVmIF9HTlVfU09VUkNFCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCS8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KKyNpbmNsdWRlICJ1dGlsL3Byb2JlLWZpbmRlci5oIgorCisvKiBEZWZhdWx0IHZtbGludXggc2VhcmNoIHBhdGhzICovCisjZGVmaW5lIE5SX1NFQVJDSF9QQVRIIDMKK2NvbnN0IGNoYXIgKmRlZmF1bHRfc2VhcmNoX3BhdGhbTlJfU0VBUkNIX1BBVEhdID0geworIi9saWIvbW9kdWxlcy8lcy9idWlsZC92bWxpbnV4IiwJCS8qIEN1c3RvbSBidWlsZCBrZXJuZWwgKi8KKyIvdXNyL2xpYi9kZWJ1Zy9saWIvbW9kdWxlcy8lcy92bWxpbnV4IiwJLyogUmVkIEhhdCBkZWJ1Z2luZm8gKi8KKyIvYm9vdC92bWxpbnV4LWRlYnVnLSVzIiwJCQkvKiBVYnVudHUgKi8KK307CisKKyNkZWZpbmUgTUFYX1BBVEhfTEVOIDI1NgorI2RlZmluZSBNQVhfUFJPQkVTIDEyOAorI2RlZmluZSBNQVhfUFJPQkVfQVJHUyAxMjgKKyNkZWZpbmUgUEVSRlBST0JFX0dST1VQICJwcm9iZSIKKworLyogU2Vzc2lvbiBtYW5hZ2VtZW50IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCB7CisJY2hhciAqdm1saW51eDsKKwljaGFyICpyZWxlYXNlOworCWludCBuZWVkX2R3YXJmOworCWludCBucl9wcm9iZTsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHJvYmVzW01BWF9QUk9CRVNdOworfSBzZXNzaW9uOworCisjZGVmaW5lIHNlbWFudGljX2Vycm9yKG1zZyAuLi4pIGRpZSgiU2VtYW50aWMgZXJyb3IgOiIgbXNnKQorCisvKiBQYXJzZSBwcm9iZSBwb2ludC4gUmV0dXJuIDEgaWYgcmV0dXJuIHByb2JlICovCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9iZV9wb2ludChjaGFyICphcmcsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCit7CisJY2hhciAqcHRyLCAqdG1wOworCWNoYXIgYywgbmMgPSAwOworCS8qCisJICogPFN5bnRheD4KKwkgKiBwZXJmIHByb2JlIFNSQzpMTgorCSAqIHBlcmYgcHJvYmUgRlVOQ1srT0ZGU3wlcmV0dXJuXVtAU1JDXQorCSAqLworCisJcHRyID0gc3RycGJyayhhcmcsICI6K0AlIik7CisJaWYgKHB0cikgeworCQluYyA9ICpwdHI7CisJCSpwdHIrKyA9ICdcMCc7CisJfQorCisJLyogQ2hlY2sgYXJnIGlzIGZ1bmN0aW9uIG9yIGZpbGUgYW5kIGNvcHkgaXQgKi8KKwlpZiAoc3RyY2hyKGFyZywgJy4nKSkJLyogRmlsZSAqLworCQlwcC0+ZmlsZSA9IHN0cmR1cChhcmcpOworCWVsc2UJCQkvKiBGdW5jdGlvbiAqLworCQlwcC0+ZnVuY3Rpb24gPSBzdHJkdXAoYXJnKTsKKwlESUVfSUYocHAtPmZpbGUgPT0gTlVMTCAmJiBwcC0+ZnVuY3Rpb24gPT0gTlVMTCk7CisKKwkvKiBQYXJzZSBvdGhlciBvcHRpb25zICovCisJd2hpbGUgKHB0cikgeworCQlhcmcgPSBwdHI7CisJCWMgPSBuYzsKKwkJcHRyID0gc3RycGJyayhhcmcsICI6K0AlIik7CisJCWlmIChwdHIpIHsKKwkJCW5jID0gKnB0cjsKKwkJCSpwdHIrKyA9ICdcMCc7CisJCX0KKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJzonOgkvKiBMaW5lIG51bWJlciAqLworCQkJcHAtPmxpbmUgPSBzdHJ0b3VsKGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCAhPSAnXDAnKQorCQkJCXNlbWFudGljX2Vycm9yKCJUaGVyZSBpcyBub24tZGlnaXQgY2hhcmFjdG9yIgorCQkJCQkJIiBpbiBsaW5lIG51bWJlci4iKTsKKwkJCWJyZWFrOworCQljYXNlICcrJzoJLyogQnl0ZSBvZmZzZXQgZnJvbSBhIHN5bWJvbCAqLworCQkJcHAtPm9mZnNldCA9IHN0cnRvdWwoYXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wICE9ICdcMCcpCisJCQkJc2VtYW50aWNfZXJyb3IoIlRoZXJlIGlzIG5vbi1kaWdpdCBjaGFyYWN0b3IiCisJCQkJCQkiIGluIG9mZnNldC4iKTsKKwkJCWJyZWFrOworCQljYXNlICdAJzoJLyogRmlsZSBuYW1lICovCisJCQlpZiAocHAtPmZpbGUpCisJCQkJc2VtYW50aWNfZXJyb3IoIlNSQ0BTUkMgaXMgbm90IGFsbG93ZWQuIik7CisJCQlwcC0+ZmlsZSA9IHN0cmR1cChhcmcpOworCQkJRElFX0lGKHBwLT5maWxlID09IE5VTEwpOworCQkJaWYgKHB0cikKKwkJCQlzZW1hbnRpY19lcnJvcigiQFNSQyBtdXN0IGJlIHRoZSBsYXN0ICIKKwkJCQkJICAgICAgICJvcHRpb24uIik7CisJCQlicmVhazsKKwkJY2FzZSAnJSc6CS8qIFByb2JlIHBsYWNlcyAqLworCQkJaWYgKHN0cmNtcChhcmcsICJyZXR1cm4iKSA9PSAwKSB7CisJCQkJcHAtPnJldHByb2JlID0gMTsKKwkJCX0gZWxzZQkvKiBPdGhlcnMgbm90IHN1cHBvcnRlZCB5ZXQgKi8KKwkJCQlzZW1hbnRpY19lcnJvcigiJSUlcyBpcyBub3Qgc3VwcG9ydGVkLiIsIGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURJRV9JRigiUHJvZ3JhbSBoYXMgYSBidWcuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEV4Y2x1c2lvbiBjaGVjayAqLworCWlmIChwcC0+bGluZSAmJiBwcC0+b2Zmc2V0KQorCQlzZW1hbnRpY19lcnJvcigiT2Zmc2V0IGNhbid0IGJlIHVzZWQgd2l0aCBsaW5lIG51bWJlci4iKTsKKwlpZiAoIXBwLT5saW5lICYmIHBwLT5maWxlICYmICFwcC0+ZnVuY3Rpb24pCisJCXNlbWFudGljX2Vycm9yKCJGaWxlIGFsd2F5cyByZXF1aXJlcyBsaW5lIG51bWJlci4iKTsKKwlpZiAocHAtPm9mZnNldCAmJiAhcHAtPmZ1bmN0aW9uKQorCQlzZW1hbnRpY19lcnJvcigiT2Zmc2V0IHJlcXVpcmVzIGFuIGVudHJ5IGZ1bmN0aW9uLiIpOworCWlmIChwcC0+cmV0cHJvYmUgJiYgIXBwLT5mdW5jdGlvbikKKwkJc2VtYW50aWNfZXJyb3IoIlJldHVybiBwcm9iZSByZXF1aXJlcyBhbiBlbnRyeSBmdW5jdGlvbi4iKTsKKwlpZiAoKHBwLT5vZmZzZXQgfHwgcHAtPmxpbmUpICYmIHBwLT5yZXRwcm9iZSkKKwkJc2VtYW50aWNfZXJyb3IoIk9mZnNldC9MaW5lIGNhbid0IGJlIHVzZWQgd2l0aCByZXR1cm4gcHJvYmUuIik7CisKKwlwcl9kZWJ1Zygic3ltYm9sOiVzIGZpbGU6JXMgbGluZTolZCBvZmZzZXQ6JWQsIHJldHVybjolZFxuIiwKKwkJIHBwLT5mdW5jdGlvbiwgcHAtPmZpbGUsIHBwLT5saW5lLCBwcC0+b2Zmc2V0LCBwcC0+cmV0cHJvYmUpOworfQorCisvKiBQYXJzZSBhbiBldmVudCBkZWZpbml0aW9uLiBOb3RlIHRoYXQgYW55IGVycm9yIG11c3QgZGllLiAqLworc3RhdGljIHZvaWQgcGFyc2VfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyKQoreworCWNoYXIgKmFyZ3ZbTUFYX1BST0JFX0FSR1MgKyAyXTsJLyogRXZlbnQgKyBwcm9iZSArIGFyZ3MgKi8KKwlpbnQgYXJnYywgaTsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwID0gJnNlc3Npb24ucHJvYmVzW3Nlc3Npb24ubnJfcHJvYmVdOworCisJcHJfZGVidWcoInByb2JlLWRlZmluaXRpb24oJWQpOiAlc1xuIiwgc2Vzc2lvbi5ucl9wcm9iZSwgc3RyKTsKKwlpZiAoKytzZXNzaW9uLm5yX3Byb2JlID09IE1BWF9QUk9CRVMpCisJCXNlbWFudGljX2Vycm9yKCJUb28gbWFueSBwcm9iZXMiKTsKKworCS8qIFNlcGFyYXRlIGFyZ3VtZW50cywgc2ltaWxhciB0byBhcmd2X3NwbGl0ICovCisJYXJnYyA9IDA7CisJZG8geworCQkvKiBTa2lwIHNlcGFyYXRvcnMgKi8KKwkJd2hpbGUgKGlzc3BhY2UoKnN0cikpCisJCQlzdHIrKzsKKworCQkvKiBBZGQgYW4gYXJndW1lbnQgKi8KKwkJaWYgKCpzdHIgIT0gJ1wwJykgeworCQkJY29uc3QgY2hhciAqcyA9IHN0cjsKKworCQkJLyogU2tpcCB0aGUgYXJndW1lbnQgKi8KKwkJCXdoaWxlICghaXNzcGFjZSgqc3RyKSAmJiAqc3RyICE9ICdcMCcpCisJCQkJc3RyKys7CisKKwkJCS8qIER1cGxpY2F0ZSB0aGUgYXJndW1lbnQgKi8KKwkJCWFyZ3ZbYXJnY10gPSBzdHJuZHVwKHMsIHN0ciAtIHMpOworCQkJaWYgKGFyZ3ZbYXJnY10gPT0gTlVMTCkKKwkJCQlkaWUoInN0cm5kdXAiKTsKKwkJCWlmICgrK2FyZ2MgPT0gTUFYX1BST0JFX0FSR1MpCisJCQkJc2VtYW50aWNfZXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50cyIpOworCQkJcHJfZGVidWcoImFyZ3ZbJWRdPSVzXG4iLCBhcmdjLCBhcmd2W2FyZ2MgLSAxXSk7CisJCX0KKwl9IHdoaWxlICgqc3RyICE9ICdcMCcpOworCWlmICghYXJnYykKKwkJc2VtYW50aWNfZXJyb3IoIkFuIGVtcHR5IGFyZ3VtZW50LiIpOworCisJLyogUGFyc2UgcHJvYmUgcG9pbnQgKi8KKwlwYXJzZV9wcm9iZV9wb2ludChhcmd2WzBdLCBwcCk7CisJZnJlZShhcmd2WzBdKTsKKwlpZiAocHAtPmZpbGUgfHwgcHAtPmxpbmUpCisJCXNlc3Npb24ubmVlZF9kd2FyZiA9IDE7CisKKwkvKiBDb3B5IGFyZ3VtZW50cyAqLworCXBwLT5ucl9hcmdzID0gYXJnYyAtIDE7CisJaWYgKHBwLT5ucl9hcmdzID4gMCkgeworCQlwcC0+YXJncyA9IChjaGFyICoqKW1hbGxvYyhzaXplb2YoY2hhciAqKSAqIHBwLT5ucl9hcmdzKTsKKwkJaWYgKCFwcC0+YXJncykKKwkJCWRpZSgibWFsbG9jIik7CisJCW1lbWNweShwcC0+YXJncywgJmFyZ3ZbMV0sIHNpemVvZihjaGFyICopICogcHAtPm5yX2FyZ3MpOworCX0KKworCS8qIEVuc3VyZSByZXR1cm4gcHJvYmUgaGFzIG5vIEMgYXJndW1lbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHAtPm5yX2FyZ3M7IGkrKykKKwkJaWYgKGlzX2NfdmFybmFtZShwcC0+YXJnc1tpXSkpIHsKKwkJCWlmIChwcC0+cmV0cHJvYmUpCisJCQkJc2VtYW50aWNfZXJyb3IoIllvdSBjYW4ndCBzcGVjaWZ5IGxvY2FsIgorCQkJCQkJIiB2YXJpYWJsZSBmb3Iga3JldHByb2JlIik7CisJCQlzZXNzaW9uLm5lZWRfZHdhcmYgPSAxOworCQl9CisKKwlwcl9kZWJ1ZygiJWQgYXJndW1lbnRzXG4iLCBwcC0+bnJfYXJncyk7Cit9CisKK3N0YXRpYyBpbnQgb3B0X2FkZF9wcm9iZV9ldmVudChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmIChzdHIpCisJCXBhcnNlX3Byb2JlX2V2ZW50KHN0cik7CisJcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTk9fTElCRFdBUkYKK3N0YXRpYyBpbnQgb3Blbl9kZWZhdWx0X3ZtbGludXgodm9pZCkKK3sKKwlzdHJ1Y3QgdXRzbmFtZSB1dHM7CisJY2hhciBmbmFtZVtNQVhfUEFUSF9MRU5dOworCWludCBmZCwgcmV0LCBpOworCisJcmV0ID0gdW5hbWUoJnV0cyk7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygidW5hbWUoKSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisJc2Vzc2lvbi5yZWxlYXNlID0gdXRzLnJlbGVhc2U7CisJZm9yIChpID0gMDsgaSA8IE5SX1NFQVJDSF9QQVRIOyBpKyspIHsKKwkJcmV0ID0gc25wcmludGYoZm5hbWUsIE1BWF9QQVRIX0xFTiwKKwkJCSAgICAgICBkZWZhdWx0X3NlYXJjaF9wYXRoW2ldLCBzZXNzaW9uLnJlbGVhc2UpOworCQlpZiAocmV0ID49IE1BWF9QQVRIX0xFTiB8fCByZXQgPCAwKSB7CisJCQlwcl9kZWJ1ZygiRmlsZW5hbWUoJWQsJXMpIGlzIHRvbyBsb25nLlxuIiwgaSwKKwkJCQl1dHMucmVsZWFzZSk7CisJCQllcnJubyA9IEUyQklHOworCQkJcmV0dXJuIC1FMkJJRzsKKwkJfQorCQlwcl9kZWJ1ZygidHJ5IHRvIG9wZW4gJXNcbiIsIGZuYW1lKTsKKwkJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJCWlmIChmZCA+PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBmZDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2JlX3VzYWdlW10gPSB7CisJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gJ1BST0JFREVGJyBbJ1BST0JFREVGJyAuLi5dIiwKKwkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWFkZCAnUFJPQkVERUYnIFstLWFkZCAnUFJPQkVERUYnIC4uLl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCisJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHBhcnNlZCBhcmd1bWVudHMsIGV0YykiKSwKKyNpZm5kZWYgTk9fTElCRFdBUkYKKwlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmc2Vzc2lvbi52bWxpbnV4LCAiZmlsZSIsCisJCSJ2bWxpbnV4L21vZHVsZSBwYXRobmFtZSIpLAorI2VuZGlmCisJT1BUX0NBTExCQUNLKCdhJywgImFkZCIsIE5VTEwsCisjaWZkZWYgTk9fTElCRFdBUkYKKwkJIkZVTkNbK09GRlN8JXJldHVybl0gW0FSRyAuLi5dIiwKKyNlbHNlCisJCSJGVU5DWytPRkZTfCVyZXR1cm58OlJMTl1bQFNSQ118U1JDOkFMTiBbQVJHIC4uLl0iLAorI2VuZGlmCisJCSJwcm9iZSBwb2ludCBkZWZpbml0aW9uLCB3aGVyZVxuIgorCQkiXHRcdEdSUDpcdEdyb3VwIG5hbWUgKG9wdGlvbmFsKVxuIgorCQkiXHRcdE5BTUU6XHRFdmVudCBuYW1lXG4iCisJCSJcdFx0RlVOQzpcdEZ1bmN0aW9uIG5hbWVcbiIKKwkJIlx0XHRPRkZTOlx0T2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgKGluIGJ5dGUpXG4iCisJCSJcdFx0JXJldHVybjpcdFB1dCB0aGUgcHJvYmUgYXQgZnVuY3Rpb24gcmV0dXJuXG4iCisjaWZkZWYgTk9fTElCRFdBUkYKKwkJIlx0XHRBUkc6XHRQcm9iZSBhcmd1bWVudCAob25seSBcbiIKKyNlbHNlCisJCSJcdFx0U1JDOlx0U291cmNlIGNvZGUgcGF0aFxuIgorCQkiXHRcdFJMTjpcdFJlbGF0aXZlIGxpbmUgbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkuXG4iCisJCSJcdFx0QUxOOlx0QWJzb2x1dGUgbGluZSBudW1iZXIgaW4gZmlsZS5cbiIKKwkJIlx0XHRBUkc6XHRQcm9iZSBhcmd1bWVudCAobG9jYWwgdmFyaWFibGUgbmFtZSBvclxuIgorI2VuZGlmCisJCSJcdFx0XHRrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCBpcyBzdXBwb3J0ZWQuKVxuIiwKKwkJb3B0X2FkZF9wcm9iZV9ldmVudCksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgaW50IHdyaXRlX25ld19ldmVudChpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCWlmIChyZXQgPD0gMCkKKwkJZGllKCJGYWlsZWQgdG8gY3JlYXRlIGV2ZW50LiIpOworCWVsc2UKKwkJcHJpbnRmKCJBZGRlZCBuZXcgZXZlbnQ6ICVzXG4iLCBidWYpOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfQ01ETEVOIDI1NgorCitzdGF0aWMgaW50IHN5bnRoZXNpemVfcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwljaGFyICpidWY7CisJaW50IGksIGxlbiwgcmV0OworCXBwLT5wcm9iZXNbMF0gPSBidWYgPSAoY2hhciAqKWNhbGxvYyhNQVhfQ01ETEVOLCBzaXplb2YoY2hhcikpOworCWlmICghYnVmKQorCQlkaWUoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgYnkgY2FsbG9jLiIpOworCXJldCA9IHNucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVzKyVkIiwgcHAtPmZ1bmN0aW9uLCBwcC0+b2Zmc2V0KTsKKwlpZiAocmV0IDw9IDAgfHwgcmV0ID49IE1BWF9DTURMRU4pCisJCWdvdG8gZXJyb3I7CisJbGVuID0gcmV0OworCisJZm9yIChpID0gMDsgaSA8IHBwLT5ucl9hcmdzOyBpKyspIHsKKwkJcmV0ID0gc25wcmludGYoJmJ1ZltsZW5dLCBNQVhfQ01ETEVOIC0gbGVuLCAiICVzIiwKKwkJCSAgICAgICBwcC0+YXJnc1tpXSk7CisJCWlmIChyZXQgPD0gMCB8fCByZXQgPj0gTUFYX0NNRExFTiAtIGxlbikKKwkJCWdvdG8gZXJyb3I7CisJCWxlbiArPSByZXQ7CisJfQorCXBwLT5mb3VuZCA9IDE7CisJcmV0dXJuIHBwLT5mb3VuZDsKK2Vycm9yOgorCWZyZWUocHAtPnByb2Jlc1swXSk7CisJaWYgKHJldCA+IDApCisJCXJldCA9IC1FMkJJRzsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX3Byb2JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlpbnQgaSwgaiwgZmQsIHJldDsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwOworCWNoYXIgYnVmW01BWF9DTURMRU5dOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcHJvYmVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCXBhcnNlX3Byb2JlX2V2ZW50KGFyZ3ZbaV0pOworCisJaWYgKHNlc3Npb24ubnJfcHJvYmUgPT0gMCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCisjaWZkZWYgTk9fTElCRFdBUkYKKwkJc2VtYW50aWNfZXJyb3IoIkRlYnVnaW5mby1hbmFseXNpcyBpcyBub3Qgc3VwcG9ydGVkIik7CisjZWxzZQkvKiAhTk9fTElCRFdBUkYgKi8KKwkJcHJfaW5mbygiU29tZSBwcm9iZXMgcmVxdWlyZSBkZWJ1Z2luZm8uXG4iKTsKKworCWlmIChzZXNzaW9uLnZtbGludXgpCisJCWZkID0gb3BlbihzZXNzaW9uLnZtbGludXgsIE9fUkRPTkxZKTsKKwllbHNlCisJCWZkID0gb3Blbl9kZWZhdWx0X3ZtbGludXgoKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCisJCQlkaWUoIkNvdWxkIG5vdCBvcGVuIHZtbGludXgvbW9kdWxlIGZpbGUuIik7CisKKwkJcHJfd2FybmluZygiQ291bGQgbm90IG9wZW4gdm1saW51eC9tb2R1bGUgZmlsZS4iCisJCQkgICAiIFRyeSB0byB1c2Ugc3ltYm9scy5cbiIpOworCQlnb3RvIGVuZF9kd2FyZjsKKwl9CisKKwkvKiBTZWFyY2hpbmcgcHJvYmUgcG9pbnRzICovCisJZm9yIChqID0gMDsgaiA8IHNlc3Npb24ubnJfcHJvYmU7IGorKykgeworCQlwcCA9ICZzZXNzaW9uLnByb2Jlc1tqXTsKKwkJaWYgKHBwLT5mb3VuZCkKKwkJCWNvbnRpbnVlOworCisJCWxzZWVrKGZkLCBTRUVLX1NFVCwgMCk7CisJCXJldCA9IGZpbmRfcHJvYmVwb2ludChmZCwgcHApOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHNlc3Npb24ubmVlZF9kd2FyZikKKwkJCQlkaWUoIkNvdWxkIG5vdCBhbmFseXplIGRlYnVnaW5mby4iKTsKKworCQkJcHJfd2FybmluZygiQW4gZXJyb3Igb2NjdXJyZWQgaW4gZGVidWdpbmZvIGFuYWx5c2lzLiBUcnkgdG8gdXNlIHN5bWJvbHMuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gMCkJLyogTm8gZXJyb3IgYnV0IGZhaWxlZCB0byBmaW5kIHByb2JlIHBvaW50LiAqLworCQkJZGllKCJObyBwcm9iZSBwb2ludCBmb3VuZC4iKTsKKwl9CisJY2xvc2UoZmQpOworCitlbmRfZHdhcmY6CisjZW5kaWYgLyogIU5PX0xJQkRXQVJGICovCisKKwkvKiBTeW50aGVzaXplIHByb2JlcyB3aXRob3V0IGR3YXJmICovCisJZm9yIChqID0gMDsgaiA8IHNlc3Npb24ubnJfcHJvYmU7IGorKykgeworCQlwcCA9ICZzZXNzaW9uLnByb2Jlc1tqXTsKKwkJaWYgKHBwLT5mb3VuZCkJLyogVGhpcyBwcm9iZSBpcyBhbHJlYWR5IGZvdW5kLiAqLworCQkJY29udGludWU7CisKKwkJcmV0ID0gc3ludGhlc2l6ZV9wcm9iZV9ldmVudChwcCk7CisJCWlmIChyZXQgPT0gLUUyQklHKQorCQkJc2VtYW50aWNfZXJyb3IoInByb2JlIHBvaW50IGlzIHRvbyBsb25nLiIpOworCQllbHNlIGlmIChyZXQgPCAwKQorCQkJZGllKCJGYWlsZWQgdG8gc3ludGhlc2l6ZSBhIHByb2JlIHBvaW50LiIpOworCX0KKworCS8qIFNldHRuZyB1cCBwcm9iZSBwb2ludHMgKi8KKwlzbnByaW50ZihidWYsIE1BWF9DTURMRU4sICIlcy8uLi9rcHJvYmVfZXZlbnRzIiwgZGVidWdmc19wYXRoKTsKKwlmZCA9IG9wZW4oYnVmLCBPX1dST05MWSwgT19BUFBFTkQpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCWRpZSgia3Byb2JlX2V2ZW50cyBmaWxlIGRvZXMgbm90IGV4aXN0IC0gcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfS1BST0JFX1RSQUNFUi4iKTsKKwkJZWxzZQorCQkJZGllKCJDb3VsZCBub3Qgb3BlbiBrcHJvYmVfZXZlbnRzIGZpbGU6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworCX0KKwlmb3IgKGogPSAwOyBqIDwgc2Vzc2lvbi5ucl9wcm9iZTsgaisrKSB7CisJCXBwID0gJnNlc3Npb24ucHJvYmVzW2pdOworCQlpZiAocHAtPmZvdW5kID09IDEpIHsKKwkJCXNucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVjOiVzLyVzXyV4ICVzXG4iLAorCQkJCXBwLT5yZXRwcm9iZSA/ICdyJyA6ICdwJywgUEVSRlBST0JFX0dST1VQLAorCQkJCXBwLT5mdW5jdGlvbiwgcHAtPm9mZnNldCwgcHAtPnByb2Jlc1swXSk7CisJCQl3cml0ZV9uZXdfZXZlbnQoZmQsIGJ1Zik7CisJCX0gZWxzZQorCQkJZm9yIChpID0gMDsgaSA8IHBwLT5mb3VuZDsgaSsrKSB7CisJCQkJc25wcmludGYoYnVmLCBNQVhfQ01ETEVOLCAiJWM6JXMvJXNfJXhfJWQgJXNcbiIsCisJCQkJCXBwLT5yZXRwcm9iZSA/ICdyJyA6ICdwJywKKwkJCQkJUEVSRlBST0JFX0dST1VQLAorCQkJCQlwcC0+ZnVuY3Rpb24sIHBwLT5vZmZzZXQsIGksCisJCQkJCXBwLT5wcm9iZXNbMF0pOworCQkJCXdyaXRlX25ld19ldmVudChmZCwgYnVmKTsKKwkJCX0KKwl9CisJY2xvc2UoZmQpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggOGIyYzg2MC4uODdmOThmZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtMTcsMTMgKzE3LDExIEBACiAjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKICNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgogCi0jZGVmaW5lIEFMSUdOKHgsIGEpCQlfX0FMSUdOX01BU0soeCwgKHR5cGVvZih4KSkoYSktMSkKLSNkZWZpbmUgX19BTElHTl9NQVNLKHgsIG1hc2spCSgoKHgpKyhtYXNrKSkmfihtYXNrKSkKLQogc3RhdGljIGludAkJCWZkW01BWF9OUl9DUFVTXVtNQVhfQ09VTlRFUlNdOwogCiBzdGF0aWMgbG9uZwkJCWRlZmF1bHRfaW50ZXJ2YWwJCT0gICAgICAwOwpAQCAtMTEyLDYgKzExMCwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgd3JpdGVfZXZlbnQoZXZlbnRfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwkvKgorCSogQWRkIGl0IHRvIHRoZSBsaXN0IG9mIERTT3MsIHNvIHRoYXQgd2hlbiB3ZSBmaW5pc2ggdGhpcworCSAqIHJlY29yZCBzZXNzaW9uIHdlIGNhbiBwaWNrIHRoZSBhdmFpbGFibGUgYnVpbGQtaWRzLgorCSAqLworCWlmIChidWYtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX01NQVApCisJCWRzb3NfX2ZpbmRuZXcoYnVmLT5tbWFwLmZpbGVuYW1lKTsKKworCXdyaXRlX291dHB1dChidWYsIHNpemUpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJd3JpdGVfZXZlbnQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG1tYXBfcmVhZChzdHJ1Y3QgbW1hcF9kYXRhICptZCkKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZCA9IG1tYXBfcmVhZF9oZWFkKG1kKTsKQEAgLTE2MCwxNCArMTc2LDE0IEBACiAJCXNpemUgPSBtZC0+bWFzayArIDEgLSAob2xkICYgbWQtPm1hc2spOwogCQlvbGQgKz0gc2l6ZTsKIAotCQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKKwkJd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKIAl9CiAKIAlidWYgPSAmZGF0YVtvbGQgJiBtZC0+bWFza107CiAJc2l6ZSA9IGhlYWQgLSBvbGQ7CiAJb2xkICs9IHNpemU7CiAKLQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKKwl3cml0ZV9ldmVudChidWYsIHNpemUpOwogCiAJbWQtPnByZXYgPSBvbGQ7CiAJbW1hcF93cml0ZV90YWlsKG1kLCBvbGQpOwpAQCAtMTk0LDE2OCArMjEwLDYgQEAKIAlraWxsKGdldHBpZCgpLCBzaWducik7CiB9CiAKLXN0YXRpYyBwaWRfdCBwaWRfc3ludGhlc2l6ZV9jb21tX2V2ZW50KHBpZF90IHBpZCwgaW50IGZ1bGwpCi17Ci0Jc3RydWN0IGNvbW1fZXZlbnQgY29tbV9ldjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQljaGFyIGJmW0JVRlNJWl07Ci0JRklMRSAqZnA7Ci0Jc2l6ZV90IHNpemUgPSAwOwotCURJUiAqdGFza3M7Ci0Jc3RydWN0IGRpcmVudCBkaXJlbnQsICpuZXh0OwotCXBpZF90IHRnaWQgPSAwOwotCi0Jc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC9zdGF0dXMiLCBwaWQpOwotCi0JZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKLQlpZiAoZnAgPT0gTlVMTCkgewotCQkvKgotCQkgKiBXZSByYWNlZCB3aXRoIGEgdGFzayBleGl0aW5nIC0ganVzdCByZXR1cm46Ci0JCSAqLwotCQlpZiAodmVyYm9zZSkKLQkJCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltZW1zZXQoJmNvbW1fZXYsIDAsIHNpemVvZihjb21tX2V2KSk7Ci0Jd2hpbGUgKCFjb21tX2V2LmNvbW1bMF0gfHwgIWNvbW1fZXYucGlkKSB7Ci0JCWlmIChmZ2V0cyhiZiwgc2l6ZW9mKGJmKSwgZnApID09IE5VTEwpCi0JCQlnb3RvIG91dF9mYWlsdXJlOwotCi0JCWlmIChtZW1jbXAoYmYsICJOYW1lOiIsIDUpID09IDApIHsKLQkJCWNoYXIgKm5hbWUgPSBiZiArIDU7Ci0JCQl3aGlsZSAoKm5hbWUgJiYgaXNzcGFjZSgqbmFtZSkpCi0JCQkJKytuYW1lOwotCQkJc2l6ZSA9IHN0cmxlbihuYW1lKSAtIDE7Ci0JCQltZW1jcHkoY29tbV9ldi5jb21tLCBuYW1lLCBzaXplKyspOwotCQl9IGVsc2UgaWYgKG1lbWNtcChiZiwgIlRnaWQ6IiwgNSkgPT0gMCkgewotCQkJY2hhciAqdGdpZHMgPSBiZiArIDU7Ci0JCQl3aGlsZSAoKnRnaWRzICYmIGlzc3BhY2UoKnRnaWRzKSkKLQkJCQkrK3RnaWRzOwotCQkJdGdpZCA9IGNvbW1fZXYucGlkID0gYXRvaSh0Z2lkcyk7Ci0JCX0KLQl9Ci0KLQljb21tX2V2LmhlYWRlci50eXBlID0gUEVSRl9SRUNPUkRfQ09NTTsKLQlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOwotCWNvbW1fZXYuaGVhZGVyLnNpemUgPSBzaXplb2YoY29tbV9ldikgLSAoc2l6ZW9mKGNvbW1fZXYuY29tbSkgLSBzaXplKTsKLQotCWlmICghZnVsbCkgewotCQljb21tX2V2LnRpZCA9IHBpZDsKLQotCQl3cml0ZV9vdXRwdXQoJmNvbW1fZXYsIGNvbW1fZXYuaGVhZGVyLnNpemUpOwotCQlnb3RvIG91dF9mY2xvc2U7Ci0JfQotCi0Jc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC90YXNrIiwgcGlkKTsKLQotCXRhc2tzID0gb3BlbmRpcihmaWxlbmFtZSk7Ci0Jd2hpbGUgKCFyZWFkZGlyX3IodGFza3MsICZkaXJlbnQsICZuZXh0KSAmJiBuZXh0KSB7Ci0JCWNoYXIgKmVuZDsKLQkJcGlkID0gc3RydG9sKGRpcmVudC5kX25hbWUsICZlbmQsIDEwKTsKLQkJaWYgKCplbmQpCi0JCQljb250aW51ZTsKLQotCQljb21tX2V2LnRpZCA9IHBpZDsKLQotCQl3cml0ZV9vdXRwdXQoJmNvbW1fZXYsIGNvbW1fZXYuaGVhZGVyLnNpemUpOwotCX0KLQljbG9zZWRpcih0YXNrcyk7Ci0KLW91dF9mY2xvc2U6Ci0JZmNsb3NlKGZwKTsKLQlyZXR1cm4gdGdpZDsKLQotb3V0X2ZhaWx1cmU6Ci0JZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBnZXQgQ09NTSBhbmQgcGdpZCwgbWFsZm9ybWVkICVzXG4iLAotCQlmaWxlbmFtZSk7Ci0JZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi1zdGF0aWMgdm9pZCBwaWRfc3ludGhlc2l6ZV9tbWFwX3NhbXBsZXMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkKQotewotCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwotCUZJTEUgKmZwOwotCi0Jc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC9tYXBzIiwgcGlkKTsKLQotCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0JaWYgKGZwID09IE5VTEwpIHsKLQkJLyoKLQkJICogV2UgcmFjZWQgd2l0aCBhIHRhc2sgZXhpdGluZyAtIGp1c3QgcmV0dXJuOgotCQkgKi8KLQkJaWYgKHZlcmJvc2UpCi0JCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQl3aGlsZSAoMSkgewotCQljaGFyIGJmW0JVRlNJWl0sICpwYmYgPSBiZjsKLQkJc3RydWN0IG1tYXBfZXZlbnQgbW1hcF9ldiA9IHsKLQkJCS5oZWFkZXIgPSB7IC50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCB9LAotCQl9OwotCQlpbnQgbjsKLQkJc2l6ZV90IHNpemU7Ci0JCWlmIChmZ2V0cyhiZiwgc2l6ZW9mKGJmKSwgZnApID09IE5VTEwpCi0JCQlicmVhazsKLQotCQkvKiAwMDQwMDAwMC0wMDQwYzAwMCByLXhwIDAwMDAwMDAwIGZkOjAxIDQxMDM4ICAvYmluL2NhdCAqLwotCQluID0gaGV4MnU2NChwYmYsICZtbWFwX2V2LnN0YXJ0KTsKLQkJaWYgKG4gPCAwKQotCQkJY29udGludWU7Ci0JCXBiZiArPSBuICsgMTsKLQkJbiA9IGhleDJ1NjQocGJmLCAmbW1hcF9ldi5sZW4pOwotCQlpZiAobiA8IDApCi0JCQljb250aW51ZTsKLQkJcGJmICs9IG4gKyAzOwotCQlpZiAoKnBiZiA9PSAneCcpIHsgLyogdm1fZXhlYyAqLwotCQkJY2hhciAqZXhlY25hbWUgPSBzdHJjaHIoYmYsICcvJyk7Ci0KLQkJCS8qIENhdGNoIFZEU08gKi8KLQkJCWlmIChleGVjbmFtZSA9PSBOVUxMKQotCQkJCWV4ZWNuYW1lID0gc3Ryc3RyKGJmLCAiW3Zkc29dIik7Ci0KLQkJCWlmIChleGVjbmFtZSA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzaXplID0gc3RybGVuKGV4ZWNuYW1lKTsKLQkJCWV4ZWNuYW1lW3NpemUgLSAxXSA9ICdcMCc7IC8qIFJlbW92ZSBcbiAqLwotCQkJbWVtY3B5KG1tYXBfZXYuZmlsZW5hbWUsIGV4ZWNuYW1lLCBzaXplKTsKLQkJCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7Ci0JCQltbWFwX2V2LmxlbiAtPSBtbWFwX2V2LnN0YXJ0OwotCQkJbW1hcF9ldi5oZWFkZXIuc2l6ZSA9IChzaXplb2YobW1hcF9ldikgLQotCQkJCQkgICAgICAgKHNpemVvZihtbWFwX2V2LmZpbGVuYW1lKSAtIHNpemUpKTsKLQkJCW1tYXBfZXYucGlkID0gdGdpZDsKLQkJCW1tYXBfZXYudGlkID0gcGlkOwotCi0JCQl3cml0ZV9vdXRwdXQoJm1tYXBfZXYsIG1tYXBfZXYuaGVhZGVyLnNpemUpOwotCQl9Ci0JfQotCi0JZmNsb3NlKGZwKTsKLX0KLQotc3RhdGljIHZvaWQgc3ludGhlc2l6ZV9hbGwodm9pZCkKLXsKLQlESVIgKnByb2M7Ci0Jc3RydWN0IGRpcmVudCBkaXJlbnQsICpuZXh0OwotCi0JcHJvYyA9IG9wZW5kaXIoIi9wcm9jIik7Ci0KLQl3aGlsZSAoIXJlYWRkaXJfcihwcm9jLCAmZGlyZW50LCAmbmV4dCkgJiYgbmV4dCkgewotCQljaGFyICplbmQ7Ci0JCXBpZF90IHBpZCwgdGdpZDsKLQotCQlwaWQgPSBzdHJ0b2woZGlyZW50LmRfbmFtZSwgJmVuZCwgMTApOwotCQlpZiAoKmVuZCkgLyogb25seSBpbnRlcmVzdGVkIGluIHByb3BlciBudW1lcmljYWwgZGlyZW50cyAqLwotCQkJY29udGludWU7Ci0KLQkJdGdpZCA9IHBpZF9zeW50aGVzaXplX2NvbW1fZXZlbnQocGlkLCAxKTsKLQkJcGlkX3N5bnRoZXNpemVfbW1hcF9zYW1wbGVzKHBpZCwgdGdpZCk7Ci0JfQotCi0JY2xvc2VkaXIocHJvYyk7Ci19Ci0KIHN0YXRpYyBpbnQgZ3JvdXBfZmQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqZ2V0X2hlYWRlcl9hdHRyKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmEsIGludCBucikKQEAgLTM2Niw3ICsyMjAsMTEgQEAKIAkJaF9hdHRyID0gaGVhZGVyLT5hdHRyW25yXTsKIAl9IGVsc2UgewogCQloX2F0dHIgPSBwZXJmX2hlYWRlcl9hdHRyX19uZXcoYSk7Ci0JCXBlcmZfaGVhZGVyX19hZGRfYXR0cihoZWFkZXIsIGhfYXR0cik7CisJCWlmIChoX2F0dHIgIT0gTlVMTCkKKwkJCWlmIChwZXJmX2hlYWRlcl9fYWRkX2F0dHIoaGVhZGVyLCBoX2F0dHIpIDwgMCkgeworCQkJCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShoX2F0dHIpOworCQkJCWhfYXR0ciA9IE5VTEw7CisJCQl9CiAJfQogCiAJcmV0dXJuIGhfYXR0cjsKQEAgLTQyNyw3ICsyODUsNyBAQAogCWlmIChmZFtucl9jcHVdW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CiAKLQkJaWYgKGVyciA9PSBFUEVSTSkKKwkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKQogCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIik7CiAJCWVsc2UgaWYgKGVyciA9PSAgRU5PREVWICYmIHByb2ZpbGVfY3B1ICE9IC0xKQogCQkJZGllKCJObyBzdWNoIGRldmljZSAtIGRpZCB5b3Ugc3BlY2lmeSBhbiBvdXQtb2YtcmFuZ2UgcHJvZmlsZSBDUFU/XG4iKTsKQEAgLTQ1NCw2ICszMTIsOCBAQAogCX0KIAogCWhfYXR0ciA9IGdldF9oZWFkZXJfYXR0cihhdHRyLCBjb3VudGVyKTsKKwlpZiAoaF9hdHRyID09IE5VTEwpCisJCWRpZSgibm9tZW1cbiIpOwogCiAJaWYgKCFmaWxlX25ldykgewogCQlpZiAobWVtY21wKCZoX2F0dHItPmF0dHIsIGF0dHIsIHNpemVvZigqYXR0cikpKSB7CkBAIC00NjcsNyArMzI3LDEwIEBACiAJCWV4aXQoLTEpOwogCX0KIAotCXBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChoX2F0dHIsIHJlYWRfZGF0YS5pZCk7CisJaWYgKHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChoX2F0dHIsIHJlYWRfZGF0YS5pZCkgPCAwKSB7CisJCXByX3dhcm5pbmcoIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBpZFxuIik7CisJCWV4aXQoLTEpOworCX0KIAogCWFzc2VydChmZFtucl9jcHVdW2NvdW50ZXJdID49IDApOwogCWZjbnRsKGZkW25yX2NwdV1bY291bnRlcl0sIEZfU0VURkwsIE9fTk9OQkxPQ0spOwpAQCAtNTI4LDcgKzM5MSw3IEBACiB7CiAJaGVhZGVyLT5kYXRhX3NpemUgKz0gYnl0ZXNfd3JpdHRlbjsKIAotCXBlcmZfaGVhZGVyX193cml0ZShoZWFkZXIsIG91dHB1dCk7CisJcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0LCB0cnVlKTsKIH0KIAogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQpAQCAtNTM3LDcgKzQwMCw3IEBACiAJc3RydWN0IHN0YXQgc3Q7CiAJcGlkX3QgcGlkID0gMDsKIAlpbnQgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgd2FraW5nID0gMDsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CkBAIC01NzEsMTcgKzQzNCwyNCBAQAogCQlleGl0KC0xKTsKIAl9CiAKLQlpZiAoIWZpbGVfbmV3KQotCQloZWFkZXIgPSBwZXJmX2hlYWRlcl9fcmVhZChvdXRwdXQpOwotCWVsc2UKLQkJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKKwlpZiAoaGVhZGVyID09IE5VTEwpIHsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgcmVhZGluZyBwZXJmIGZpbGUgaGVhZGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghZmlsZV9uZXcpIHsKKwkJZXJyID0gcGVyZl9oZWFkZXJfX3JlYWQoaGVhZGVyLCBvdXRwdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKHJhd19zYW1wbGVzKSB7Ci0JCXBlcmZfaGVhZGVyX19zZXRfdHJhY2VfaW5mbygpOworCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoaGVhZGVyLCBIRUFERVJfVFJBQ0VfSU5GTyk7CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IG5yX2NvdW50ZXJzOyBpKyspIHsKIAkJCWlmIChhdHRyc1tpXS5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgewotCQkJCXBlcmZfaGVhZGVyX19zZXRfdHJhY2VfaW5mbygpOworCQkJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChoZWFkZXIsIEhFQURFUl9UUkFDRV9JTkZPKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNjA0LDI1ICs0NzQsMzYgQEAKIAkJfQogCX0KIAotCWlmIChmaWxlX25ldykKLQkJcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0KTsKKwlpZiAoZmlsZV9uZXcpIHsKKwkJZXJyID0gcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0LCBmYWxzZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAKLQlpZiAoIXN5c3RlbV93aWRlKSB7Ci0JCXBpZF90IHRnaWQgPSBwaWRfc3ludGhlc2l6ZV9jb21tX2V2ZW50KHBpZCwgMCk7Ci0JCXBpZF9zeW50aGVzaXplX21tYXBfc2FtcGxlcyhwaWQsIHRnaWQpOwotCX0gZWxzZQotCQlzeW50aGVzaXplX2FsbCgpOworCWlmICghc3lzdGVtX3dpZGUpCisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOworCWVsc2UKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KTsKIAogCWlmICh0YXJnZXRfcGlkID09IC0xICYmIGFyZ2MpIHsKIAkJcGlkID0gZm9yaygpOwogCQlpZiAocGlkIDwgMCkKLQkJCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKKwkJCWRpZSgiZmFpbGVkIHRvIGZvcmsiKTsKIAogCQlpZiAoIXBpZCkgewogCQkJaWYgKGV4ZWN2cChhcmd2WzBdLCAoY2hhciAqKilhcmd2KSkgewogCQkJCXBlcnJvcihhcmd2WzBdKTsKIAkJCQlleGl0KC0xKTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXYWl0IGEgYml0IGZvciB0aGUgZXhlY3YnZWQgY2hpbGQgdG8gYXBwZWFyCisJCQkgKiBhbmQgYmUgdXBkYXRlZCBpbiAvcHJvYworCQkJICogRklYTUU6IERvIHlvdSBrbm93IGEgbGVzcyBoZXVyaXN0aWNhbCBzb2x1dGlvbj8KKwkJCSAqLworCQkJdXNsZWVwKDEwMDApOworCQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwKKwkJCQkJCSBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KTsKIAkJfQogCiAJCWNoaWxkX3BpZCA9IHBpZDsKQEAgLTYzMyw3ICs1MTQsNyBAQAogCiAJCXBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gcmVhbHRpbWVfcHJpbzsKIAkJaWYgKHNjaGVkX3NldHNjaGVkdWxlcigwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pKSB7Ci0JCQlwcmludGYoIkNvdWxkIG5vdCBzZXQgcmVhbHRpbWUgcHJpb3JpdHkuXG4iKTsKKwkJCXByX2VycigiQ291bGQgbm90IHNldCByZWFsdGltZSBwcmlvcml0eS5cbiIpOwogCQkJZXhpdCgtMSk7CiAJCX0KIAl9CkBAIC02NTEsNyArNTMyLDcgQEAKIAkJaWYgKGhpdHMgPT0gc2FtcGxlcykgewogCQkJaWYgKGRvbmUpCiAJCQkJYnJlYWs7Ci0JCQlyZXQgPSBwb2xsKGV2ZW50X2FycmF5LCBucl9wb2xsLCAtMSk7CisJCQllcnIgPSBwb2xsKGV2ZW50X2FycmF5LCBucl9wb2xsLCAtMSk7CiAJCQl3YWtpbmcrKzsKIAkJfQogCkBAIC03MzIsNiArNjEzLDggQEAKIHsKIAlpbnQgY291bnRlcjsKIAorCXN5bWJvbF9faW5pdCgwKTsKKwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHJlY29yZF91c2FnZSwKIAkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEgJiYgIXN5c3RlbV93aWRlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IGE0ZjhjYzIuLjFhODA2ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTU5LDEyICs1OSwyOCBAQAogCiBzdGF0aWMgdTY0CQlzYW1wbGVfdHlwZTsKIAotc3RhdGljIHNpemVfdCBpcGNoYWluX19mcHJpbnRmX2dyYXBoX2xpbmUoRklMRSAqZnAsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2spCisKK3N0YXRpYyBzaXplX3QKK2NhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihGSUxFICpmcCwgaW50IGxlZnRfbWFyZ2luKQoreworCWludCBpOworCWludCByZXQ7CisKKwlyZXQgPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVmdF9tYXJnaW47IGkrKykKKwkJcmV0ICs9IGZwcmludGYoZnAsICIgIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90IGlwY2hhaW5fX2ZwcmludGZfZ3JhcGhfbGluZShGSUxFICpmcCwgaW50IGRlcHRoLCBpbnQgZGVwdGhfbWFzaywKKwkJCQkJICBpbnQgbGVmdF9tYXJnaW4pCiB7CiAJaW50IGk7CiAJc2l6ZV90IHJldCA9IDA7CiAKLQlyZXQgKz0gZnByaW50ZihmcCwgIiVzIiwgIiAgICAgICAgICAgICAgICAiKTsKKwlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKIAkJaWYgKGRlcHRoX21hc2sgJiAoMSA8PCBpKSkKQEAgLTc5LDEyICs5NSwxMiBAQAogc3RhdGljIHNpemVfdAogaXBjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbiwgaW50IGRlcHRoLAogCQkgICAgICAgaW50IGRlcHRoX21hc2ssIGludCBjb3VudCwgdTY0IHRvdGFsX3NhbXBsZXMsCi0JCSAgICAgICBpbnQgaGl0cykKKwkJICAgICAgIGludCBoaXRzLCBpbnQgbGVmdF9tYXJnaW4pCiB7CiAJaW50IGk7CiAJc2l6ZV90IHJldCA9IDA7CiAKLQlyZXQgKz0gZnByaW50ZihmcCwgIiVzIiwgIiAgICAgICAgICAgICAgICAiKTsKKwlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CiAJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKIAkJaWYgKGRlcHRoX21hc2sgJiAoMSA8PCBpKSkKIAkJCXJldCArPSBmcHJpbnRmKGZwLCAifCIpOwpAQCAtMTIyLDggKzEzOCw5IEBACiB9CiAKIHN0YXRpYyBzaXplX3QKLWNhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAotCQkJdTY0IHRvdGFsX3NhbXBsZXMsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2spCitfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAorCQkJICAgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2ssCisJCQkgICBpbnQgbGVmdF9tYXJnaW4pCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQ7CkBAIC0xNjQsNyArMTgxLDggQEAKIAkJICogQnV0IHdlIGtlZXAgdGhlIG9sZGVyIGRlcHRoIG1hc2sgZm9yIHRoZSBsaW5lIHNlcGVyYXRvcgogCQkgKiB0byBrZWVwIHRoZSBsZXZlbCBsaW5rIHVudGlsIHdlIHJlYWNoIHRoZSBsYXN0IGNoaWxkCiAJCSAqLwotCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaF9saW5lKGZwLCBkZXB0aCwgZGVwdGhfbWFzayk7CisJCXJldCArPSBpcGNoYWluX19mcHJpbnRmX2dyYXBoX2xpbmUoZnAsIGRlcHRoLCBkZXB0aF9tYXNrLAorCQkJCQkJICAgbGVmdF9tYXJnaW4pOwogCQlpID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJmNoaWxkLT52YWwsIGxpc3QpIHsKIAkJCWlmIChjaGFpbi0+aXAgPj0gUEVSRl9DT05URVhUX01BWCkKQEAgLTE3MiwxMSArMTkwLDEzIEBACiAJCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hhaW4sIGRlcHRoLAogCQkJCQkJICAgICAgbmV3X2RlcHRoX21hc2ssIGkrKywKIAkJCQkJCSAgICAgIG5ld190b3RhbCwKLQkJCQkJCSAgICAgIGN1bXVsKTsKKwkJCQkJCSAgICAgIGN1bXVsLAorCQkJCQkJICAgICAgbGVmdF9tYXJnaW4pOwogCQl9Ci0JCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoaWxkLCBuZXdfdG90YWwsCi0JCQkJCQlkZXB0aCArIDEsCi0JCQkJCQluZXdfZGVwdGhfbWFzayB8ICgxIDw8IGRlcHRoKSk7CisJCXJldCArPSBfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hpbGQsIG5ld190b3RhbCwKKwkJCQkJCSAgZGVwdGggKyAxLAorCQkJCQkJICBuZXdfZGVwdGhfbWFzayB8ICgxIDw8IGRlcHRoKSwKKwkJCQkJCSAgbGVmdF9tYXJnaW4pOwogCQlub2RlID0gbmV4dDsKIAl9CiAKQEAgLTE5MCwxMiArMjEwLDUxIEBACiAKIAkJcmV0ICs9IGlwY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsICZyZW1faGl0cywgZGVwdGgsCiAJCQkJCSAgICAgIG5ld19kZXB0aF9tYXNrLCAwLCBuZXdfdG90YWwsCi0JCQkJCSAgICAgIHJlbWFpbmluZyk7CisJCQkJCSAgICAgIHJlbWFpbmluZywgbGVmdF9tYXJnaW4pOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKKworc3RhdGljIHNpemVfdAorY2FsbGNoYWluX19mcHJpbnRmX2dyYXBoKEZJTEUgKmZwLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnNlbGYsCisJCQkgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBsZWZ0X21hcmdpbikKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCWJvb2wgcHJpbnRlZCA9IGZhbHNlOworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZzZWxmLT52YWwsIGxpc3QpIHsKKwkJaWYgKGNoYWluLT5pcCA+PSBQRVJGX0NPTlRFWFRfTUFYKQorCQkJY29udGludWU7CisKKwkJaWYgKCFpKysgJiYgc29ydF9fZmlyc3RfZGltZW5zaW9uID09IFNPUlRfU1lNKQorCQkJY29udGludWU7CisKKwkJaWYgKCFwcmludGVkKSB7CisJCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CisJCQlyZXQgKz0gZnByaW50ZihmcCwgInxcbiIpOworCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOworCQkJcmV0ICs9IGZwcmludGYoZnAsICItLS0iKTsKKworCQkJbGVmdF9tYXJnaW4gKz0gMzsKKwkJCXByaW50ZWQgPSB0cnVlOworCQl9IGVsc2UKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKKworCQlpZiAoY2hhaW4tPnN5bSkKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiICVzXG4iLCBjaGFpbi0+c3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXBcbiIsICh2b2lkICopKGxvbmcpY2hhaW4tPmlwKTsKKwl9CisKKwlyZXQgKz0gX19jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIHNlbGYsIHRvdGFsX3NhbXBsZXMsIDEsIDEsIGxlZnRfbWFyZ2luKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzaXplX3QKIGNhbGxjaGFpbl9fZnByaW50Zl9mbGF0KEZJTEUgKmZwLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnNlbGYsCiAJCQl1NjQgdG90YWxfc2FtcGxlcykKQEAgLTIyNCw3ICsyODMsNyBAQAogCiBzdGF0aWMgc2l6ZV90CiBoaXN0X2VudHJ5X2NhbGxjaGFpbl9fZnByaW50ZihGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCi0JCQkgICAgICB1NjQgdG90YWxfc2FtcGxlcykKKwkJCSAgICAgIHU2NCB0b3RhbF9zYW1wbGVzLCBpbnQgbGVmdF9tYXJnaW4pCiB7CiAJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CiAJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGFpbjsKQEAgLTI0NCw4ICszMDMsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgQ0hBSU5fR1JBUEhfQUJTOiAvKiBGYWxsZG93biAqLwogCQljYXNlIENIQUlOX0dSQVBIX1JFTDoKLQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoYWluLAotCQkJCQkJCXRvdGFsX3NhbXBsZXMsIDEsIDEpOworCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hhaW4sIHRvdGFsX3NhbXBsZXMsCisJCQkJCQkJbGVmdF9tYXJnaW4pOwogCQljYXNlIENIQUlOX05PTkU6CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTI5MCw4ICszNDksMTkgQEAKIAogCXJldCArPSBmcHJpbnRmKGZwLCAiXG4iKTsKIAotCWlmIChjYWxsY2hhaW4pCi0JCWhpc3RfZW50cnlfY2FsbGNoYWluX19mcHJpbnRmKGZwLCBzZWxmLCB0b3RhbF9zYW1wbGVzKTsKKwlpZiAoY2FsbGNoYWluKSB7CisJCWludCBsZWZ0X21hcmdpbiA9IDA7CisKKwkJaWYgKHNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9PSBTT1JUX0NPTU0pIHsKKwkJCXNlID0gbGlzdF9maXJzdF9lbnRyeSgmaGlzdF9lbnRyeV9fc29ydF9saXN0LCB0eXBlb2YoKnNlKSwKKwkJCQkJCWxpc3QpOworCQkJbGVmdF9tYXJnaW4gPSBzZS0+d2lkdGggPyAqc2UtPndpZHRoIDogMDsKKwkJCWxlZnRfbWFyZ2luIC09IHRocmVhZF9fY29tbV9sZW4oc2VsZi0+dGhyZWFkKTsKKwkJfQorCisJCWhpc3RfZW50cnlfY2FsbGNoYWluX19mcHJpbnRmKGZwLCBzZWxmLCB0b3RhbF9zYW1wbGVzLAorCQkJCQkgICAgICBsZWZ0X21hcmdpbik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM4NSw3ICs0NTUsNyBAQAogCWR1bXBfcHJpbnRmKCIgLi4uLi4uIG1hcDogJUx4IC0+ICVMeFxuIiwgKmlwcCwgaXApOwogCSppcHAgID0gaXA7CiAKLQlyZXR1cm4gbWFwID8gbWFwLT5kc28tPmZpbmRfc3ltYm9sKG1hcC0+ZHNvLCBpcCkgOiBOVUxMOworCXJldHVybiBtYXAgPyBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgaXAsIE5VTEwpIDogTlVMTDsKIH0KIAogc3RhdGljIGludCBjYWxsX19tYXRjaChzdHJ1Y3Qgc3ltYm9sICpzeW0pCkBAIC02MTksNyArNjg5LDggQEAKIAkJZHVtcF9wcmludGYoIi4uLiBjaGFpbjogbnI6JUx1XG4iLCBjaGFpbi0+bnIpOwogCiAJCWlmICh2YWxpZGF0ZV9jaGFpbihjaGFpbiwgZXZlbnQpIDwgMCkgewotCQkJZXByaW50ZigiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsIHNraXBwaW5nIGl0LlxuIik7CisJCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKKwkJCQkgInNraXBwaW5nIGl0LlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC02MzAsNyArNzAxLDcgQEAKIAl9CiAKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKLQkJZXByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCisJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NjgsNyArNzM5LDcgQEAKIAogCWlmIChoaXN0X2VudHJ5X19hZGQodGhyZWFkLCBtYXAsIHN5bSwgaXAsCiAJCQkgICAgY2hhaW4sIGxldmVsLCBwZXJpb2QpKSB7Ci0JCWVwcmludGYoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgc2tpcHBpbmcgZXZlbnRcbiIpOworCQlwcl9kZWJ1ZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwMjIsNyArMTA5Myw3IEBACiAKIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlzeW1ib2xfX2luaXQoKTsKKwlzeW1ib2xfX2luaXQoMCk7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCByZXBvcnRfdXNhZ2UsIDApOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDU3YWQzZjQuLmRmNDRiNzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0zOCw4ICszOCw2IEBACiAjZGVmaW5lIFBSX1NFVF9OQU1FCQkxNSAgICAgICAgICAgICAgIC8qIFNldCBwcm9jZXNzIG5hbWUgKi8KICNkZWZpbmUgTUFYX0NQVVMJCTQwOTYKIAotI2RlZmluZSBCVUdfT04oeCkJCWFzc2VydCghKHgpKQotCiBzdGF0aWMgdTY0CQkJcnVuX21lYXN1cmVtZW50X292ZXJoZWFkOwogc3RhdGljIHU2NAkJCXNsZWVwX21lYXN1cmVtZW50X292ZXJoZWFkOwogCkBAIC0xNjY4LDggKzE2NjYsOCBAQAogCQkobG9uZyBsb25nKXBlcmlvZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKLQkJZXByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOworCQlwcl9kZWJ1ZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCisJCQkgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTkzOSw3ICsxOTM3LDcgQEAKIAogaW50IGNtZF9zY2hlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0Jc3ltYm9sX19pbml0KCk7CisJc3ltYm9sX19pbml0KDApOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgc2NoZWRfb3B0aW9ucywgc2NoZWRfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggM2RiMzFlNy4uYzcwZDcyMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC01MCwxNSArNTAsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgZGVmYXVsdF9hdHRyc1tdID0gewogCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFU30sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCX0sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCQl9LAogCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCX0sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVN9LAotICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQl9LAorICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTCQl9LAogCiB9OwogCkBAIC0xMjUsNiArMTI3LDcgQEAKIHN0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbnNlY3Nfc3RhdHM7CiBzdHJ1Y3Qgc3RhdHMJCQl3YWxsdGltZV9uc2Vjc19zdGF0czsKIHN0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfY3ljbGVzX3N0YXRzOworc3RydWN0IHN0YXRzCQkJcnVudGltZV9icmFuY2hlc19zdGF0czsKIAogI2RlZmluZSBNQVRDSF9FVkVOVCh0LCBjLCBjb3VudGVyKQkJCVwKIAkoYXR0cnNbY291bnRlcl0udHlwZSA9PSBQRVJGX1RZUEVfIyN0ICYmCVwKQEAgLTIzNSw2ICsyMzgsOCBAQAogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHMsIGNvdW50WzBdKTsKIAlpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMsIGNvdW50ZXIpKQogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzLCBjb3VudFswXSk7CisJaWYgKE1BVENIX0VWRU5UKEhBUkRXQVJFLCBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzLCBjb3VudFswXSk7CiB9CiAKIHN0YXRpYyBpbnQgcnVuX3BlcmZfc3RhdChpbnQgYXJnYyBfX3VzZWQsIGNvbnN0IGNoYXIgKiphcmd2KQpAQCAtMzUyLDcgKzM1NywxNiBAQAogCQkJcmF0aW8gPSBhdmcgLyB0b3RhbDsKIAogCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsIHJhdGlvKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0JSQU5DSF9NSVNTRVMsIGNvdW50ZXIpICYmCisJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzLm4gIT0gMCkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9icmFuY2hlc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSBhdmcgKiAxMDAgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiAlJSAgICAiLCByYXRpbyk7CisKKwl9IGVsc2UgaWYgKHJ1bnRpbWVfbnNlY3Nfc3RhdHMubiAhPSAwKSB7CiAJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzKTsKIAogCQlpZiAodG90YWwpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKaW5kZXggNzAyZDhmZS4uZGQ0ZDgyYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtMTUzLDYgKzE1MywxNyBAQAogCiBzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIgKmFsbF9zYW1wbGVzOwogCisKK3N0cnVjdCBwcm9jZXNzX2ZpbHRlcjsKK3N0cnVjdCBwcm9jZXNzX2ZpbHRlciB7CisJY2hhciAJCQkqbmFtZTsKKwlpbnQgIAkJCXBpZDsKKwlzdHJ1Y3QgcHJvY2Vzc19maWx0ZXIgCSpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBwcm9jZXNzX2ZpbHRlciAqcHJvY2Vzc19maWx0ZXI7CisKKwogc3RhdGljIHN0cnVjdCBwZXJfcGlkICpmaW5kX2NyZWF0ZV9waWQoaW50IHBpZCkKIHsKIAlzdHJ1Y3QgcGVyX3BpZCAqY3Vyc29yID0gYWxsX2RhdGE7CkBAIC03NjMsMjEgKzc3NCw0MiBAQAogCQkJCWMgPSBwLT5hbGw7CiAJCQkJd2hpbGUgKGMpIHsKIAkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgewotCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKKwkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VyICYmICFmcm9tKSB7CiAJCQkJCQkJZnJvbSA9IGMtPlk7Ci0JCQkJCQkJdGFza19mcm9tID0gYy0+Y29tbTsKKwkJCQkJCQl0YXNrX2Zyb20gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9Ci0JCQkJCQlpZiAocC0+cGlkID09IHdlLT53YWtlZSkgeworCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZWUgJiYgIXRvKSB7CiAJCQkJCQkJdG8gPSBjLT5ZOwotCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJYyA9IGMtPm5leHQ7CiAJCQkJfQorCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgJiYgIWZyb20pIHsKKwkJCQkJCWZyb20gPSBjLT5ZOworCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgeworCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQljID0gYy0+bmV4dDsKKwkJCQl9CiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJfQogCisJCWlmICghdGFza19mcm9tKSB7CisJCQl0YXNrX2Zyb20gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX2Zyb20sICJbJWldIiwgd2UtPndha2VyKTsKKwkJfQorCQlpZiAoIXRhc2tfdG8pIHsKKwkJCXRhc2tfdG8gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX3RvLCAiWyVpXSIsIHdlLT53YWtlZSk7CisJCX0KKwogCQlpZiAod2UtPndha2VyID09IC0xKQogCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOwogCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCkBAIC03ODUsNiArODE3LDkgQEAKIAkJZWxzZQogCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOwogCQl3ZSA9IHdlLT5uZXh0OworCisJCWZyZWUodGFza19mcm9tKTsKKwkJZnJlZSh0YXNrX3RvKTsKIAl9CiB9CiAKQEAgLTg1OCwxMiArODkzLDg5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhZGRfcHJvY2Vzc19maWx0ZXIoY29uc3QgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCBwcm9jZXNzX2ZpbHRlciAqZmlsdDsKKwlpbnQgcGlkOworCisJcGlkID0gc3RydG91bGwoc3RyaW5nLCBOVUxMLCAxMCk7CisJZmlsdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHByb2Nlc3NfZmlsdGVyKSk7CisJaWYgKCFmaWx0KQorCQlyZXR1cm47CisKKwlmaWx0LT5uYW1lID0gc3RyZHVwKHN0cmluZyk7CisJZmlsdC0+cGlkICA9IHBpZDsKKwlmaWx0LT5uZXh0ID0gcHJvY2Vzc19maWx0ZXI7CisKKwlwcm9jZXNzX2ZpbHRlciA9IGZpbHQ7Cit9CisKK3N0YXRpYyBpbnQgcGFzc2VzX2ZpbHRlcihzdHJ1Y3QgcGVyX3BpZCAqcCwgc3RydWN0IHBlcl9waWRjb21tICpjKQoreworCXN0cnVjdCBwcm9jZXNzX2ZpbHRlciAqZmlsdDsKKwlpZiAoIXByb2Nlc3NfZmlsdGVyKQorCQlyZXR1cm4gMTsKKworCWZpbHQgPSBwcm9jZXNzX2ZpbHRlcjsKKwl3aGlsZSAoZmlsdCkgeworCQlpZiAoZmlsdC0+cGlkICYmIHAtPnBpZCA9PSBmaWx0LT5waWQpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHN0cmNtcChmaWx0LT5uYW1lLCBjLT5jb21tKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJCWZpbHQgPSBmaWx0LT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXRlcm1pbmVfZGlzcGxheV90YXNrc19maWx0ZXJlZCh2b2lkKQoreworCXN0cnVjdCBwZXJfcGlkICpwOworCXN0cnVjdCBwZXJfcGlkY29tbSAqYzsKKwlpbnQgY291bnQgPSAwOworCisJcCA9IGFsbF9kYXRhOworCXdoaWxlIChwKSB7CisJCXAtPmRpc3BsYXkgPSAwOworCQlpZiAocC0+c3RhcnRfdGltZSA9PSAxKQorCQkJcC0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisKKwkJLyogbm8gZXhpdCBtYXJrZXIsIHRhc2sga2VwdCBydW5uaW5nIHRvIHRoZSBlbmQgKi8KKwkJaWYgKHAtPmVuZF90aW1lID09IDApCisJCQlwLT5lbmRfdGltZSA9IGxhc3RfdGltZTsKKworCQljID0gcC0+YWxsOworCisJCXdoaWxlIChjKSB7CisJCQljLT5kaXNwbGF5ID0gMDsKKworCQkJaWYgKGMtPnN0YXJ0X3RpbWUgPT0gMSkKKwkJCQljLT5zdGFydF90aW1lID0gZmlyc3RfdGltZTsKKworCQkJaWYgKHBhc3Nlc19maWx0ZXIocCwgYykpIHsKKwkJCQljLT5kaXNwbGF5ID0gMTsKKwkJCQlwLT5kaXNwbGF5ID0gMTsKKwkJCQljb3VudCsrOworCQkJfQorCisJCQlpZiAoYy0+ZW5kX3RpbWUgPT0gMCkKKwkJCQljLT5lbmRfdGltZSA9IGxhc3RfdGltZTsKKworCQkJYyA9IGMtPm5leHQ7CisJCX0KKwkJcCA9IHAtPm5leHQ7CisJfQorCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGludCBkZXRlcm1pbmVfZGlzcGxheV90YXNrcyh1NjQgdGhyZXNob2xkKQogewogCXN0cnVjdCBwZXJfcGlkICpwOwogCXN0cnVjdCBwZXJfcGlkY29tbSAqYzsKIAlpbnQgY291bnQgPSAwOwogCisJaWYgKHByb2Nlc3NfZmlsdGVyKQorCQlyZXR1cm4gZGV0ZXJtaW5lX2Rpc3BsYXlfdGFza3NfZmlsdGVyZWQoKTsKKwogCXAgPSBhbGxfZGF0YTsKIAl3aGlsZSAocCkgewogCQlwLT5kaXNwbGF5ID0gMDsKQEAgLTk4MSw3ICsxMDkzLDcgQEAKIAogc3RhdGljIGludCBfX2NtZF90aW1lY2hhcnQodm9pZCkKIHsKLQlpbnQgcmV0LCByYyA9IEVYSVRfRkFJTFVSRTsKKwlpbnQgZXJyLCByYyA9IEVYSVRfRkFJTFVSRTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBoZWFkLCBzaGlmdDsKIAlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwpAQCAtOTk5LDggKzExMTEsOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKLQlyZXQgPSBmc3RhdChpbnB1dCwgJnN0YXRidWYpOwotCWlmIChyZXQgPCAwKSB7CisJZXJyID0gZnN0YXQoaW5wdXQsICZzdGF0YnVmKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwZXJyb3IoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKIAkJZXhpdCgtMSk7CiAJfQpAQCAtMTAxMCw3ICsxMTIyLDE2IEBACiAJCWV4aXQoMCk7CiAJfQogCi0JaGVhZGVyID0gcGVyZl9oZWFkZXJfX3JlYWQoaW5wdXQpOworCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKKwlpZiAoaGVhZGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gcGVyZl9oZWFkZXJfX3JlYWQoaGVhZGVyLCBpbnB1dCk7CisJaWYgKGVyciA8IDApIHsKKwkJcGVyZl9oZWFkZXJfX2RlbGV0ZShoZWFkZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OwogCiAJc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKQEAgLTEwNTAsMTIgKzExNzEsMTAgQEAKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCiAJaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQpIDwgMCkgewotCi0JCXByaW50ZigiJXAgWyVwXTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCi0JCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOwotCisJCXByX3dhcm5pbmcoIiVwIFslcF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQkJICAgKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCisJCQkgICAodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJLyoKIAkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKIAkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCkBAIC0xMDg4LDcgKzEyMDcsOCBAQAogCiAJd3JpdGVfc3ZnX2ZpbGUob3V0cHV0X25hbWUpOwogCi0JcHJpbnRmKCJXcml0dGVuICUyLjFmIHNlY29uZHMgb2YgdHJhY2UgdG8gJXMuXG4iLCAobGFzdF90aW1lIC0gZmlyc3RfdGltZSkgLyAxMDAwMDAwMDAwLjAsIG91dHB1dF9uYW1lKTsKKwlwcl9pbmZvKCJXcml0dGVuICUyLjFmIHNlY29uZHMgb2YgdHJhY2UgdG8gJXMuXG4iLAorCQkobGFzdF90aW1lIC0gZmlyc3RfdGltZSkgLyAxMDAwMDAwMDAwLjAsIG91dHB1dF9uYW1lKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTExMjksNiArMTI0OSwxNCBAQAogCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKIH0KIAorc3RhdGljIGludAorcGFyc2VfcHJvY2Vzcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICphcmcsIGludCBfX3VzZWQgdW5zZXQpCit7CisJaWYgKGFyZykKKwkJYWRkX3Byb2Nlc3NfZmlsdGVyKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKIAkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKQEAgLTExMzYsMTUgKzEyNjQsMTggQEAKIAkJICAgICJvdXRwdXQgZmlsZSBuYW1lIiksCiAJT1BUX0lOVEVHRVIoJ3cnLCAid2lkdGgiLCAmc3ZnX3BhZ2Vfd2lkdGgsCiAJCSAgICAicGFnZSB3aWR0aCIpLAotCU9QVF9CT09MRUFOKCdwJywgInBvd2VyLW9ubHkiLCAmcG93ZXJfb25seSwKKwlPUFRfQk9PTEVBTignUCcsICJwb3dlci1vbmx5IiwgJnBvd2VyX29ubHksCiAJCSAgICAib3V0cHV0IHBvd2VyIGRhdGEgb25seSIpLAorCU9QVF9DQUxMQkFDSygncCcsICJwcm9jZXNzIiwgTlVMTCwgInByb2Nlc3MiLAorCQkgICAgICAicHJvY2VzcyBzZWxlY3Rvci4gUGFzcyBhIHBpZCBvciBwcm9jZXNzIG5hbWUuIiwKKwkJICAgICAgIHBhcnNlX3Byb2Nlc3MpLAogCU9QVF9FTkQoKQogfTsKIAogCiBpbnQgY21kX3RpbWVjaGFydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0Jc3ltYm9sX19pbml0KCk7CisJc3ltYm9sX19pbml0KDApOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDJkODgwNmIuLjZkNzcwYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbnQJCQlkZWZhdWx0X2ludGVydmFsCQk9ICAgICAgMDsKIAogc3RhdGljIGludAkJCWNvdW50X2ZpbHRlcgkJCT0gICAgICA1Owotc3RhdGljIGludAkJCXByaW50X2VudHJpZXMJCQk9ICAgICAxNTsKK3N0YXRpYyBpbnQJCQlwcmludF9lbnRyaWVzOwogCiBzdGF0aWMgaW50CQkJdGFyZ2V0X3BpZAkJCT0gICAgIC0xOwogc3RhdGljIGludAkJCWluaGVyaXQJCQkJPSAgICAgIDA7CkBAIC03Niw2ICs3NiwxNyBAQAogc3RhdGljIGludAkJCXplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgICAgIDA7CiBzdGF0aWMgaW50CQkJZHVtcF9zeW10YWIgICAgICAgICAgICAgICAgICAgICA9ICAgICAgMDsKIAorc3RhdGljIGJvb2wJCQloaWRlX2tlcm5lbF9zeW1ib2xzCQk9ICBmYWxzZTsKK3N0YXRpYyBib29sCQkJaGlkZV91c2VyX3N5bWJvbHMJCT0gIGZhbHNlOworc3RhdGljIHN0cnVjdCB3aW5zaXplCQl3aW5zaXplOworc3RhdGljIGNvbnN0IGNoYXIJCSpncmFwaF9saW5lCQkJPQorCSJfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCisJIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyI7CitzdGF0aWMgY29uc3QgY2hhcgkJKmdyYXBoX2RvdHRlZF9saW5lCQkJPQorCSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKKwogLyoKICAqIFNvdXJjZQogICovCkBAIC05NywyNyArMTA4LDc1IEBACiAgKiBTeW1ib2xzCiAgKi8KIAotc3RydWN0IHN5bV9lbnRyeSB7Ci0Jc3RydWN0IHJiX25vZGUJCXJiX25vZGU7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXVuc2lnbmVkIGxvbmcJCWNvdW50W01BWF9DT1VOVEVSU107Ci0JdW5zaWduZWQgbG9uZwkJc25hcF9jb3VudDsKLQlkb3VibGUJCQl3ZWlnaHQ7Ci0JaW50CQkJc2tpcDsKLQlzdHJ1Y3QgbWFwCQkqbWFwOworc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UgewogCXN0cnVjdCBzb3VyY2VfbGluZQkqc291cmNlOwogCXN0cnVjdCBzb3VyY2VfbGluZQkqbGluZXM7CiAJc3RydWN0IHNvdXJjZV9saW5lCSoqbGluZXNfdGFpbDsKLQlwdGhyZWFkX211dGV4X3QJCXNvdXJjZV9sb2NrOworCXB0aHJlYWRfbXV0ZXhfdAkJbG9jazsKK307CisKK3N0cnVjdCBzeW1fZW50cnkgeworCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwl1bnNpZ25lZCBsb25nCQlzbmFwX2NvdW50OworCWRvdWJsZQkJCXdlaWdodDsKKwlpbnQJCQlza2lwOworCXUxNgkJCW5hbWVfbGVuOworCXU4CQkJb3JpZ2luOworCXN0cnVjdCBtYXAJCSptYXA7CisJc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UJKnNyYzsKKwl1bnNpZ25lZCBsb25nCQljb3VudFswXTsKIH07CiAKIC8qCiAgKiBTb3VyY2UgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltYm9sICpzeW1fZW50cnlfX3N5bWJvbChzdHJ1Y3Qgc3ltX2VudHJ5ICpzZWxmKQoreworICAgICAgIHJldHVybiAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9fcHJpdl9zaXplOworfQorCitzdGF0aWMgdm9pZCBnZXRfdGVybV9kaW1lbnNpb25zKHN0cnVjdCB3aW5zaXplICp3cykKK3sKKwljaGFyICpzID0gZ2V0ZW52KCJMSU5FUyIpOworCisJaWYgKHMgIT0gTlVMTCkgeworCQl3cy0+d3Nfcm93ID0gYXRvaShzKTsKKwkJcyA9IGdldGVudigiQ09MVU1OUyIpOworCQlpZiAocyAhPSBOVUxMKSB7CisJCQl3cy0+d3NfY29sID0gYXRvaShzKTsKKwkJCWlmICh3cy0+d3Nfcm93ICYmIHdzLT53c19jb2wpCisJCQkJcmV0dXJuOworCQl9CisJfQorI2lmZGVmIFRJT0NHV0lOU1oKKwlpZiAoaW9jdGwoMSwgVElPQ0dXSU5TWiwgd3MpID09IDAgJiYKKwkgICAgd3MtPndzX3JvdyAmJiB3cy0+d3NfY29sKQorCQlyZXR1cm47CisjZW5kaWYKKwl3cy0+d3Nfcm93ID0gMjU7CisJd3MtPndzX2NvbCA9IDgwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJpbnRfZW50cmllcyhzdHJ1Y3Qgd2luc2l6ZSAqd3MpCit7CisJcHJpbnRfZW50cmllcyA9IHdzLT53c19yb3c7CisKKwlpZiAocHJpbnRfZW50cmllcyA+IDkpCisJCXByaW50X2VudHJpZXMgLT0gOTsKK30KKworc3RhdGljIHZvaWQgc2lnX3dpbmNoX2hhbmRsZXIoaW50IHNpZyBfX3VzZWQpCit7CisJZ2V0X3Rlcm1fZGltZW5zaW9ucygmd2luc2l6ZSk7CisJdXBkYXRlX3ByaW50X2VudHJpZXMoJndpbnNpemUpOworfQorCiBzdGF0aWMgdm9pZCBwYXJzZV9zb3VyY2Uoc3RydWN0IHN5bV9lbnRyeSAqc3ltZSkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UgKnNvdXJjZTsKIAlzdHJ1Y3QgbWFwICptYXA7CiAJRklMRSAqZmlsZTsKIAljaGFyIGNvbW1hbmRbUEFUSF9NQVgqMl07CkBAIC0xMjcsMTIgKzE4NiwyMSBAQAogCWlmICghc3ltZSkKIAkJcmV0dXJuOwogCi0JaWYgKHN5bWUtPmxpbmVzKSB7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCWlmIChzeW1lLT5zcmMgPT0gTlVMTCkgeworCQlzeW1lLT5zcmMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzb3VyY2UpKTsKKwkJaWYgKHN5bWUtPnNyYyA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlwdGhyZWFkX211dGV4X2luaXQoJnN5bWUtPnNyYy0+bG9jaywgTlVMTCk7CisJfQorCisJc291cmNlID0gc3ltZS0+c3JjOworCisJaWYgKHNvdXJjZS0+bGluZXMpIHsKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZzb3VyY2UtPmxvY2spOwogCQlnb3RvIG91dF9hc3NpZ247CiAJfQogCi0Jc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCXN5bSA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCW1hcCA9IHN5bWUtPm1hcDsKIAlwYXRoID0gbWFwLT5kc28tPmxvbmdfbmFtZTsKIApAQCAtMTQxLDE0ICsyMDksMTUgQEAKIAlzcHJpbnRmKGNvbW1hbmQsCiAJCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAiCiAJCQkgIi0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAlcyIsCi0JCXN5bS0+c3RhcnQsIHN5bS0+ZW5kLCBwYXRoKTsKKwkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAorCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIAogCWZpbGUgPSBwb3Blbihjb21tYW5kLCAiciIpOwogCWlmICghZmlsZSkKIAkJcmV0dXJuOwogCi0JcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7Ci0Jc3ltZS0+bGluZXNfdGFpbCA9ICZzeW1lLT5saW5lczsKKwlwdGhyZWFkX211dGV4X2xvY2soJnNvdXJjZS0+bG9jayk7CisJc291cmNlLT5saW5lc190YWlsID0gJnNvdXJjZS0+bGluZXM7CiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCXN0cnVjdCBzb3VyY2VfbGluZSAqc3JjOwogCQlzaXplX3QgZHVtbXkgPSAwOwpAQCAtMTY4LDIyICsyMzcsMjIgQEAKIAkJCSpjID0gMDsKIAogCQlzcmMtPm5leHQgPSBOVUxMOwotCQkqc3ltZS0+bGluZXNfdGFpbCA9IHNyYzsKLQkJc3ltZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CisJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CisJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKIAkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewogCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwICs9IG1hcC0+c3RhcnQ7CisJCQlzcmMtPmVpcCA9IG1hcC0+dW5tYXBfaXAobWFwLCBzcmMtPmVpcCk7CiAJCX0KIAkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzE2XSA9PSAnOicpIHsKIAkJCXNyYy0+ZWlwID0gc3RydG91bGwoc3JjLT5saW5lLCBOVUxMLCAxNik7Ci0JCQlzcmMtPmVpcCArPSBtYXAtPnN0YXJ0OworCQkJc3JjLT5laXAgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3JjLT5laXApOwogCQl9CiAJfQogCXBjbG9zZShmaWxlKTsKIG91dF9hc3NpZ246CiAJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bWU7Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc291cmNlLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgX196ZXJvX3NvdXJjZV9jb3VudGVycyhzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQpAQCAtMTkxLDcgKzI2MCw3IEBACiAJaW50IGk7CiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwogCi0JbGluZSA9IHN5bWUtPmxpbmVzOworCWxpbmUgPSBzeW1lLT5zcmMtPmxpbmVzOwogCXdoaWxlIChsaW5lKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9jb3VudGVyczsgaSsrKQogCQkJbGluZS0+Y291bnRbaV0gPSAwOwpAQCAtMjA2LDEzICsyNzUsMTMgQEAKIAlpZiAoc3ltZSAhPSBzeW1fZmlsdGVyX2VudHJ5KQogCQlyZXR1cm47CiAKLQlpZiAocHRocmVhZF9tdXRleF90cnlsb2NrKCZzeW1lLT5zb3VyY2VfbG9jaykpCisJaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmc3ltZS0+c3JjLT5sb2NrKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFzeW1lLT5zb3VyY2UpCisJaWYgKHN5bWUtPnNyYyA9PSBOVUxMIHx8IHN5bWUtPnNyYy0+c291cmNlID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWZvciAobGluZSA9IHN5bWUtPmxpbmVzOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dCkgeworCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CiAJCWlmIChsaW5lLT5laXAgPT0gaXApIHsKIAkJCWxpbmUtPmNvdW50W2NvdW50ZXJdKys7CiAJCQlicmVhazsKQEAgLTIyMSwyNSArMjkwLDI1IEBACiAJCQlicmVhazsKIAl9CiBvdXRfdW5sb2NrOgotCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNyYy0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvb2t1cF9zeW1fc291cmNlKHN0cnVjdCBzeW1fZW50cnkgKnN5bWUpCiB7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltYm9sID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKIAljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOwogCiAJc3ByaW50ZihwYXR0ZXJuLCAiPCVzPjoiLCBzeW1ib2wtPm5hbWUpOwogCi0JcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7Ci0JZm9yIChsaW5lID0gc3ltZS0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zcmMtPmxvY2spOworCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CiAJCWlmIChzdHJzdHIobGluZS0+bGluZSwgcGF0dGVybikpIHsKLQkJCXN5bWUtPnNvdXJjZSA9IGxpbmU7CisJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQogCX0KLQlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2xpbmVzKHN0cnVjdCBzb3VyY2VfbGluZSAqcXVldWUsIGludCBjb3VudCwgaW50IHRvdGFsKQpAQCAtMjY5LDI0ICszMzgsMjQgQEAKIAlpZiAoIXN5bWUpCiAJCXJldHVybjsKIAotCWlmICghc3ltZS0+c291cmNlKQorCWlmICghc3ltZS0+c3JjLT5zb3VyY2UpCiAJCWxvb2t1cF9zeW1fc291cmNlKHN5bWUpOwogCi0JaWYgKCFzeW1lLT5zb3VyY2UpCisJaWYgKCFzeW1lLT5zcmMtPnNvdXJjZSkKIAkJcmV0dXJuOwogCi0Jc3ltYm9sID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCXN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXByaW50ZigiU2hvd2luZyAlcyBmb3IgJXNcbiIsIGV2ZW50X25hbWUoc3ltX2NvdW50ZXIpLCBzeW1ib2wtPm5hbWUpOwogCXByaW50ZigiICBFdmVudHMgIFBjbnQgKD49JWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7CiAKLQlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKLQlsaW5lID0gc3ltZS0+c291cmNlOworCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKKwlsaW5lID0gc3ltZS0+c3JjLT5zb3VyY2U7CiAJd2hpbGUgKGxpbmUpIHsKIAkJdG90YWwgKz0gbGluZS0+Y291bnRbc3ltX2NvdW50ZXJdOwogCQlsaW5lID0gbGluZS0+bmV4dDsKIAl9CiAKLQlsaW5lID0gc3ltZS0+c291cmNlOworCWxpbmUgPSBzeW1lLT5zcmMtPnNvdXJjZTsKIAl3aGlsZSAobGluZSkgewogCQlmbG9hdCBwY250ID0gMC4wOwogCkBAIC0zMTEsMTMgKzM4MCwxMyBAQAogCQlsaW5lLT5jb3VudFtzeW1fY291bnRlcl0gPSB6ZXJvID8gMCA6IGxpbmUtPmNvdW50W3N5bV9jb3VudGVyXSAqIDcgLyA4OwogCQlsaW5lID0gbGluZS0+bmV4dDsKIAl9Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAlpZiAobW9yZSkKIAkJcHJpbnRmKCIlZCBsaW5lcyBub3QgZGlzcGxheWVkLCBtYXliZSBpbmNyZWFzZSBkaXNwbGF5IGVudHJpZXMgW2VdXG4iLCBtb3JlKTsKIH0KIAogLyoKLSAqIFN5bWJvbHMgd2lsbCBiZSBhZGRlZCBoZXJlIGluIHJlY29yZF9pcCBhbmQgd2lsbCBnZXQgb3V0CisgKiBTeW1ib2xzIHdpbGwgYmUgYWRkZWQgaGVyZSBpbiBldmVudF9fcHJvY2Vzc19zYW1wbGUgYW5kIHdpbGwgZ2V0IG91dAogICogYWZ0ZXIgZGVjYXllZC4KICAqLwogc3RhdGljIExJU1RfSEVBRChhY3RpdmVfc3ltYm9scyk7CkBAIC0zODgsNiArNDU3LDkgQEAKIAlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lLCAqbjsKIAlzdHJ1Y3QgcmJfcm9vdCB0bXAgPSBSQl9ST09UOwogCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgc3ltX3dpZHRoID0gMCwgZHNvX3dpZHRoID0gMDsKKwljb25zdCBpbnQgd2luX3dpZHRoID0gd2luc2l6ZS53c19jb2wgLSAxOworCXN0cnVjdCBkc28gKnVuaXF1ZV9kc28gPSBOVUxMLCAqZmlyc3RfZHNvID0gTlVMTDsKIAogCXNhbXBsZXMgPSB1c2Vyc3BhY2Vfc2FtcGxlcyA9IDA7CiAKQEAgLTM5OSw2ICs0NzEsMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShzeW1lLCBuLCAmYWN0aXZlX3N5bWJvbHMsIG5vZGUpIHsKIAkJc3ltZS0+c25hcF9jb3VudCA9IHN5bWUtPmNvdW50W3NuYXBdOwogCQlpZiAoc3ltZS0+c25hcF9jb3VudCAhPSAwKSB7CisKKwkJCWlmICgoaGlkZV91c2VyX3N5bWJvbHMgJiYKKwkJCSAgICAgc3ltZS0+b3JpZ2luID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikgfHwKKwkJCSAgICAoaGlkZV9rZXJuZWxfc3ltYm9scyAmJgorCQkJICAgICBzeW1lLT5vcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpKSB7CisJCQkJbGlzdF9yZW1vdmVfYWN0aXZlX3N5bShzeW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCXN5bWUtPndlaWdodCA9IHN5bV93ZWlnaHQoc3ltZSk7CiAJCQlyYl9pbnNlcnRfYWN0aXZlX3N5bSgmdG1wLCBzeW1lKTsKIAkJCXN1bV9rc2FtcGxlcyArPSBzeW1lLT5zbmFwX2NvdW50OwpAQCAtNDExLDggKzQ5MSw3IEBACiAKIAlwdXRzKENPTlNPTEVfQ0xFQVIpOwogCi0JcHJpbnRmKAotIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRmKCIlLSouKnNcbiIsIHdpbl93aWR0aCwgd2luX3dpZHRoLCBncmFwaF9kb3R0ZWRfbGluZSk7CiAJcHJpbnRmKCAiICAgUGVyZlRvcDolOC4wZiBpcnFzL3NlYyAga2VybmVsOiU0LjFmJSUgWyIsCiAJCXNhbXBsZXNfcGVyX3NlYywKIAkJMTAwLjAgLSAoMTAwLjAqKChzYW1wbGVzX3Blcl9zZWMta3NhbXBsZXNfcGVyX3NlYykvc2FtcGxlc19wZXJfc2VjKSkpOwpAQCAtNDUwLDMzICs1MjksNzAgQEAKIAkJCXByaW50ZigiLCAlZCBDUFVzKVxuIiwgbnJfY3B1cyk7CiAJfQogCi0JcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CisJcHJpbnRmKCIlLSouKnNcbiIsIHdpbl93aWR0aCwgd2luX3dpZHRoLCBncmFwaF9kb3R0ZWRfbGluZSk7CiAKIAlpZiAoc3ltX2ZpbHRlcl9lbnRyeSkgewogCQlzaG93X2RldGFpbHMoc3ltX2ZpbHRlcl9lbnRyeSk7CiAJCXJldHVybjsKIAl9CiAKKwkvKgorCSAqIEZpbmQgdGhlIGxvbmdlc3Qgc3ltYm9sIG5hbWUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZAorCSAqLworCWZvciAobmQgPSByYl9maXJzdCgmdG1wKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3ltZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3Qgc3ltX2VudHJ5LCByYl9ub2RlKTsKKwkJaWYgKCsrcHJpbnRlZCA+IHByaW50X2VudHJpZXMgfHwKKwkJICAgIChpbnQpc3ltZS0+c25hcF9jb3VudCA8IGNvdW50X2ZpbHRlcikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdF9kc28gPT0gTlVMTCkKKwkJCXVuaXF1ZV9kc28gPSBmaXJzdF9kc28gPSBzeW1lLT5tYXAtPmRzbzsKKwkJZWxzZSBpZiAoc3ltZS0+bWFwLT5kc28gIT0gZmlyc3RfZHNvKQorCQkJdW5pcXVlX2RzbyA9IE5VTEw7CisKKwkJaWYgKHN5bWUtPm1hcC0+ZHNvLT5sb25nX25hbWVfbGVuID4gZHNvX3dpZHRoKQorCQkJZHNvX3dpZHRoID0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW47CisKKwkJaWYgKHN5bWUtPm5hbWVfbGVuID4gc3ltX3dpZHRoKQorCQkJc3ltX3dpZHRoID0gc3ltZS0+bmFtZV9sZW47CisJfQorCisJcHJpbnRlZCA9IDA7CisKKwlpZiAodW5pcXVlX2RzbykKKwkJcHJpbnRmKCJEU086ICVzXG4iLCB1bmlxdWVfZHNvLT5sb25nX25hbWUpOworCWVsc2UgeworCQlpbnQgbWF4X2Rzb193aWR0aCA9IHdpbnNpemUud3NfY29sIC0gc3ltX3dpZHRoIC0gMjk7CisJCWlmIChkc29fd2lkdGggPiBtYXhfZHNvX3dpZHRoKQorCQkJZHNvX3dpZHRoID0gbWF4X2Rzb193aWR0aDsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CiAJaWYgKG5yX2NvdW50ZXJzID09IDEpCi0JCXByaW50ZigiICAgICAgICAgICAgIHNhbXBsZXMgICAgcGNudCIpOworCQlwcmludGYoIiAgICAgICAgICAgICBzYW1wbGVzICBwY250Iik7CiAJZWxzZQotCQlwcmludGYoIiAgIHdlaWdodCAgICBzYW1wbGVzICAgIHBjbnQiKTsKKwkJcHJpbnRmKCIgICB3ZWlnaHQgICAgc2FtcGxlcyAgcGNudCIpOwogCiAJaWYgKHZlcmJvc2UpCiAJCXByaW50ZigiICAgICAgICAgUklQICAgICAgICIpOwotCXByaW50ZigiICAga2VybmVsIGZ1bmN0aW9uXG4iKTsKLQlwcmludGYoIiAgICVzICAgIF9fX19fX18gICBfX19fXyIsCisJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsICJmdW5jdGlvbiIpOworCWlmICghdW5pcXVlX2RzbykKKwkJcHJpbnRmKCIgRFNPIik7CisJcHV0Y2hhcignXG4nKTsKKwlwcmludGYoIiAgICVzICAgIF9fX19fX18gX19fX18iLAogCSAgICAgICBucl9jb3VudGVycyA9PSAxID8gIiAgICAgICIgOiAiX19fX19fIik7CiAJaWYgKHZlcmJvc2UpCi0JCXByaW50ZigiICAgX19fX19fX19fX19fX19fXyIpOwotCXByaW50ZigiICAgX19fX19fX19fX19fX19fXG5cbiIpOworCQlwcmludGYoIiBfX19fX19fX19fX19fX19fIik7CisJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIGdyYXBoX2xpbmUpOworCWlmICghdW5pcXVlX2RzbykKKwkJcHJpbnRmKCIgJS0qLipzIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsIGdyYXBoX2xpbmUpOworCXB1dHMoIlxuIik7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnRtcCk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBzeW1ib2wgKnN5bTsKIAkJZG91YmxlIHBjbnQ7CiAKIAkJc3ltZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3Qgc3ltX2VudHJ5LCByYl9ub2RlKTsKLQkJc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCQlzeW0gPSBzeW1fZW50cnlfX3N5bWJvbChzeW1lKTsKIAogCQlpZiAoKytwcmludGVkID4gcHJpbnRfZW50cmllcyB8fCAoaW50KXN5bWUtPnNuYXBfY291bnQgPCBjb3VudF9maWx0ZXIpCiAJCQljb250aW51ZTsKQEAgLTQ4NSwxNiArNjAxLDE5IEBACiAJCQkJCSBzdW1fa3NhbXBsZXMpKTsKIAogCQlpZiAobnJfY291bnRlcnMgPT0gMSB8fCAhZGlzcGxheV93ZWlnaHRlZCkKLQkJCXByaW50ZigiJTIwLjJmIC0gIiwgc3ltZS0+d2VpZ2h0KTsKKwkJCXByaW50ZigiJTIwLjJmICIsIHN5bWUtPndlaWdodCk7CiAJCWVsc2UKLQkJCXByaW50ZigiJTkuMWYgJTEwbGQgLSAiLCBzeW1lLT53ZWlnaHQsIHN5bWUtPnNuYXBfY291bnQpOworCQkJcHJpbnRmKCIlOS4xZiAlMTBsZCAiLCBzeW1lLT53ZWlnaHQsIHN5bWUtPnNuYXBfY291bnQpOwogCiAJCXBlcmNlbnRfY29sb3JfZnByaW50ZihzdGRvdXQsICIlNC4xZiUlIiwgcGNudCk7CiAJCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCIgLSAlMDE2bGx4Iiwgc3ltLT5zdGFydCk7Ci0JCXByaW50ZigiIDogJXMiLCBzeW0tPm5hbWUpOwotCQlpZiAoc3ltZS0+bWFwLT5kc28tPm5hbWVbMF0gPT0gJ1snKQotCQkJcHJpbnRmKCIgXHQlcyIsIHN5bWUtPm1hcC0+ZHNvLT5uYW1lKTsKKwkJCXByaW50ZigiICUwMTZsbHgiLCBzeW0tPnN0YXJ0KTsKKwkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CisJCWlmICghdW5pcXVlX2RzbykKKwkJCXByaW50ZigiICUtKi4qcyIsIGRzb193aWR0aCwgZHNvX3dpZHRoLAorCQkJICAgICAgIGRzb193aWR0aCA+PSBzeW1lLT5tYXAtPmRzby0+bG9uZ19uYW1lX2xlbiA/CisJCQkJCQlzeW1lLT5tYXAtPmRzby0+bG9uZ19uYW1lIDoKKwkJCQkJCXN5bWUtPm1hcC0+ZHNvLT5zaG9ydF9uYW1lKTsKIAkJcHJpbnRmKCJcbiIpOwogCX0KIH0KQEAgLTU0MiwxMCArNjYxLDEwIEBACiAKIAkvKiB6ZXJvIGNvdW50ZXJzIG9mIGFjdGl2ZSBzeW1ib2wgKi8KIAlpZiAoc3ltZSkgewotCQlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogCQlfX3plcm9fc291cmNlX2NvdW50ZXJzKHN5bWUpOwogCQkqdGFyZ2V0ID0gTlVMTDsKLQkJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJfQogCiAJZnByaW50ZihzdGRvdXQsICJcbiVzOiAiLCBtc2cpOwpAQCAtNTYxLDcgKzY4MCw3IEBACiAJcHRocmVhZF9tdXRleF91bmxvY2soJmFjdGl2ZV9zeW1ib2xzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb20oc3ltZSwgbiwgJmFjdGl2ZV9zeW1ib2xzLCBub2RlKSB7Ci0JCXN0cnVjdCBzeW1ib2wgKnN5bSA9IChzdHJ1Y3Qgc3ltYm9sICopKHN5bWUgKyAxKTsKKwkJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2VudHJ5X19zeW1ib2woc3ltZSk7CiAKIAkJaWYgKCFzdHJjbXAoYnVmLCBzeW0tPm5hbWUpKSB7CiAJCQlmb3VuZCA9IHN5bWU7CkBAIC01ODUsNyArNzA0LDcgQEAKIAljaGFyICpuYW1lID0gTlVMTDsKIAogCWlmIChzeW1fZmlsdGVyX2VudHJ5KSB7Ci0JCXN0cnVjdCBzeW1ib2wgKnN5bSA9IChzdHJ1Y3Qgc3ltYm9sICopKHN5bV9maWx0ZXJfZW50cnkrMSk7CisJCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bV9maWx0ZXJfZW50cnkpOwogCQluYW1lID0gc3ltLT5uYW1lOwogCX0KIApAQCAtNjA3LDYgKzcyNiwxMiBAQAogCWlmIChucl9jb3VudGVycyA+IDEpCiAJCWZwcmludGYoc3Rkb3V0LCAiXHRbd10gICAgIHRvZ2dsZSBkaXNwbGF5IHdlaWdodGVkL2NvdW50W0Vdci4gXHQoJWQpXG4iLCBkaXNwbGF5X3dlaWdodGVkID8gMSA6IDApOwogCisJZnByaW50ZihzdGRvdXQsCisJCSJcdFtLXSAgICAgaGlkZSBrZXJuZWxfc3ltYm9scyBzeW1ib2xzLiAgICAgICAgICAgICBcdCglcylcbiIsCisJCWhpZGVfa2VybmVsX3N5bWJvbHMgPyAieWVzIiA6ICJubyIpOworCWZwcmludGYoc3Rkb3V0LAorCQkiXHRbVV0gICAgIGhpZGUgdXNlciBzeW1ib2xzLiAgICAgICAgICAgICAgIFx0KCVzKVxuIiwKKwkJaGlkZV91c2VyX3N5bWJvbHMgPyAieWVzIiA6ICJubyIpOwogCWZwcmludGYoc3Rkb3V0LCAiXHRbel0gICAgIHRvZ2dsZSBzYW1wbGUgemVyb2luZy4gICAgICAgICAgICAgXHQoJWQpXG4iLCB6ZXJvID8gMSA6IDApOwogCWZwcmludGYoc3Rkb3V0LCAiXHRbcVFdICAgIHF1aXQuXG4iKTsKIH0KQEAgLTYyMCw2ICs3NDUsOCBAQAogCQljYXNlICd6JzoKIAkJY2FzZSAncSc6CiAJCWNhc2UgJ1EnOgorCQljYXNlICdLJzoKKwkJY2FzZSAnVSc6CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAnRSc6CiAJCWNhc2UgJ3cnOgpAQCAtNjYzLDkgKzc5MCwxNiBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOworCQkJaWYgKHByaW50X2VudHJpZXMgPT0gMCkgeworCQkJCXNpZ193aW5jaF9oYW5kbGVyKFNJR1dJTkNIKTsKKwkJCQlzaWduYWwoU0lHV0lOQ0gsIHNpZ193aW5jaF9oYW5kbGVyKTsKKwkJCX0gZWxzZQorCQkJCXNpZ25hbChTSUdXSU5DSCwgU0lHX0RGTCk7CiAJCQlicmVhazsKIAkJY2FzZSAnRSc6CiAJCQlpZiAobnJfY291bnRlcnMgPiAxKSB7CkBAIC02OTAsNiArODI0LDkgQEAKIAkJY2FzZSAnRic6CiAJCQlwcm9tcHRfcGVyY2VudCgmc3ltX3BjbnRfZmlsdGVyLCAiRW50ZXIgZGV0YWlscyBkaXNwbGF5IGV2ZW50IGZpbHRlciAocGVyY2VudCkiKTsKIAkJCWJyZWFrOworCQljYXNlICdLJzoKKwkJCWhpZGVfa2VybmVsX3N5bWJvbHMgPSAhaGlkZV9rZXJuZWxfc3ltYm9sczsKKwkJCWJyZWFrOwogCQljYXNlICdxJzoKIAkJY2FzZSAnUSc6CiAJCQlwcmludGYoImV4aXRpbmcuXG4iKTsKQEAgLTcwMywxMiArODQwLDE1IEBACiAJCQllbHNlIHsKIAkJCQlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lID0gc3ltX2ZpbHRlcl9lbnRyeTsKIAotCQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAkJCQlzeW1fZmlsdGVyX2VudHJ5ID0gTlVMTDsKIAkJCQlfX3plcm9fc291cmNlX2NvdW50ZXJzKHN5bWUpOwotCQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7CisJCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQloaWRlX3VzZXJfc3ltYm9scyA9ICFoaWRlX3VzZXJfc3ltYm9sczsKKwkJCWJyZWFrOwogCQljYXNlICd3JzoKIAkJCWRpc3BsYXlfd2VpZ2h0ZWQgPSB+ZGlzcGxheV93ZWlnaHRlZDsKIAkJCWJyZWFrOwpAQCAtNzg3LDkgKzkyNyw5IEBACiAJICAgIHN0cnN0cihuYW1lLCAiX3RleHRfZW5kIikpCiAJCXJldHVybiAxOwogCi0Jc3ltZSA9IGRzb19fc3ltX3ByaXYobWFwLT5kc28sIHN5bSk7CisJc3ltZSA9IHN5bWJvbF9fcHJpdihzeW0pOwogCXN5bWUtPm1hcCA9IG1hcDsKLQlwdGhyZWFkX211dGV4X2luaXQoJnN5bWUtPnNvdXJjZV9sb2NrLCBOVUxMKTsKKwlzeW1lLT5zcmMgPSBOVUxMOwogCWlmICghc3ltX2ZpbHRlcl9lbnRyeSAmJiBzeW1fZmlsdGVyICYmICFzdHJjbXAobmFtZSwgc3ltX2ZpbHRlcikpCiAJCXN5bV9maWx0ZXJfZW50cnkgPSBzeW1lOwogCkBAIC04MDAsMTMgKzk0MCwyMCBAQAogCQl9CiAJfQogCisJaWYgKCFzeW1lLT5za2lwKQorCQlzeW1lLT5uYW1lX2xlbiA9IHN0cmxlbihzeW0tPm5hbWUpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2Vfc3ltYm9scyh2b2lkKQogewotCWlmIChkc29zX19sb2FkX2tlcm5lbCh2bWxpbnV4X25hbWUsIHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSwKLQkJCSAgICAgIHN5bWJvbF9maWx0ZXIsIHZlcmJvc2UsIDEpIDw9IDApCisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvc19fbG9hZF9rZXJuZWwoKTsKKworCWlmIChrZXJuZWwgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGRzb19fbG9hZF9rZXJuZWxfc3ltKGtlcm5lbCwgc3ltYm9sX2ZpbHRlciwgMSkgPD0gMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGR1bXBfc3ltdGFiKQpAQCAtODE1LDQxICs5NjIsMTA0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBCaW5hcnkgc2VhcmNoIGluIHRoZSBoaXN0b2dyYW0gdGFibGUgYW5kIHJlY29yZCB0aGUgaGl0OgotICovCi1zdGF0aWMgdm9pZCByZWNvcmRfaXAodTY0IGlwLCBpbnQgY291bnRlcikKK3N0YXRpYyB2b2lkIGV2ZW50X19wcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBpbnQgY291bnRlcikKIHsKKwl1NjQgaXAgPSBzZWxmLT5pcC5pcDsKIAlzdHJ1Y3QgbWFwICptYXA7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltID0ga2VybmVsX21hcHNfX2ZpbmRfc3ltYm9sKGlwLCAmbWFwKTsKKwlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl1OCBvcmlnaW4gPSBzZWxmLT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JaWYgKHN5bSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBzeW1fZW50cnkgKnN5bWUgPSBkc29fX3N5bV9wcml2KG1hcC0+ZHNvLCBzeW0pOworCXN3aXRjaCAob3JpZ2luKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI6IHsKKwkJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCi0JCWlmICghc3ltZS0+c2tpcCkgewotCQkJc3ltZS0+Y291bnRbY291bnRlcl0rKzsKLQkJCXJlY29yZF9wcmVjaXNlX2lwKHN5bWUsIGNvdW50ZXIsIGlwKTsKLQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7Ci0JCQlpZiAobGlzdF9lbXB0eSgmc3ltZS0+bm9kZSkgfHwgIXN5bWUtPm5vZGUubmV4dCkKLQkJCQlfX2xpc3RfaW5zZXJ0X2FjdGl2ZV9zeW0oc3ltZSk7Ci0JCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CisJCWlmIChoaWRlX3VzZXJfc3ltYm9scykKIAkJCXJldHVybjsKKworCQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmlwLnBpZCk7CisJCWlmICh0aHJlYWQgPT0gTlVMTCkKKwkJCXJldHVybjsKKworCQltYXAgPSB0aHJlYWRfX2ZpbmRfbWFwKHRocmVhZCwgaXApOworCQlpZiAobWFwICE9IE5VTEwpIHsKKwkJCWlwID0gbWFwLT5tYXBfaXAobWFwLCBpcCk7CisJCQlzeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgaXAsIHN5bWJvbF9maWx0ZXIpOworCQkJaWYgKHN5bSA9PSBOVUxMKQorCQkJCXJldHVybjsKKwkJCXVzZXJzcGFjZV9zYW1wbGVzKys7CisJCQlicmVhazsKIAkJfQogCX0KKwkJLyoKKwkJICogSWYgdGhpcyBpcyBvdXRzaWRlIG9mIGFsbCBrbm93biBtYXBzLAorCQkgKiBhbmQgaXMgYSBuZWdhdGl2ZSBhZGRyZXNzLCB0cnkgdG8gbG9vayBpdAorCQkgKiB1cCBpbiB0aGUga2VybmVsIGRzbywgYXMgaXQgbWlnaHQgYmUgYQorCQkgKiB2c3lzY2FsbCBvciB2ZHNvICh3aGljaCBleGVjdXRlcyBpbiB1c2VyLW1vZGUpLgorCQkgKi8KKwkJaWYgKChsb25nIGxvbmcpaXAgPj0gMCkKKwkJCXJldHVybjsKKwkJLyogRmFsbCB0aHJ1ICovCisJY2FzZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDoKKwkJaWYgKGhpZGVfa2VybmVsX3N5bWJvbHMpCisJCQlyZXR1cm47CiAKLQlzYW1wbGVzLS07Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfZXZlbnQodTY0IGlwLCBpbnQgY291bnRlciwgaW50IHVzZXIpCi17Ci0Jc2FtcGxlcysrOwotCi0JaWYgKHVzZXIpIHsKLQkJdXNlcnNwYWNlX3NhbXBsZXMrKzsKKwkJc3ltID0ga2VybmVsX21hcHNfX2ZpbmRfc3ltYm9sKGlwLCAmbWFwKTsKKwkJaWYgKHN5bSA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQogCi0JcmVjb3JkX2lwKGlwLCBjb3VudGVyKTsKKwlzeW1lID0gc3ltYm9sX19wcml2KHN5bSk7CisKKwlpZiAoIXN5bWUtPnNraXApIHsKKwkJc3ltZS0+Y291bnRbY291bnRlcl0rKzsKKwkJc3ltZS0+b3JpZ2luID0gb3JpZ2luOworCQlyZWNvcmRfcHJlY2lzZV9pcChzeW1lLCBjb3VudGVyLCBpcCk7CisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQorCQkJX19saXN0X2luc2VydF9hY3RpdmVfc3ltKHN5bWUpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CisJCSsrc2FtcGxlczsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudF90ICpzZWxmKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoc2VsZi0+bW1hcC5waWQpOworCisJaWYgKHRocmVhZCAhPSBOVUxMKSB7CisJCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBOVUxMLCAwKTsKKwkJaWYgKG1hcCAhPSBOVUxMKQorCQkJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmNvbW0ucGlkKTsKKworCWlmICh0aHJlYWQgIT0gTlVMTCkKKwkJdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIHNlbGYtPmNvbW0uY29tbSk7Cit9CisKK3N0YXRpYyBpbnQgZXZlbnRfX3Byb2Nlc3MoZXZlbnRfdCAqZXZlbnQpCit7CisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCWV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnQpOworCQlicmVhazsKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CisJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IG1tYXBfZGF0YSB7CkBAIC05MjIsMTMgKzExMzIsMTEgQEAKIAkJCWV2ZW50ID0gJmV2ZW50X2NvcHk7CiAJCX0KIAorCQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX1NBTVBMRSkKKwkJCWV2ZW50X19wcm9jZXNzX3NhbXBsZShldmVudCwgbWQtPmNvdW50ZXIpOworCQllbHNlCisJCQlldmVudF9fcHJvY2VzcyhldmVudCk7CiAJCW9sZCArPSBzaXplOwotCi0JCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKSB7Ci0JCQlpbnQgdXNlciA9Ci0JKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLKSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7Ci0JCQlwcm9jZXNzX2V2ZW50KGV2ZW50LT5pcC5pcCwgbWQtPmNvdW50ZXIsIHVzZXIpOwotCQl9CiAJfQogCiAJbWQtPnByZXYgPSBvbGQ7CkBAIC05NzAsNiArMTE3OCw3IEBACiAJfQogCiAJYXR0ci0+aW5oZXJpdAkJPSAoY3B1IDwgMCkgJiYgaW5oZXJpdDsKKwlhdHRyLT5tbWFwCQk9IDE7CiAKIHRyeV9hZ2FpbjoKIAlmZFtpXVtjb3VudGVyXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwgdGFyZ2V0X3BpZCwgY3B1LCBncm91cF9mZCwgMCk7CkBAIC05NzcsNyArMTE4Niw3IEBACiAJaWYgKGZkW2ldW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CiAKLQkJaWYgKGVyciA9PSBFUEVSTSkKKwkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKQogCQkJZGllKCJObyBwZXJtaXNzaW9uIC0gYXJlIHlvdSByb290P1xuIik7CiAJCS8qCiAJCSAqIElmIGl0J3MgY3ljbGVzIHRoZW4gZmFsbCBiYWNrIHRvIGhydGltZXIKQEAgLTEwMjgsNiArMTIzNywxMSBAQAogCWludCBpLCBjb3VudGVyOwogCWludCByZXQ7CiAKKwlpZiAodGFyZ2V0X3BpZCAhPSAtMSkKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIGV2ZW50X19wcm9jZXNzKTsKKwllbHNlCisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX3Byb2Nlc3MpOworCiAJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykgewogCQlncm91cF9mZCA9IC0xOwogCQlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKQEAgLTEwODQsNiArMTI5OCw4IEBACiAJT1BUX0lOVEVHRVIoJ0MnLCAiQ1BVIiwgJnByb2ZpbGVfY3B1LAogCQkgICAgIkNQVSB0byBwcm9maWxlIG9uIiksCiAJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnZtbGludXhfbmFtZSwgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9CT09MRUFOKCdLJywgImhpZGVfa2VybmVsX3N5bWJvbHMiLCAmaGlkZV9rZXJuZWxfc3ltYm9scywKKwkJICAgICJoaWRlIGtlcm5lbCBzeW1ib2xzIiksCiAJT1BUX0lOVEVHRVIoJ20nLCAibW1hcC1wYWdlcyIsICZtbWFwX3BhZ2VzLAogCQkgICAgIm51bWJlciBvZiBtbWFwIGRhdGEgcGFnZXMiKSwKIAlPUFRfSU5URUdFUigncicsICJyZWFsdGltZSIsICZyZWFsdGltZV9wcmlvLApAQCAtMTEwNiw2ICsxMzIyLDggQEAKIAkJICAgICJwcm9maWxlIGF0IHRoaXMgZnJlcXVlbmN5IiksCiAJT1BUX0lOVEVHRVIoJ0UnLCAiZW50cmllcyIsICZwcmludF9lbnRyaWVzLAogCQkgICAgImRpc3BsYXkgdGhpcyBtYW55IGZ1bmN0aW9ucyIpLAorCU9QVF9CT09MRUFOKCdVJywgImhpZGVfdXNlcl9zeW1ib2xzIiwgJmhpZGVfdXNlcl9zeW1ib2xzLAorCQkgICAgImhpZGUgdXNlciBzeW1ib2xzIiksCiAJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBjb3VudGVyIG9wZW4gZXJyb3JzLCBldGMpIiksCiAJT1BUX0VORCgpCkBAIC0xMTE1LDggKzEzMzMsNiBAQAogewogCWludCBjb3VudGVyOwogCi0Jc3ltYm9sX19pbml0KCk7Ci0KIAlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdG9wX3VzYWdlLCAwKTsKQEAgLTExMzMsNiArMTM0OSw5IEBACiAJaWYgKCFucl9jb3VudGVycykKIAkJbnJfY291bnRlcnMgPSAxOwogCisJc3ltYm9sX19pbml0KHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSArCisJCSAgICAgKG5yX2NvdW50ZXJzICsgMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCiAJaWYgKGRlbGF5X3NlY3MgPCAxKQogCQlkZWxheV9zZWNzID0gMTsKIApAQCAtMTE2OSw1ICsxMzg4LDExIEBACiAJaWYgKHRhcmdldF9waWQgIT0gLTEgfHwgcHJvZmlsZV9jcHUgIT0gLTEpCiAJCW5yX2NwdXMgPSAxOwogCisJZ2V0X3Rlcm1fZGltZW5zaW9ucygmd2luc2l6ZSk7CisJaWYgKHByaW50X2VudHJpZXMgPT0gMCkgeworCQl1cGRhdGVfcHJpbnRfZW50cmllcygmd2luc2l6ZSk7CisJCXNpZ25hbChTSUdXSU5DSCwgc2lnX3dpbmNoX2hhbmRsZXIpOworCX0KKwogCXJldHVybiBfX2NtZF90b3AoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggNGMxMjlmZi4uZDA0MmQ2NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTgxLDggKzgxLDggQEAKIAkJKGxvbmcgbG9uZylwZXJpb2QpOwogCiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7Ci0JCWVwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiBpbnQgY21kX3RyYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlzeW1ib2xfX2luaXQoKTsKKwlzeW1ib2xfX2luaXQoMCk7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBhbm5vdGF0ZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKaW5kZXggZTExZDhkMi4uYTNkOGJmNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLmgKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKQEAgLTE1LDYgKzE1LDggQEAKIGV4dGVybiBpbnQgY2hlY2tfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKmNtZCk7CiAKIGV4dGVybiBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2JlbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2J1aWxkaWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3NjaGVkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtMjUsNSArMjcsNyBAQAogZXh0ZXJuIGludCBjbWRfdG9wKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3RyYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfa21lbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0IGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CmluZGV4IDAwMzI2ZTIuLmQzYTZlMTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAorKysgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKQEAgLTMsNiArMyw4IEBACiAjIGNvbW1hbmQgbmFtZQkJCWNhdGVnb3J5IFtkZXByZWNhdGVkXSBbY29tbW9uXQogIwogcGVyZi1hbm5vdGF0ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLWJlbmNoCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYnVpbGRpZC1saXN0CQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1saXN0CQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtc2NoZWQJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1yZWNvcmQJCQltYWlucG9yY2VsYWluIGNvbW1vbgpAQCAtMTEsMyArMTMsNCBAQAogcGVyZi10aW1lY2hhcnQJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi10b3AJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi10cmFjZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLXByb2JlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dCBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAppbmRleCBmZGQ0MmE4Li5mMDAwYzMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2Rlc2lnbi50eHQKKysrIGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CkBAIC0xMzcsNiArMTM3LDggQEAKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgk9IDUsCiAJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUoJPSA2LAorCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwk9IDcsCisJUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTCT0gOCwKIH07CiAKIENvdW50ZXJzIG9mIHRoZSB0eXBlIFBFUkZfVFlQRV9UUkFDRVBPSU5UIGFyZSBhdmFpbGFibGUgd2hlbiB0aGUgZnRyYWNlIGV2ZW50CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDYyNGU2MmQuLmNmNjQwNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAidXRpbC9ydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9zdHJpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnZnMuaCIKIAogY29uc3QgY2hhciBwZXJmX3VzYWdlX3N0cmluZ1tdID0KIAkicGVyZiBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXSI7CkBAIC0yODQsMTcgKzI4NSwyMSBAQAogewogCWNvbnN0IGNoYXIgKmNtZCA9IGFyZ3ZbMF07CiAJc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7Ci0JCXsgImhlbHAiLCBjbWRfaGVscCwgMCB9LAotCQl7ICJsaXN0IiwgY21kX2xpc3QsIDAgfSwKLQkJeyAicmVjb3JkIiwgY21kX3JlY29yZCwgMCB9LAotCQl7ICJyZXBvcnQiLCBjbWRfcmVwb3J0LCAwIH0sCi0JCXsgInN0YXQiLCBjbWRfc3RhdCwgMCB9LAotCQl7ICJ0aW1lY2hhcnQiLCBjbWRfdGltZWNoYXJ0LCAwIH0sCi0JCXsgInRvcCIsIGNtZF90b3AsIDAgfSwKLQkJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIDAgfSwKLQkJeyAidmVyc2lvbiIsIGNtZF92ZXJzaW9uLCAwIH0sCi0JCXsgInRyYWNlIiwgY21kX3RyYWNlLCAwIH0sCi0JCXsgInNjaGVkIiwgY21kX3NjaGVkLCAwIH0sCisJCXsgImJ1aWxkaWQtbGlzdCIsIGNtZF9idWlsZGlkX2xpc3QsIDAgfSwKKwkJeyAiaGVscCIsCWNtZF9oZWxwLAkwIH0sCisJCXsgImxpc3QiLAljbWRfbGlzdCwJMCB9LAorCQl7ICJyZWNvcmQiLAljbWRfcmVjb3JkLAkwIH0sCisJCXsgInJlcG9ydCIsCWNtZF9yZXBvcnQsCTAgfSwKKwkJeyAiYmVuY2giLAljbWRfYmVuY2gsCTAgfSwKKwkJeyAic3RhdCIsCWNtZF9zdGF0LAkwIH0sCisJCXsgInRpbWVjaGFydCIsCWNtZF90aW1lY2hhcnQsCTAgfSwKKwkJeyAidG9wIiwJY21kX3RvcCwJMCB9LAorCQl7ICJhbm5vdGF0ZSIsCWNtZF9hbm5vdGF0ZSwJMCB9LAorCQl7ICJ2ZXJzaW9uIiwJY21kX3ZlcnNpb24sCTAgfSwKKwkJeyAidHJhY2UiLAljbWRfdHJhY2UsCTAgfSwKKwkJeyAic2NoZWQiLAljbWRfc2NoZWQsCTAgfSwKKwkJeyAicHJvYmUiLAljbWRfcHJvYmUsCTAgfSwKKwkJeyAia21lbSIsCWNtZF9rbWVtLAkwIH0sCiAJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciBleHRbXSA9IFNUUklQX0VYVEVOU0lPTjsKQEAgLTM4Miw0NSArMzg3LDEyIEBACiAvKiBtaW5pIC9wcm9jL21vdW50cyBwYXJzZXI6IHNlYXJjaGluZyBmb3IgIl5ibGFoIC9tb3VudC9wb2ludCBkZWJ1Z2ZzIiAqLwogc3RhdGljIHZvaWQgZ2V0X2RlYnVnZnNfbW50cHQodm9pZCkKIHsKLQlGSUxFICpmaWxlOwotCWNoYXIgZnNfdHlwZVsxMDBdOwotCWNoYXIgZGVidWdmc1tNQVhQQVRITEVOXTsKKwljb25zdCBjaGFyICpwYXRoID0gZGVidWdmc19maW5kX21vdW50cG9pbnQoKTsKIAotCS8qCi0JICogdHJ5IHRoZSBzdGFuZGFyZCBsb2NhdGlvbgotCSAqLwotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KCIvc3lzL2tlcm5lbC9kZWJ1Zy8iKSA9PSAwKSB7Ci0JCXN0cmNweShkZWJ1Z2ZzX21udHB0LCAiL3N5cy9rZXJuZWwvZGVidWcvIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIHRyeSB0aGUgc2FuZSBsb2NhdGlvbgotCSAqLwotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KCIvZGVidWcvIikgPT0gMCkgewotCQlzdHJjcHkoZGVidWdmc19tbnRwdCwgIi9kZWJ1Zy8iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogZ2l2ZSB1cCBhbmQgcGFyc2UgL3Byb2MvbW91bnRzCi0JICovCi0JZmlsZSA9IGZvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpOwotCWlmIChmaWxlID09IE5VTEwpCi0JCXJldHVybjsKLQotCXdoaWxlIChmc2NhbmYoZmlsZSwgIiUqcyAlIgotCQkgICAgICBTVFIoTUFYUEFUSExFTikKLQkJICAgICAgInMgJTk5cyAlKnMgJSpkICUqZFxuIiwKLQkJICAgICAgZGVidWdmcywgZnNfdHlwZSkgPT0gMikgewotCQlpZiAoc3RyY21wKGZzX3R5cGUsICJkZWJ1Z2ZzIikgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlmY2xvc2UoZmlsZSk7Ci0JaWYgKHN0cmNtcChmc190eXBlLCAiZGVidWdmcyIpID09IDApIHsKLQkJc3RybmNweShkZWJ1Z2ZzX21udHB0LCBkZWJ1Z2ZzLCBNQVhQQVRITEVOKTsKLQkJZGVidWdmc19tbnRwdFtNQVhQQVRITEVOIC0gMV0gPSAnXDAnOwotCX0KKwlpZiAocGF0aCkKKwkJc3RybmNweShkZWJ1Z2ZzX21udHB0LCBwYXRoLCBzaXplb2YoZGVidWdmc19tbnRwdCkpOworCWVsc2UKKwkJZGVidWdmc19tbnRwdFswXSA9ICdcMCc7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5oIGIvdG9vbHMvcGVyZi9wZXJmLmgKaW5kZXggOGNjNDYyMy4uNDU0ZDVkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmgKQEAgLTQ3LDYgKzQ3LDE4IEBACiAjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQogI2VuZGlmCiAKKyNpZmRlZiBfX2FscGhhX18KKyNpbmNsdWRlICIuLi8uLi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIgorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCJtYiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorI2VuZGlmCisKKyNpZmRlZiBfX2lhNjRfXworI2luY2x1ZGUgIi4uLy4uL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaCIKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSAoIm1mIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSAoImhpbnQgQHBhdXNlIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKKwogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KaW5kZXggYzU2MWQxNS4uNTQ1NTJhMCAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KKysrIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPVBFUkYtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYwLjAuMS5QRVJGCitERUZfVkVSPXYwLjAuMi5QRVJGCiAKIExGPScKICcKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwppbmRleCAzYjgzODBmLi5iM2I3MTI1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAl9CiAJbm9kZS0+dmFsX25yID0gY2hhaW4tPm5yIC0gc3RhcnQ7CiAJaWYgKCFub2RlLT52YWxfbnIpCi0JCXByaW50ZigiV2FybmluZzogZW1wdHkgbm9kZSBpbiBjYWxsY2hhaW4gdHJlZVxuIik7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IGVtcHR5IG5vZGUgaW4gY2FsbGNoYWluIHRyZWVcbiIpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwppbmRleCAyNDJiMDU1Li41NTQzZTdkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwpAQCAtNzAsNiArNzAsMzUgQEAKIAl9CiB9CiAKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoaW50IGlucHV0LCBvZmZfdCBvZmZzZXQsIG9mZl90IHNpemUpCit7CisJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwlvZmZfdCBsaW1pdCA9IG9mZnNldCArIHNpemU7CisJaW50IGVyciA9IC0xOworCisJd2hpbGUgKG9mZnNldCA8IGxpbWl0KSB7CisJCXN0cnVjdCBkc28gKmRzbzsKKwkJc3NpemVfdCBsZW47CisKKwkJaWYgKHJlYWQoaW5wdXQsICZiZXYsIHNpemVvZihiZXYpKSAhPSBzaXplb2YoYmV2KSkKKwkJCWdvdG8gb3V0OworCisJCWxlbiA9IGJldi5oZWFkZXIuc2l6ZSAtIHNpemVvZihiZXYpOworCQlpZiAocmVhZChpbnB1dCwgZmlsZW5hbWUsIGxlbikgIT0gbGVuKQorCQkJZ290byBvdXQ7CisKKwkJZHNvID0gZHNvc19fZmluZG5ldyhmaWxlbmFtZSk7CisJCWlmIChkc28gIT0gTlVMTCkKKwkJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgJmJldi5idWlsZF9pZCk7CisKKwkJb2Zmc2V0ICs9IGJldi5oZWFkZXIuc2l6ZTsKKwl9CisJZXJyID0gMDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgbW1hcF9kaXNwYXRjaF9wZXJmX2ZpbGUoc3RydWN0IHBlcmZfaGVhZGVyICoqcGhlYWRlciwKIAkJCSAgICBjb25zdCBjaGFyICppbnB1dF9uYW1lLAogCQkJICAgIGludCBmb3JjZSwKQEAgLTc3LDcgKzEwNiw3IEBACiAJCQkgICAgaW50ICpjd2RsZW4sCiAJCQkgICAgY2hhciAqKmN3ZCkKIHsKLQlpbnQgcmV0LCByYyA9IEVYSVRfRkFJTFVSRTsKKwlpbnQgZXJyOwogCXN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyOwogCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwpAQCAtODksNTYgKzExOCw2OSBAQAogCWludCBpbnB1dDsKIAljaGFyICpidWY7CiAKLQlpZiAoIWN1cnJfaGFuZGxlcikKLQkJZGllKCJGb3Jnb3QgdG8gcmVnaXN0ZXIgcGVyZiBmaWxlIGhhbmRsZXIiKTsKKwlpZiAoY3Vycl9oYW5kbGVyID09IE5VTEwpIHsKKwkJcHJfZGVidWcoIkZvcmdvdCB0byByZWdpc3RlciBwZXJmIGZpbGUgaGFuZGxlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAlpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOwogCWlmIChpbnB1dCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICIgZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMiLCBpbnB1dF9uYW1lKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIGlucHV0X25hbWUpOwogCQlpZiAoIXN0cmNtcChpbnB1dF9uYW1lLCAicGVyZi5kYXRhIikpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOwotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JCWV4aXQoLTEpOworCQkJcHJfZXJyKCIgICh0cnkgJ3BlcmYgcmVjb3JkJyBmaXJzdCkiKTsKKwkJcHJfZXJyKCJcbiIpOworCQlyZXR1cm4gLWVycm5vOwogCX0KIAotCXJldCA9IGZzdGF0KGlucHV0LCAmaW5wdXRfc3RhdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7Ci0JCWV4aXQoLTEpOworCWlmIChmc3RhdChpbnB1dCwgJmlucHV0X3N0YXQpIDwgMCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKKwkJZXJyID0gLWVycm5vOworCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKKwllcnIgPSAtRUFDQ0VTOwogCWlmICghZm9yY2UgJiYgaW5wdXRfc3RhdC5zdF91aWQgJiYgKGlucHV0X3N0YXQuc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKLQkJZnByaW50ZihzdGRlcnIsICJmaWxlOiAlcyBub3Qgb3duZWQgYnkgY3VycmVudCB1c2VyIG9yIHJvb3RcbiIsCisJCXByX2VycigiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290XG4iLAogCQkJaW5wdXRfbmFtZSk7Ci0JCWV4aXQoLTEpOworCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKLQlpZiAoIWlucHV0X3N0YXQuc3Rfc2l6ZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgInplcm8tc2l6ZWQgZmlsZSwgbm90aGluZyB0byBkbyFcbiIpOwotCQlleGl0KDApOworCWlmIChpbnB1dF9zdGF0LnN0X3NpemUgPT0gMCkgeworCQlwcl9pbmZvKCJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZ290byBkb25lOwogCX0KIAotCSpwaGVhZGVyID0gcGVyZl9oZWFkZXJfX3JlYWQoaW5wdXQpOwotCWhlYWRlciA9ICpwaGVhZGVyOworCWVyciA9IC1FTk9NRU07CisJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWlmIChoZWFkZXIgPT0gTlVMTCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChoZWFkZXIsIGlucHV0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZGVsZXRlOworCSpwaGVhZGVyID0gaGVhZGVyOwogCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OwogCiAJc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKIAotCWlmIChjdXJyX2hhbmRsZXItPnNhbXBsZV90eXBlX2NoZWNrKQotCQlpZiAoY3Vycl9oYW5kbGVyLT5zYW1wbGVfdHlwZV9jaGVjayhzYW1wbGVfdHlwZSkgPCAwKQotCQkJZXhpdCgtMSk7CisJZXJyID0gLUVJTlZBTDsKKwlpZiAoY3Vycl9oYW5kbGVyLT5zYW1wbGVfdHlwZV9jaGVjayAmJgorCSAgICBjdXJyX2hhbmRsZXItPnNhbXBsZV90eXBlX2NoZWNrKHNhbXBsZV90eXBlKSA8IDApCisJCWdvdG8gb3V0X2RlbGV0ZTsKIAotCWlmIChsb2FkX2tlcm5lbCgpIDwgMCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBsb2FkIGtlcm5lbCBzeW1ib2xzIik7Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7CisJZXJyID0gLUVOT01FTTsKKwlpZiAobG9hZF9rZXJuZWwoTlVMTCkgPCAwKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGxvYWQga2VybmVsIHN5bWJvbHNcbiIpOworCQlnb3RvIG91dF9kZWxldGU7CiAJfQogCiAJaWYgKCFmdWxsX3BhdGhzKSB7CiAJCWlmIChnZXRjd2QoX19jd2QsIHNpemVvZihfX2N3ZCkpID09IE5VTEwpIHsKLQkJCXBlcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnkiKTsKLQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKwkJCWVyciA9IC1lcnJubzsKKwkJCWdvdG8gb3V0X2RlbGV0ZTsKIAkJfQogCQkqY3dkID0gX19jd2Q7CiAJCSpjd2RsZW4gPSBzdHJsZW4oKmN3ZCk7CkBAIC0xNTIsMTEgKzE5NCwxMiBAQAogCWhlYWQgLT0gc2hpZnQ7CiAKIHJlbWFwOgotCWJ1ZiA9IChjaGFyICopbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAotCQkJICAgTUFQX1NIQVJFRCwgaW5wdXQsIG9mZnNldCk7CisJYnVmID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAorCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKIAlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gbW1hcCBmaWxlIik7Ci0JCWV4aXQoLTEpOworCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOworCQllcnIgPSAtZXJybm87CisJCWdvdG8gb3V0X2RlbGV0ZTsKIAl9CiAKIG1vcmU6CkBAIC0yMTMsMTAgKzI1NiwxMiBAQAogCQlnb3RvIG1vcmU7CiAKIGRvbmU6Ci0JcmMgPSBFWElUX1NVQ0NFU1M7CisJZXJyID0gMDsKK291dF9jbG9zZToKIAljbG9zZShpbnB1dCk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIGVycjsKK291dF9kZWxldGU6CisJcGVyZl9oZWFkZXJfX2RlbGV0ZShoZWFkZXIpOworCWdvdG8gb3V0X2Nsb3NlOwogfQotCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmgKaW5kZXggNzE2ZDEwNS4uYWUwMzZlYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmgKQEAgLTI3LDUgKzI3LDYgQEAKIAkJCSAgICBpbnQgZnVsbF9wYXRocywKIAkJCSAgICBpbnQgKmN3ZGxlbiwKIAkJCSAgICBjaGFyICoqY3dkKTsKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoaW50IGlucHV0LCBvZmZfdCBvZmZzZXQsIG9mZl90IGZpbGVfc2l6ZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwppbmRleCBlOGNhOThmLi4yOGQ1MjBkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGVidWcuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwpAQCAtMTMsMTIgKzEzLDEyIEBACiBpbnQgdmVyYm9zZSA9IDA7CiBpbnQgZHVtcF90cmFjZSA9IDA7CiAKLWludCBlcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoraW50IGVwcmludGYoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodmVyYm9zZSkgeworCWlmICh2ZXJib3NlID49IGxldmVsKSB7CiAJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJCXJldCA9IHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKIAkJdmFfZW5kKGFyZ3MpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmggYi90b29scy9wZXJmL3V0aWwvZGVidWcuaAppbmRleCAwMmQxZmExLi5jNmMyNGM1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGVidWcuaAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWcuaApAQCAtMiwxMCArMiwxMyBAQAogI2lmbmRlZiBfX1BFUkZfREVCVUdfSAogI2RlZmluZSBfX1BFUkZfREVCVUdfSAogCisjaW5jbHVkZSAiZXZlbnQuaCIKKwogZXh0ZXJuIGludCB2ZXJib3NlOwogZXh0ZXJuIGludCBkdW1wX3RyYWNlOwogCi1pbnQgZXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKK2ludCBlcHJpbnRmKGludCBsZXZlbCwKKwkgICAgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CiBpbnQgZHVtcF9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CiB2b2lkIHRyYWNlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiNzNlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwyNDEgQEAKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgZGVidWdmc19wcmVtb3VudGVkOworc3RhdGljIGNoYXIgZGVidWdmc19tb3VudHBvaW50W01BWF9QQVRIKzFdOworCitzdGF0aWMgY29uc3QgY2hhciAqZGVidWdmc19rbm93bl9tb3VudHBvaW50c1tdID0geworCSIvc3lzL2tlcm5lbC9kZWJ1Zy8iLAorCSIvZGVidWcvIiwKKwkwLAorfTsKKworLyogdXNlIHRoaXMgdG8gZm9yY2UgYSB1bW91bnQgKi8KK3ZvaWQgZGVidWdmc19mb3JjZV9jbGVhbnVwKHZvaWQpCit7CisJZGVidWdmc19maW5kX21vdW50cG9pbnQoKTsKKwlkZWJ1Z2ZzX3ByZW1vdW50ZWQgPSAwOworCWRlYnVnZnNfdW1vdW50KCk7Cit9CisKKy8qIGNvbnN0cnVjdCBhIGZ1bGwgcGF0aCB0byBhIGRlYnVnZnMgZWxlbWVudCAqLworaW50IGRlYnVnZnNfbWFrZV9wYXRoKGNvbnN0IGNoYXIgKmVsZW1lbnQsIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCit7CisJaW50IGxlbjsKKworCWlmIChzdHJsZW4oZGVidWdmc19tb3VudHBvaW50KSA9PSAwKSB7CisJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXJldHVybiAtMTsKKwl9CisKKwlsZW4gPSBzdHJsZW4oZGVidWdmc19tb3VudHBvaW50KSArIHN0cmxlbihlbGVtZW50KSArIDE7CisJaWYgKGxlbiA+PSBzaXplKQorCQlyZXR1cm4gbGVuKzE7CisKKwlzbnByaW50ZihidWZmZXIsIHNpemUtMSwgIiVzLyVzIiwgZGVidWdmc19tb3VudHBvaW50LCBlbGVtZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWJ1Z2ZzX2ZvdW5kOworCisvKiBmaW5kIHRoZSBwYXRoIHRvIHRoZSBtb3VudGVkIGRlYnVnZnMgKi8KK2NvbnN0IGNoYXIgKmRlYnVnZnNfZmluZF9tb3VudHBvaW50KHZvaWQpCit7CisJY29uc3QgY2hhciAqKnB0cjsKKwljaGFyIHR5cGVbMTAwXTsKKwlGSUxFICpmcDsKKworCWlmIChkZWJ1Z2ZzX2ZvdW5kKQorCQlyZXR1cm4gKGNvbnN0IGNoYXIgKikgZGVidWdmc19tb3VudHBvaW50OworCisJcHRyID0gZGVidWdmc19rbm93bl9tb3VudHBvaW50czsKKwl3aGlsZSAoKnB0cikgeworCQlpZiAoZGVidWdmc192YWxpZF9tb3VudHBvaW50KCpwdHIpID09IDApIHsKKwkJCWRlYnVnZnNfZm91bmQgPSAxOworCQkJc3RyY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgKnB0cik7CisJCQlyZXR1cm4gZGVidWdmc19tb3VudHBvaW50OworCQl9CisJCXB0cisrOworCX0KKworCS8qIGdpdmUgdXAgYW5kIHBhcnNlIC9wcm9jL21vdW50cyAqLworCWZwID0gZm9wZW4oIi9wcm9jL21vdW50cyIsICJyIik7CisJaWYgKGZwID09IE5VTEwpCisJCWRpZSgiQ2FuJ3Qgb3BlbiAvcHJvYy9tb3VudHMgZm9yIHJlYWQiKTsKKworCXdoaWxlIChmc2NhbmYoZnAsICIlKnMgJSIKKwkJICAgICAgU1RSKE1BWF9QQVRIKQorCQkgICAgICAicyAlOTlzICUqcyAlKmQgJSpkXG4iLAorCQkgICAgICBkZWJ1Z2ZzX21vdW50cG9pbnQsIHR5cGUpID09IDIpIHsKKwkJaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpID09IDApCisJCQlicmVhazsKKwl9CisJZmNsb3NlKGZwKTsKKworCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWRlYnVnZnNfZm91bmQgPSAxOworCisJcmV0dXJuIGRlYnVnZnNfbW91bnRwb2ludDsKK30KKworLyogdmVyaWZ5IHRoYXQgYSBtb3VudHBvaW50IGlzIGFjdHVhbGx5IGEgZGVidWdmcyBpbnN0YW5jZSAqLworCitpbnQgZGVidWdmc192YWxpZF9tb3VudHBvaW50KGNvbnN0IGNoYXIgKmRlYnVnZnMpCit7CisJc3RydWN0IHN0YXRmcyBzdF9mczsKKworCWlmIChzdGF0ZnMoZGVidWdmcywgJnN0X2ZzKSA8IDApCisJCXJldHVybiAtRU5PRU5UOworCWVsc2UgaWYgKHN0X2ZzLmZfdHlwZSAhPSAobG9uZykgREVCVUdGU19NQUdJQykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgZGVidWdmc192YWxpZF9lbnRyeShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQocGF0aCwgJnN0KSkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiAwOworfQorCisvKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgKi8KKworaW50IGRlYnVnZnNfbW91bnQoY29uc3QgY2hhciAqbW91bnRwb2ludCkKK3sKKwljaGFyIG1vdW50Y21kWzEyOF07CisKKwkvKiBzZWUgaWYgaXQncyBhbHJlYWR5IG1vdW50ZWQgKi8KKwlpZiAoZGVidWdmc19maW5kX21vdW50cG9pbnQoKSkgeworCQlkZWJ1Z2ZzX3ByZW1vdW50ZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpZiBub3QgbW91bnRlZCBhbmQgbm8gYXJndW1lbnQgKi8KKwlpZiAobW91bnRwb2ludCA9PSBOVUxMKSB7CisJCS8qIHNlZSBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgKi8KKwkJbW91bnRwb2ludCA9IGdldGVudihQRVJGX0RFQlVHRlNfRU5WSVJPTk1FTlQpOworCQkvKiBpZiBubyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIGRlZmF1bHQgKi8KKwkJaWYgKG1vdW50cG9pbnQgPT0gTlVMTCkKKwkJCW1vdW50cG9pbnQgPSAiL3N5cy9rZXJuZWwvZGVidWciOworCX0KKworCS8qIHNhdmUgdGhlIG1vdW50cG9pbnQgKi8KKwlzdHJuY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgbW91bnRwb2ludCwgc2l6ZW9mKGRlYnVnZnNfbW91bnRwb2ludCkpOworCisJLyogbW91bnQgaXQgKi8KKwlzbnByaW50Zihtb3VudGNtZCwgc2l6ZW9mKG1vdW50Y21kKSwKKwkJICIvYmluL21vdW50IC10IGRlYnVnZnMgZGVidWdmcyAlcyIsIG1vdW50cG9pbnQpOworCXJldHVybiBzeXN0ZW0obW91bnRjbWQpOworfQorCisvKiB1bW91bnQgdGhlIGRlYnVnZnMgKi8KKworaW50IGRlYnVnZnNfdW1vdW50KHZvaWQpCit7CisJY2hhciB1bW91bnRjbWRbMTI4XTsKKwlpbnQgcmV0OworCisJLyogaWYgaXQgd2FzIGFscmVhZHkgbW91bnRlZCwgbGVhdmUgaXQgKi8KKwlpZiAoZGVidWdmc19wcmVtb3VudGVkKQorCQlyZXR1cm4gMDsKKworCS8qIG1ha2Ugc3VyZSBpdCdzIGEgdmFsaWQgbW91bnQgcG9pbnQgKi8KKwlyZXQgPSBkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19tb3VudHBvaW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc25wcmludGYodW1vdW50Y21kLCBzaXplb2YodW1vdW50Y21kKSwKKwkJICIvYmluL3Vtb3VudCAlcyIsIGRlYnVnZnNfbW91bnRwb2ludCk7CisJcmV0dXJuIHN5c3RlbSh1bW91bnRjbWQpOworfQorCitpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY2hhciBwYXRoW01BWF9QQVRIKzFdOworCWludCByZXQsIGNvdW50OworCWludCBmZDsKKworCS8qIGNvbnN0cnVjdCB0aGUgcGF0aCAqLworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwgZGVidWdmc19tb3VudHBvaW50LCBlbnRyeSk7CisKKwkvKiB2ZXJpZnkgdGhhdCBpdCBleGlzdHMgKi8KKwlyZXQgPSBkZWJ1Z2ZzX3ZhbGlkX2VudHJ5KHBhdGgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBnZXQgaG93IG1hbnkgY2hhcnMgd2UncmUgZ29pbmcgdG8gd3JpdGUgKi8KKwljb3VudCA9IHN0cmxlbih2YWx1ZSk7CisKKwkvKiBvcGVuIHRoZSBkZWJ1Z2ZzIGVudHJ5ICovCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJLyogd3JpdGUgaXQgKi8KKwkJcmV0ID0gd3JpdGUoZmQsIHZhbHVlLCBjb3VudCk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKHJldCA9PSBFQUdBSU4pCisJCQkJY29udGludWU7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gLWVycm5vOworCQl9CisJCWNvdW50IC09IHJldDsKKwl9CisKKwkvKiBjbG9zZSBpdCAqLworCWNsb3NlKGZkKTsKKworCS8qIHJldHVybiBzdWNjZXNzICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWFkIGEgZGVidWdmcyBlbnRyeQorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHJlYWQgb3IgYSBuZWdhdGl2ZSBlcnJubworICovCitpbnQgZGVidWdmc19yZWFkKGNvbnN0IGNoYXIgKmVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWNoYXIgcGF0aFtNQVhfUEFUSCsxXTsKKwlpbnQgcmV0OworCWludCBmZDsKKworCS8qIGNvbnN0cnVjdCB0aGUgcGF0aCAqLworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwgZGVidWdmc19tb3VudHBvaW50LCBlbnRyeSk7CisKKwkvKiB2ZXJpZnkgdGhhdCBpdCBleGlzdHMgKi8KKwlyZXQgPSBkZWJ1Z2ZzX3ZhbGlkX2VudHJ5KHBhdGgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBvcGVuIHRoZSBkZWJ1Z2ZzIGVudHJ5ICovCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJZG8geworCQkvKiByZWFkIGl0ICovCisJCXJldCA9IHJlYWQoZmQsIGJ1ZmZlciwgc2l6ZSk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIEVPRjsKKwkJfQorCX0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKTsKKworCS8qIGNsb3NlIGl0ICovCisJY2xvc2UoZmQpOworCisJLyogbWFrZSAqc3VyZSogdGhlcmUncyBhIG51bGwgY2hhcmFjdGVyIGF0IHRoZSBlbmQgKi8KKwlidWZmZXJbcmV0XSA9ICdcMCc7CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFycyByZWFkICovCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmggYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDE0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19ERUJVR0ZTX0hfXworI2RlZmluZSBfX0RFQlVHRlNfSF9fCisKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKworI2lmbmRlZiBNQVhfUEFUSAorIyBkZWZpbmUgTUFYX1BBVEggMjU2CisjZW5kaWYKKworI2lmbmRlZiBTVFIKKyMgZGVmaW5lIF9TVFIoeCkgI3gKKyMgZGVmaW5lIFNUUih4KSBfU1RSKHgpCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmRlYnVnZnNfZmluZF9tb3VudHBvaW50KHZvaWQpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoY29uc3QgY2hhciAqZGVidWdmcyk7CitleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfZW50cnkoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IGRlYnVnZnNfbW91bnQoY29uc3QgY2hhciAqbW91bnRwb2ludCk7CitleHRlcm4gaW50IGRlYnVnZnNfdW1vdW50KHZvaWQpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3dyaXRlKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gaW50IGRlYnVnZnNfcmVhZChjb25zdCBjaGFyICplbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBkZWJ1Z2ZzX2ZvcmNlX2NsZWFudXAodm9pZCk7CitleHRlcm4gaW50IGRlYnVnZnNfbWFrZV9wYXRoKGNvbnN0IGNoYXIgKmVsZW1lbnQsIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworCisjZW5kaWYgLyogX19ERUJVR0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGFlN2UzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKworc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKKwkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQpKQoreworCWV2ZW50X3QgZXY7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJY2hhciBiZltCVUZTSVpdOworCUZJTEUgKmZwOworCXNpemVfdCBzaXplID0gMDsKKwlESVIgKnRhc2tzOworCXN0cnVjdCBkaXJlbnQgZGlyZW50LCAqbmV4dDsKKwlwaWRfdCB0Z2lkID0gMDsKKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiL3Byb2MvJWQvc3RhdHVzIiwgcGlkKTsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKGZwID09IE5VTEwpIHsKK291dF9yYWNlOgorCQkvKgorCQkgKiBXZSByYWNlZCB3aXRoIGEgdGFzayBleGl0aW5nIC0ganVzdCByZXR1cm46CisJCSAqLworCQlwcl9kZWJ1ZygiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJmV2LmNvbW0sIDAsIHNpemVvZihldi5jb21tKSk7CisJd2hpbGUgKCFldi5jb21tLmNvbW1bMF0gfHwgIWV2LmNvbW0ucGlkKSB7CisJCWlmIChmZ2V0cyhiZiwgc2l6ZW9mKGJmKSwgZnApID09IE5VTEwpCisJCQlnb3RvIG91dF9mYWlsdXJlOworCisJCWlmIChtZW1jbXAoYmYsICJOYW1lOiIsIDUpID09IDApIHsKKwkJCWNoYXIgKm5hbWUgPSBiZiArIDU7CisJCQl3aGlsZSAoKm5hbWUgJiYgaXNzcGFjZSgqbmFtZSkpCisJCQkJKytuYW1lOworCQkJc2l6ZSA9IHN0cmxlbihuYW1lKSAtIDE7CisJCQltZW1jcHkoZXYuY29tbS5jb21tLCBuYW1lLCBzaXplKyspOworCQl9IGVsc2UgaWYgKG1lbWNtcChiZiwgIlRnaWQ6IiwgNSkgPT0gMCkgeworCQkJY2hhciAqdGdpZHMgPSBiZiArIDU7CisJCQl3aGlsZSAoKnRnaWRzICYmIGlzc3BhY2UoKnRnaWRzKSkKKwkJCQkrK3RnaWRzOworCQkJdGdpZCA9IGV2LmNvbW0ucGlkID0gYXRvaSh0Z2lkcyk7CisJCX0KKwl9CisKKwlldi5jb21tLmhlYWRlci50eXBlID0gUEVSRl9SRUNPUkRfQ09NTTsKKwlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOworCWV2LmNvbW0uaGVhZGVyLnNpemUgPSBzaXplb2YoZXYuY29tbSkgLSAoc2l6ZW9mKGV2LmNvbW0uY29tbSkgLSBzaXplKTsKKworCWlmICghZnVsbCkgeworCQlldi5jb21tLnRpZCA9IHBpZDsKKworCQlwcm9jZXNzKCZldik7CisJCWdvdG8gb3V0X2ZjbG9zZTsKKwl9CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIi9wcm9jLyVkL3Rhc2siLCBwaWQpOworCisJdGFza3MgPSBvcGVuZGlyKGZpbGVuYW1lKTsKKwlpZiAodGFza3MgPT0gTlVMTCkKKwkJZ290byBvdXRfcmFjZTsKKworCXdoaWxlICghcmVhZGRpcl9yKHRhc2tzLCAmZGlyZW50LCAmbmV4dCkgJiYgbmV4dCkgeworCQljaGFyICplbmQ7CisJCXBpZCA9IHN0cnRvbChkaXJlbnQuZF9uYW1lLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kKQorCQkJY29udGludWU7CisKKwkJZXYuY29tbS50aWQgPSBwaWQ7CisKKwkJcHJvY2VzcygmZXYpOworCX0KKwljbG9zZWRpcih0YXNrcyk7CisKK291dF9mY2xvc2U6CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gdGdpZDsKKworb3V0X2ZhaWx1cmU6CisJcHJfd2FybmluZygiY291bGRuJ3QgZ2V0IENPTU0gYW5kIHBnaWQsIG1hbGZvcm1lZCAlc1xuIiwgZmlsZW5hbWUpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhwaWRfdCBwaWQsIHBpZF90IHRnaWQsCisJCQkJCSBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpCit7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJRklMRSAqZnA7CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIi9wcm9jLyVkL21hcHMiLCBwaWQpOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQkvKgorCQkgKiBXZSByYWNlZCB3aXRoIGEgdGFzayBleGl0aW5nIC0ganVzdCByZXR1cm46CisJCSAqLworCQlwcl9kZWJ1ZygiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJY2hhciBiZltCVUZTSVpdLCAqcGJmID0gYmY7CisJCWV2ZW50X3QgZXYgPSB7CisJCQkuaGVhZGVyID0geyAudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAgfSwKKwkJfTsKKwkJaW50IG47CisJCXNpemVfdCBzaXplOworCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJLyogMDA0MDAwMDAtMDA0MGMwMDAgci14cCAwMDAwMDAwMCBmZDowMSA0MTAzOCAgL2Jpbi9jYXQgKi8KKwkJbiA9IGhleDJ1NjQocGJmLCAmZXYubW1hcC5zdGFydCk7CisJCWlmIChuIDwgMCkKKwkJCWNvbnRpbnVlOworCQlwYmYgKz0gbiArIDE7CisJCW4gPSBoZXgydTY0KHBiZiwgJmV2Lm1tYXAubGVuKTsKKwkJaWYgKG4gPCAwKQorCQkJY29udGludWU7CisJCXBiZiArPSBuICsgMzsKKwkJaWYgKCpwYmYgPT0gJ3gnKSB7IC8qIHZtX2V4ZWMgKi8KKwkJCWNoYXIgKmV4ZWNuYW1lID0gc3RyY2hyKGJmLCAnLycpOworCisJCQkvKiBDYXRjaCBWRFNPICovCisJCQlpZiAoZXhlY25hbWUgPT0gTlVMTCkKKwkJCQlleGVjbmFtZSA9IHN0cnN0cihiZiwgIlt2ZHNvXSIpOworCisJCQlpZiAoZXhlY25hbWUgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJc2l6ZSA9IHN0cmxlbihleGVjbmFtZSk7CisJCQlleGVjbmFtZVtzaXplIC0gMV0gPSAnXDAnOyAvKiBSZW1vdmUgXG4gKi8KKwkJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBleGVjbmFtZSwgc2l6ZSk7CisJCQlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOworCQkJZXYubW1hcC5sZW4gLT0gZXYubW1hcC5zdGFydDsKKwkJCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KKwkJCQkJICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCQlldi5tbWFwLnBpZCA9IHRnaWQ7CisJCQlldi5tbWFwLnRpZCA9IHBpZDsKKworCQkJcHJvY2VzcygmZXYpOworCQl9CisJfQorCisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSkKK3sKKwlwaWRfdCB0Z2lkID0gZXZlbnRfX3N5bnRoZXNpemVfY29tbShwaWQsIDEsIHByb2Nlc3MpOworCWlmICh0Z2lkID09IC0xKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGV2ZW50X19zeW50aGVzaXplX21tYXBfZXZlbnRzKHBpZCwgdGdpZCwgcHJvY2Vzcyk7Cit9CisKK3ZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpCit7CisJRElSICpwcm9jOworCXN0cnVjdCBkaXJlbnQgZGlyZW50LCAqbmV4dDsKKworCXByb2MgPSBvcGVuZGlyKCIvcHJvYyIpOworCisJd2hpbGUgKCFyZWFkZGlyX3IocHJvYywgJmRpcmVudCwgJm5leHQpICYmIG5leHQpIHsKKwkJY2hhciAqZW5kOworCQlwaWRfdCBwaWQgPSBzdHJ0b2woZGlyZW50LmRfbmFtZSwgJmVuZCwgMTApOworCisJCWlmICgqZW5kKSAvKiBvbmx5IGludGVyZXN0ZWQgaW4gcHJvcGVyIG51bWVyaWNhbCBkaXJlbnRzICovCisJCQljb250aW51ZTsKKworCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLCBwcm9jZXNzKTsKKwl9CisKKwljbG9zZWRpcihwcm9jKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggYzJlNjJiZS4uMzRjNmZjYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTYxLDYgKzYxLDEzIEBACiAJdTY0IGFycmF5W107CiB9OwogCisjZGVmaW5lIEJVSUxEX0lEX1NJWkUgMjAKKworc3RydWN0IGJ1aWxkX2lkX2V2ZW50IHsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOworCXU4CQkJIGJ1aWxkX2lkW0FMSUdOKEJVSUxEX0lEX1NJWkUsIHNpemVvZih1NjQpKV07CisJY2hhcgkJCSBmaWxlbmFtZVtdOworfTsKIAogdHlwZWRlZiB1bmlvbiBldmVudF91bmlvbiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKQEAgLTgyLDYgKzg5LDcgQEAKIAl1NjQJCQllbmQ7CiAJdTY0CQkJcGdvZmY7CiAJdTY0CQkJKCptYXBfaXApKHN0cnVjdCBtYXAgKiwgdTY0KTsKKwl1NjQJCQkoKnVubWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7CiAJc3RydWN0IGRzbwkJKmRzbzsKIH07CiAKQEAgLTkwLDE0ICs5OCwyOSBAQAogCXJldHVybiBpcCAtIG1hcC0+c3RhcnQgKyBtYXAtPnBnb2ZmOwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCB2ZHNvX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwIF9fdXNlZCwgdTY0IGlwKQorc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCiB7CiAJcmV0dXJuIGlwOwogfQogCitzdHJ1Y3Qgc3ltYm9sOworCit0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBwZ29mZiwKKwkgICAgICAgc3RydWN0IGRzbyAqZHNvKTsKIHN0cnVjdCBtYXAgKm1hcF9fbmV3KHN0cnVjdCBtbWFwX2V2ZW50ICpldmVudCwgY2hhciAqY3dkLCBpbnQgY3dkbGVuKTsKIHN0cnVjdCBtYXAgKm1hcF9fY2xvbmUoc3RydWN0IG1hcCAqc2VsZik7CiBpbnQgbWFwX19vdmVybGFwKHN0cnVjdCBtYXAgKmwsIHN0cnVjdCBtYXAgKnIpOwogc2l6ZV90IG1hcF9fZnByaW50ZihzdHJ1Y3QgbWFwICpzZWxmLCBGSUxFICpmcCk7CitzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXAgKnNlbGYsIHU2NCBpcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CisKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpOwordm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSk7CiAKICNlbmRpZiAvKiBfX1BFUkZfUkVDT1JEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5YWFlMzYwLi5kNWM4MWViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0yLDExICsyLDE1IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgogI2luY2x1ZGUgInRyYWNlLWV2ZW50LmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAiZGF0YV9tYXAuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCiAvKgogICogQ3JlYXRlIG5ldyBwZXJmLmRhdGEgaGVhZGVyIGF0dHJpYnV0ZToKQEAgLTE1LDMyICsxOSw0MyBAQAogewogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwogCi0JaWYgKCFzZWxmKQotCQlkaWUoIm5vbWVtIik7Ci0KLQlzZWxmLT5hdHRyID0gKmF0dHI7Ci0Jc2VsZi0+aWRzID0gMDsKLQlzZWxmLT5zaXplID0gMTsKLQlzZWxmLT5pZCA9IG1hbGxvYyhzaXplb2YodTY0KSk7Ci0KLQlpZiAoIXNlbGYtPmlkKQotCQlkaWUoIm5vbWVtIik7CisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5hdHRyID0gKmF0dHI7CisJCXNlbGYtPmlkcyAgPSAwOworCQlzZWxmLT5zaXplID0gMTsKKwkJc2VsZi0+aWQgICA9IG1hbGxvYyhzaXplb2YodTY0KSk7CisJCWlmIChzZWxmLT5pZCA9PSBOVUxMKSB7CisJCQlmcmVlKHNlbGYpOworCQkJc2VsZiA9IE5VTEw7CisJCX0KKwl9CiAKIAlyZXR1cm4gc2VsZjsKIH0KIAotdm9pZCBwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYsIHU2NCBpZCkKK3ZvaWQgcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmKQoreworCWZyZWUoc2VsZi0+aWQpOworCWZyZWUoc2VsZik7Cit9CisKK2ludCBwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYsIHU2NCBpZCkKIHsKIAlpbnQgcG9zID0gc2VsZi0+aWRzOwogCiAJc2VsZi0+aWRzKys7CiAJaWYgKHNlbGYtPmlkcyA+IHNlbGYtPnNpemUpIHsKLQkJc2VsZi0+c2l6ZSAqPSAyOwotCQlzZWxmLT5pZCA9IHJlYWxsb2Moc2VsZi0+aWQsIHNlbGYtPnNpemUgKiBzaXplb2YodTY0KSk7Ci0JCWlmICghc2VsZi0+aWQpCi0JCQlkaWUoIm5vbWVtIik7CisJCWludCBuc2l6ZSA9IHNlbGYtPnNpemUgKiAyOworCQl1NjQgKm5pZCA9IHJlYWxsb2Moc2VsZi0+aWQsIG5zaXplICogc2l6ZW9mKHU2NCkpOworCisJCWlmIChuaWQgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQlzZWxmLT5zaXplID0gbnNpemU7CisJCXNlbGYtPmlkID0gbmlkOwogCX0KIAlzZWxmLT5pZFtwb3NdID0gaWQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00OCw0NCArNjMsNTIgQEAKICAqLwogc3RydWN0IHBlcmZfaGVhZGVyICpwZXJmX2hlYWRlcl9fbmV3KHZvaWQpCiB7Ci0Jc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCXN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiA9IGNhbGxvYyhzaXplb2YoKnNlbGYpLCAxKTsKIAotCWlmICghc2VsZikKLQkJZGllKCJub21lbSIpOworCWlmIChzZWxmICE9IE5VTEwpIHsKKwkJc2VsZi0+c2l6ZSA9IDE7CisJCXNlbGYtPmF0dHIgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOwogCi0Jc2VsZi0+ZnJvemVuID0gMDsKLQotCXNlbGYtPmF0dHJzID0gMDsKLQlzZWxmLT5zaXplID0gMTsKLQlzZWxmLT5hdHRyID0gbWFsbG9jKHNpemVvZih2b2lkICopKTsKLQotCWlmICghc2VsZi0+YXR0cikKLQkJZGllKCJub21lbSIpOwotCi0Jc2VsZi0+ZGF0YV9vZmZzZXQgPSAwOwotCXNlbGYtPmRhdGFfc2l6ZSA9IDA7Ci0Jc2VsZi0+dHJhY2VfaW5mb19vZmZzZXQgPSAwOwotCXNlbGYtPnRyYWNlX2luZm9fc2l6ZSA9IDA7CisJCWlmIChzZWxmLT5hdHRyID09IE5VTEwpIHsKKwkJCWZyZWUoc2VsZik7CisJCQlzZWxmID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVybiBzZWxmOwogfQogCi12b2lkIHBlcmZfaGVhZGVyX19hZGRfYXR0cihzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCi0JCQkgICBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqYXR0cikKK3ZvaWQgcGVyZl9oZWFkZXJfX2RlbGV0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYpCiB7Ci0JaW50IHBvcyA9IHNlbGYtPmF0dHJzOworCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPmF0dHJzOyArK2kpCisJCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShzZWxmLT5hdHRyW2ldKTsKKworCWZyZWUoc2VsZi0+YXR0cik7CisJZnJlZShzZWxmKTsKK30KKworaW50IHBlcmZfaGVhZGVyX19hZGRfYXR0cihzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkgIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyKQorewogCWlmIChzZWxmLT5mcm96ZW4pCi0JCWRpZSgiZnJvemVuIik7CisJCXJldHVybiAtMTsKIAotCXNlbGYtPmF0dHJzKys7Ci0JaWYgKHNlbGYtPmF0dHJzID4gc2VsZi0+c2l6ZSkgewotCQlzZWxmLT5zaXplICo9IDI7Ci0JCXNlbGYtPmF0dHIgPSByZWFsbG9jKHNlbGYtPmF0dHIsIHNlbGYtPnNpemUgKiBzaXplb2Yodm9pZCAqKSk7Ci0JCWlmICghc2VsZi0+YXR0cikKLQkJCWRpZSgibm9tZW0iKTsKKwlpZiAoc2VsZi0+YXR0cnMgPT0gc2VsZi0+c2l6ZSkgeworCQlpbnQgbnNpemUgPSBzZWxmLT5zaXplICogMjsKKwkJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKipuYXR0cjsKKworCQluYXR0ciA9IHJlYWxsb2Moc2VsZi0+YXR0ciwgbnNpemUgKiBzaXplb2Yodm9pZCAqKSk7CisJCWlmIChuYXR0ciA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCXNlbGYtPnNpemUgPSBuc2l6ZTsKKwkJc2VsZi0+YXR0ciA9IG5hdHRyOwogCX0KLQlzZWxmLT5hdHRyW3Bvc10gPSBhdHRyOworCisJc2VsZi0+YXR0cltzZWxmLT5hdHRycysrXSA9IGF0dHI7CisJcmV0dXJuIDA7CiB9CiAKICNkZWZpbmUgTUFYX0VWRU5UX05BTUUgNjQKQEAgLTEwMSw3ICsxMjQsNyBAQAogdm9pZCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaWYgKHN0cmxlbihuYW1lKSA+IE1BWF9FVkVOVF9OQU1FKQotCQlwcmludGYoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKKwkJcHJfd2FybmluZygiRXZlbnQgJXMgd2lsbCBiZSB0cnVuY2F0ZWRcbiIsIG5hbWUpOwogCiAJaWYgKCFldmVudHMpIHsKIAkJZXZlbnRzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKSk7CkBAIC0xMzIsNTIgKzE1NSwxMzUgQEAKIAogI2RlZmluZSBQRVJGX01BR0lDCSgqKHU2NCAqKV9fcGVyZl9tYWdpYykKIAotc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uIHsKLQl1NjQgb2Zmc2V0OwotCXU2NCBzaXplOwotfTsKLQogc3RydWN0IHBlcmZfZmlsZV9hdHRyIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyCWF0dHI7CiAJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWlkczsKIH07CiAKLXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIHsKLQl1NjQJCQkJbWFnaWM7Ci0JdTY0CQkJCXNpemU7Ci0JdTY0CQkJCWF0dHJfc2l6ZTsKLQlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JYXR0cnM7Ci0Jc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWRhdGE7Ci0Jc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWV2ZW50X3R5cGVzOwotCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbgl0cmFjZV9pbmZvOwotfTsKLQotc3RhdGljIGludCB0cmFjZV9pbmZvOwotCi12b2lkIHBlcmZfaGVhZGVyX19zZXRfdHJhY2VfaW5mbyh2b2lkKQordm9pZCBwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmVhdCkKIHsKLQl0cmFjZV9pbmZvID0gMTsKKwlzZXRfYml0KGZlYXQsIHNlbGYtPmFkZHNfZmVhdHVyZXMpOwogfQogCi1zdGF0aWMgdm9pZCBkb193cml0ZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitib29sIHBlcmZfaGVhZGVyX19oYXNfZmVhdChjb25zdCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZWF0KQoreworCXJldHVybiB0ZXN0X2JpdChmZWF0LCBzZWxmLT5hZGRzX2ZlYXR1cmVzKTsKK30KKworc3RhdGljIGludCBkb193cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJd2hpbGUgKHNpemUpIHsKIAkJaW50IHJldCA9IHdyaXRlKGZkLCBidWYsIHNpemUpOwogCiAJCWlmIChyZXQgPCAwKQotCQkJZGllKCJmYWlsZWQgdG8gd3JpdGUiKTsKKwkJCXJldHVybiAtZXJybm87CiAKIAkJc2l6ZSAtPSByZXQ7CiAJCWJ1ZiArPSByZXQ7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcGVyZl9oZWFkZXJfX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQorc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHNvICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmRzb3MsIG5vZGUpIHsKKwkJaW50IGVycjsKKwkJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGI7CisJCXNpemVfdCBsZW47CisKKwkJaWYgKCFwb3MtPmhhc19idWlsZF9pZCkKKwkJCWNvbnRpbnVlOworCQlsZW4gPSBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxOworCQlsZW4gPSBBTElHTihsZW4sIDY0KTsKKwkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOworCQltZW1jcHkoJmIuYnVpbGRfaWQsIHBvcy0+YnVpbGRfaWQsIHNpemVvZihwb3MtPmJ1aWxkX2lkKSk7CisJCWIuaGVhZGVyLnNpemUgPSBzaXplb2YoYikgKyBsZW47CisJCWVyciA9IGRvX3dyaXRlKGZkLCAmYiwgc2l6ZW9mKGIpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBkb193cml0ZShmZCwgcG9zLT5sb25nX25hbWUsIGxlbik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX2hlYWRlcl9fYWRkc193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCkKK3sKKwlpbnQgbnJfc2VjdGlvbnM7CisJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpmZWF0X3NlYzsKKwlpbnQgc2VjX3NpemU7CisJdTY0IHNlY19zdGFydDsKKwlpbnQgaWR4ID0gMCwgZXJyOworCisJaWYgKGRzb3NfX3JlYWRfYnVpbGRfaWRzKCkpCisJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChzZWxmLCBIRUFERVJfQlVJTERfSUQpOworCisJbnJfc2VjdGlvbnMgPSBiaXRtYXBfd2VpZ2h0KHNlbGYtPmFkZHNfZmVhdHVyZXMsIEhFQURFUl9GRUFUX0JJVFMpOworCWlmICghbnJfc2VjdGlvbnMpCisJCXJldHVybiAwOworCisJZmVhdF9zZWMgPSBjYWxsb2Moc2l6ZW9mKCpmZWF0X3NlYyksIG5yX3NlY3Rpb25zKTsKKwlpZiAoZmVhdF9zZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZWNfc2l6ZSA9IHNpemVvZigqZmVhdF9zZWMpICogbnJfc2VjdGlvbnM7CisKKwlzZWNfc3RhcnQgPSBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZTsKKwlsc2VlayhmZCwgc2VjX3N0YXJ0ICsgc2VjX3NpemUsIFNFRUtfU0VUKTsKKworCWlmIChwZXJmX2hlYWRlcl9faGFzX2ZlYXQoc2VsZiwgSEVBREVSX1RSQUNFX0lORk8pKSB7CisJCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqdHJhY2Vfc2VjOworCisJCXRyYWNlX3NlYyA9ICZmZWF0X3NlY1tpZHgrK107CisKKwkJLyogV3JpdGUgdHJhY2UgaW5mbyAqLworCQl0cmFjZV9zZWMtPm9mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisJCXJlYWRfdHJhY2luZ19kYXRhKGZkLCBhdHRycywgbnJfY291bnRlcnMpOworCQl0cmFjZV9zZWMtPnNpemUgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpIC0gdHJhY2Vfc2VjLT5vZmZzZXQ7CisJfQorCisKKwlpZiAocGVyZl9oZWFkZXJfX2hhc19mZWF0KHNlbGYsIEhFQURFUl9CVUlMRF9JRCkpIHsKKwkJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpidWlsZGlkX3NlYzsKKworCQlidWlsZGlkX3NlYyA9ICZmZWF0X3NlY1tpZHgrK107CisKKwkJZHNvc19fbG9hZF9rZXJuZWwoKTsKKwkJLyoKKwkJICogUmVhZCB0aGUgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyB3aXRoIGl0cyBidWlsZF9pZHMKKwkJICovCisJCWRzb3NfX2xvYWRfbW9kdWxlcygpOworCisJCS8qIFdyaXRlIGJ1aWxkLWlkcyAqLworCQlidWlsZGlkX3NlYy0+b2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKwkJZXJyID0gZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShmZCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIGJ1aWxkaWQgdGFibGVcbiIpOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLSBidWlsZGlkX3NlYy0+b2Zmc2V0OworCX0KKworCWxzZWVrKGZkLCBzZWNfc3RhcnQsIFNFRUtfU0VUKTsKKwllcnIgPSBkb193cml0ZShmZCwgZmVhdF9zZWMsIHNlY19zaXplKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBmZWF0dXJlIHNlY3Rpb25cbiIpOworb3V0X2ZyZWU6CisJZnJlZShmZWF0X3NlYyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfaGVhZGVyX193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwgYm9vbCBhdF9leGl0KQogewogCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIGZfaGVhZGVyOwogCXN0cnVjdCBwZXJmX2ZpbGVfYXR0ciAgIGZfYXR0cjsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0cgkqYXR0cjsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCiAJbHNlZWsoZmQsIHNpemVvZihmX2hlYWRlciksIFNFRUtfU0VUKTsKIApAQCAtMTg2LDcgKzI5MiwxMSBAQAogCQlhdHRyID0gc2VsZi0+YXR0cltpXTsKIAogCQlhdHRyLT5pZF9vZmZzZXQgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwotCQlkb193cml0ZShmZCwgYXR0ci0+aWQsIGF0dHItPmlkcyAqIHNpemVvZih1NjQpKTsKKwkJZXJyID0gZG9fd3JpdGUoZmQsIGF0dHItPmlkLCBhdHRyLT5pZHMgKiBzaXplb2YodTY0KSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIHBlcmYgaGVhZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIApAQCAtMjAyLDM0ICszMTIsMzEgQEAKIAkJCQkuc2l6ZSAgID0gYXR0ci0+aWRzICogc2l6ZW9mKHU2NCksCiAJCQl9CiAJCX07Ci0JCWRvX3dyaXRlKGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSk7CisJCWVyciA9IGRvX3dyaXRlKGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIHBlcmYgaGVhZGVyIGF0dHJpYnV0ZVxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJc2VsZi0+ZXZlbnRfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIAlzZWxmLT5ldmVudF9zaXplID0gZXZlbnRfY291bnQgKiBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSk7Ci0JaWYgKGV2ZW50cykKLQkJZG9fd3JpdGUoZmQsIGV2ZW50cywgc2VsZi0+ZXZlbnRfc2l6ZSk7Ci0KLQlpZiAodHJhY2VfaW5mbykgewotCQlzdGF0aWMgaW50IHRyYWNlX2luZm9fd3JpdHRlbjsKLQotCQkvKgotCQkgKiBXcml0ZSBpdCBvbmx5IG9uY2UKLQkJICovCi0JCWlmICghdHJhY2VfaW5mb193cml0dGVuKSB7Ci0JCQlzZWxmLT50cmFjZV9pbmZvX29mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7Ci0JCQlyZWFkX3RyYWNpbmdfZGF0YShmZCwgYXR0cnMsIG5yX2NvdW50ZXJzKTsKLQkJCXNlbGYtPnRyYWNlX2luZm9fc2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLQotCQkJCQkJc2VsZi0+dHJhY2VfaW5mb19vZmZzZXQ7Ci0JCQl0cmFjZV9pbmZvX3dyaXR0ZW4gPSAxOwotCQl9IGVsc2UgewotCQkJbHNlZWsoZmQsIHNlbGYtPnRyYWNlX2luZm9fb2Zmc2V0ICsKLQkJCQlzZWxmLT50cmFjZV9pbmZvX3NpemUsIFNFRUtfU0VUKTsKKwlpZiAoZXZlbnRzKSB7CisJCWVyciA9IGRvX3dyaXRlKGZkLCBldmVudHMsIHNlbGYtPmV2ZW50X3NpemUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBwZXJmIGhlYWRlciBldmVudHNcbiIpOworCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAogCXNlbGYtPmRhdGFfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIAorCWlmIChhdF9leGl0KSB7CisJCWVyciA9IHBlcmZfaGVhZGVyX19hZGRzX3dyaXRlKHNlbGYsIGZkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWZfaGVhZGVyID0gKHN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyKXsKIAkJLm1hZ2ljCSAgID0gUEVSRl9NQUdJQywKIAkJLnNpemUJICAgPSBzaXplb2YoZl9oZWFkZXIpLApAQCAtMjQ2LDE3ICszNTMsMjAgQEAKIAkJCS5vZmZzZXQgPSBzZWxmLT5ldmVudF9vZmZzZXQsCiAJCQkuc2l6ZQk9IHNlbGYtPmV2ZW50X3NpemUsCiAJCX0sCi0JCS50cmFjZV9pbmZvID0gewotCQkJLm9mZnNldCA9IHNlbGYtPnRyYWNlX2luZm9fb2Zmc2V0LAotCQkJLnNpemUgPSBzZWxmLT50cmFjZV9pbmZvX3NpemUsCi0JCX0sCiAJfTsKIAorCW1lbWNweSgmZl9oZWFkZXIuYWRkc19mZWF0dXJlcywgJnNlbGYtPmFkZHNfZmVhdHVyZXMsIHNpemVvZihzZWxmLT5hZGRzX2ZlYXR1cmVzKSk7CisKIAlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCWRvX3dyaXRlKGZkLCAmZl9oZWFkZXIsIHNpemVvZihmX2hlYWRlcikpOworCWVyciA9IGRvX3dyaXRlKGZkLCAmZl9oZWFkZXIsIHNpemVvZihmX2hlYWRlcikpOworCWlmIChlcnIgPCAwKSB7CisJCXByX2RlYnVnKCJmYWlsZWQgdG8gd3JpdGUgcGVyZiBoZWFkZXJcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAlsc2VlayhmZCwgc2VsZi0+ZGF0YV9vZmZzZXQgKyBzZWxmLT5kYXRhX3NpemUsIFNFRUtfU0VUKTsKIAogCXNlbGYtPmZyb3plbiA9IDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQpAQCAtMjc0LDI5ICszODQsMTEwIEBACiAJfQogfQogCi1zdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19yZWFkKGludCBmZCkKK2ludCBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwKKwkJCQkgIGludCAoKnByb2Nlc3MpKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKKwkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSkKIHsKLQlzdHJ1Y3QgcGVyZl9oZWFkZXIJKnNlbGYgPSBwZXJmX2hlYWRlcl9fbmV3KCk7CisJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpmZWF0X3NlYzsKKwlpbnQgbnJfc2VjdGlvbnM7CisJaW50IHNlY19zaXplOworCWludCBpZHggPSAwOworCWludCBlcnIgPSAwLCBmZWF0ID0gMTsKKworCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKKwlpZiAoIW5yX3NlY3Rpb25zKQorCQlyZXR1cm4gMDsKKworCWZlYXRfc2VjID0gY2FsbG9jKHNpemVvZigqZmVhdF9zZWMpLCBucl9zZWN0aW9ucyk7CisJaWYgKCFmZWF0X3NlYykKKwkJcmV0dXJuIC0xOworCisJc2VjX3NpemUgPSBzaXplb2YoKmZlYXRfc2VjKSAqIG5yX3NlY3Rpb25zOworCisJbHNlZWsoZmQsIHNlbGYtPmRhdGFfb2Zmc2V0ICsgc2VsZi0+ZGF0YV9zaXplLCBTRUVLX1NFVCk7CisKKwlkb19yZWFkKGZkLCBmZWF0X3NlYywgc2VjX3NpemUpOworCisJd2hpbGUgKGlkeCA8IG5yX3NlY3Rpb25zICYmIGZlYXQgPCBIRUFERVJfTEFTVF9GRUFUVVJFKSB7CisJCWlmIChwZXJmX2hlYWRlcl9faGFzX2ZlYXQoc2VsZiwgZmVhdCkpIHsKKwkJCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VjID0gJmZlYXRfc2VjW2lkeCsrXTsKKworCQkJZXJyID0gcHJvY2VzcyhzZWMsIGZlYXQsIGZkKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWJyZWFrOworCQl9CisJCSsrZmVhdDsKKwl9CisKKwlmcmVlKGZlYXRfc2VjKTsKKwlyZXR1cm4gZXJyOworfTsKKworaW50IHBlcmZfZmlsZV9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLCBpbnQgZmQpCit7CisJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKKwlkb19yZWFkKGZkLCBzZWxmLCBzaXplb2YoKnNlbGYpKTsKKworCWlmIChzZWxmLT5tYWdpYyAgICAgIT0gUEVSRl9NQUdJQyB8fAorCSAgICBzZWxmLT5hdHRyX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBwZXJmX2ZpbGVfYXR0cikpCisJCXJldHVybiAtMTsKKworCWlmIChzZWxmLT5zaXplICE9IHNpemVvZigqc2VsZikpIHsKKwkJLyogU3VwcG9ydCB0aGUgcHJldmlvdXMgZm9ybWF0ICovCisJCWlmIChzZWxmLT5zaXplID09IG9mZnNldG9mKHR5cGVvZigqc2VsZiksIGFkZHNfZmVhdHVyZXMpKQorCQkJYml0bWFwX3plcm8oc2VsZi0+YWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkoJnBoLT5hZGRzX2ZlYXR1cmVzLCAmc2VsZi0+YWRkc19mZWF0dXJlcywKKwkgICAgICAgc2l6ZW9mKHNlbGYtPmFkZHNfZmVhdHVyZXMpKTsKKworCXBoLT5ldmVudF9vZmZzZXQgPSBzZWxmLT5ldmVudF90eXBlcy5vZmZzZXQ7CisJcGgtPmV2ZW50X3NpemUJID0gc2VsZi0+ZXZlbnRfdHlwZXMuc2l6ZTsKKwlwaC0+ZGF0YV9vZmZzZXQJID0gc2VsZi0+ZGF0YS5vZmZzZXQ7CisJcGgtPmRhdGFfc2l6ZQkgPSBzZWxmLT5kYXRhLnNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3Moc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCSAgICAgIGludCBmZWF0LCBpbnQgZmQpCit7CisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJcHJfZGVidWcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBmZWF0dXJlICVkLCAiCisJCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPm9mZnNldCwgZmVhdCk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoZmVhdCkgeworCWNhc2UgSEVBREVSX1RSQUNFX0lORk86CisJCXRyYWNlX3JlcG9ydChmZCk7CisJCWJyZWFrOworCisJY2FzZSBIRUFERVJfQlVJTERfSUQ6CisJCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoZmQsIHNlbGYtPm9mZnNldCwgc2VsZi0+c2l6ZSkpCisJCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHJlYWQgYnVpbGRpZHMsIGNvbnRpbnVpbmcuLi5cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygidW5rbm93biBmZWF0dXJlICVkLCBjb250aW51aW5nLi4uXG4iLCBmZWF0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBlcmZfaGVhZGVyX19yZWFkKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQorewogCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIGZfaGVhZGVyOwogCXN0cnVjdCBwZXJmX2ZpbGVfYXR0cglmX2F0dHI7CiAJdTY0CQkJZl9pZDsKLQogCWludCBucl9hdHRycywgbnJfaWRzLCBpLCBqOwogCi0JbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQlkb19yZWFkKGZkLCAmZl9oZWFkZXIsIHNpemVvZihmX2hlYWRlcikpOwotCi0JaWYgKGZfaGVhZGVyLm1hZ2ljCSE9IFBFUkZfTUFHSUMJCXx8Ci0JICAgIGZfaGVhZGVyLmF0dHJfc2l6ZQkhPSBzaXplb2YoZl9hdHRyKSkKLQkJZGllKCJpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQiKTsKLQotCWlmIChmX2hlYWRlci5zaXplICE9IHNpemVvZihmX2hlYWRlcikpIHsKLQkJLyogU3VwcG9ydCB0aGUgcHJldmlvdXMgZm9ybWF0ICovCi0JCWlmIChmX2hlYWRlci5zaXplID09IG9mZnNldG9mKHR5cGVvZihmX2hlYWRlciksIHRyYWNlX2luZm8pKQotCQkJZl9oZWFkZXIudHJhY2VfaW5mby5zaXplID0gMDsKLQkJZWxzZQotCQkJZGllKCJpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQiKTsKKwlpZiAocGVyZl9maWxlX2hlYWRlcl9fcmVhZCgmZl9oZWFkZXIsIHNlbGYsIGZkKSA8IDApIHsKKwkJcHJfZGVidWcoImluY29tcGF0aWJsZSBmaWxlIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCW5yX2F0dHJzID0gZl9oZWFkZXIuYXR0cnMuc2l6ZSAvIHNpemVvZihmX2F0dHIpOwogCWxzZWVrKGZkLCBmX2hlYWRlci5hdHRycy5vZmZzZXQsIFNFRUtfU0VUKTsKIApAQCAtMzA4LDYgKzQ5OSw4IEBACiAJCXRtcCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CiAKIAkJYXR0ciA9IHBlcmZfaGVhZGVyX2F0dHJfX25ldygmZl9hdHRyLmF0dHIpOworCQlpZiAoYXR0ciA9PSBOVUxMKQorCQkJIHJldHVybiAtRU5PTUVNOwogCiAJCW5yX2lkcyA9IGZfYXR0ci5pZHMuc2l6ZSAvIHNpemVvZih1NjQpOwogCQlsc2VlayhmZCwgZl9hdHRyLmlkcy5vZmZzZXQsIFNFRUtfU0VUKTsKQEAgLTMxNSw0MCArNTA4LDM0IEBACiAJCWZvciAoaiA9IDA7IGogPCBucl9pZHM7IGorKykgewogCQkJZG9fcmVhZChmZCwgJmZfaWQsIHNpemVvZihmX2lkKSk7CiAKLQkJCXBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChhdHRyLCBmX2lkKTsKKwkJCWlmIChwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoYXR0ciwgZl9pZCkgPCAwKSB7CisJCQkJcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKGF0dHIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQogCQl9Ci0JCXBlcmZfaGVhZGVyX19hZGRfYXR0cihzZWxmLCBhdHRyKTsKKwkJaWYgKHBlcmZfaGVhZGVyX19hZGRfYXR0cihzZWxmLCBhdHRyKSA8IDApIHsKKwkJCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShhdHRyKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKIAkJbHNlZWsoZmQsIHRtcCwgU0VFS19TRVQpOwogCX0KIAogCWlmIChmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKSB7CiAJCWxzZWVrKGZkLCBmX2hlYWRlci5ldmVudF90eXBlcy5vZmZzZXQsIFNFRUtfU0VUKTsKIAkJZXZlbnRzID0gbWFsbG9jKGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUpOwotCQlpZiAoIWV2ZW50cykKLQkJCWRpZSgibm9tZW0iKTsKKwkJaWYgKGV2ZW50cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCWRvX3JlYWQoZmQsIGV2ZW50cywgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CiAJCWV2ZW50X2NvdW50ID0gIGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUgLyBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSk7CiAJfQogCi0Jc2VsZi0+dHJhY2VfaW5mb19vZmZzZXQgPSBmX2hlYWRlci50cmFjZV9pbmZvLm9mZnNldDsKLQlzZWxmLT50cmFjZV9pbmZvX3NpemUgPSBmX2hlYWRlci50cmFjZV9pbmZvLnNpemU7Ci0KLQlpZiAoc2VsZi0+dHJhY2VfaW5mb19zaXplKSB7Ci0JCWxzZWVrKGZkLCBzZWxmLT50cmFjZV9pbmZvX29mZnNldCwgU0VFS19TRVQpOwotCQl0cmFjZV9yZXBvcnQoZmQpOwotCX0KLQotCXNlbGYtPmV2ZW50X29mZnNldCA9IGZfaGVhZGVyLmV2ZW50X3R5cGVzLm9mZnNldDsKLQlzZWxmLT5ldmVudF9zaXplICAgPSBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplOwotCi0Jc2VsZi0+ZGF0YV9vZmZzZXQgPSBmX2hlYWRlci5kYXRhLm9mZnNldDsKLQlzZWxmLT5kYXRhX3NpemUgICA9IGZfaGVhZGVyLmRhdGEuc2l6ZTsKKwlwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzZWxmLCBmZCwgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3MpOwogCiAJbHNlZWsoZmQsIHNlbGYtPmRhdGFfb2Zmc2V0LCBTRUVLX1NFVCk7CiAKIAlzZWxmLT5mcm96ZW4gPSAxOwotCi0JcmV0dXJuIHNlbGY7CisJcmV0dXJuIDA7CiB9CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggMzBhZWU1MS4uZDFkYmUyYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtMyw4ICszLDExIEBACiAKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorCiBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCWludCBpZHMsIHNpemU7CkBAIC0xMiwzOCArMTUsNzEgQEAKIAlvZmZfdCBpZF9vZmZzZXQ7CiB9OwogCi1zdHJ1Y3QgcGVyZl9oZWFkZXIgewotCWludCBmcm96ZW47Ci0JaW50IGF0dHJzLCBzaXplOwotCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICoqYXR0cjsKLQlzNjQgYXR0cl9vZmZzZXQ7Ci0JdTY0IGRhdGFfb2Zmc2V0OwotCXU2NCBkYXRhX3NpemU7Ci0JdTY0IGV2ZW50X29mZnNldDsKLQl1NjQgZXZlbnRfc2l6ZTsKLQl1NjQgdHJhY2VfaW5mb19vZmZzZXQ7Ci0JdTY0IHRyYWNlX2luZm9fc2l6ZTsKK2VudW0geworCUhFQURFUl9UUkFDRV9JTkZPID0gMSwKKwlIRUFERVJfQlVJTERfSUQsCisJSEVBREVSX0xBU1RfRkVBVFVSRSwKIH07CiAKLXN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX3JlYWQoaW50IGZkKTsKLXZvaWQgcGVyZl9oZWFkZXJfX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKTsKKyNkZWZpbmUgSEVBREVSX0ZFQVRfQklUUwkJCTI1NgogCi12b2lkIHBlcmZfaGVhZGVyX19hZGRfYXR0cihzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCi0JCQkgICBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqYXR0cik7CitzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24geworCXU2NCBvZmZzZXQ7CisJdTY0IHNpemU7Cit9OworCitzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciB7CisJdTY0CQkJCW1hZ2ljOworCXU2NAkJCQlzaXplOworCXU2NAkJCQlhdHRyX3NpemU7CisJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWF0dHJzOworCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglkYXRhOworCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglldmVudF90eXBlczsKKwlERUNMQVJFX0JJVE1BUChhZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKK307CisKK3N0cnVjdCBwZXJmX2hlYWRlcjsKKworaW50IHBlcmZfZmlsZV9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLCBpbnQgZmQpOworCitzdHJ1Y3QgcGVyZl9oZWFkZXIgeworCWludAkJCWZyb3plbjsKKwlpbnQJCQlhdHRycywgc2l6ZTsKKwlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqKmF0dHI7CisJczY0CQkJYXR0cl9vZmZzZXQ7CisJdTY0CQkJZGF0YV9vZmZzZXQ7CisJdTY0CQkJZGF0YV9zaXplOworCXU2NAkJCWV2ZW50X29mZnNldDsKKwl1NjQJCQlldmVudF9zaXplOworCURFQ0xBUkVfQklUTUFQKGFkZHNfZmVhdHVyZXMsIEhFQURFUl9GRUFUX0JJVFMpOworfTsKKworc3RydWN0IHBlcmZfaGVhZGVyICpwZXJmX2hlYWRlcl9fbmV3KHZvaWQpOwordm9pZCBwZXJmX2hlYWRlcl9fZGVsZXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZik7CisKK2ludCBwZXJmX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCk7CitpbnQgcGVyZl9oZWFkZXJfX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkLCBib29sIGF0X2V4aXQpOworCitpbnQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKKwkJCSAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOwogCiB2b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CiBjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpOwogCitzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwordm9pZCBwZXJmX2hlYWRlcl9hdHRyX19kZWxldGUoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYpOwogCi1zdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqCi1wZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7Ci12b2lkIHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiwgdTY0IGlkKTsKK2ludCBwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYsIHU2NCBpZCk7CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpOwogc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqCiBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKHU2NCBpZCwgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpOwotdm9pZCBwZXJmX2hlYWRlcl9fc2V0X3RyYWNlX2luZm8odm9pZCk7Cit2b2lkIHBlcmZfaGVhZGVyX19zZXRfZmVhdChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZWF0KTsKK2Jvb2wgcGVyZl9oZWFkZXJfX2hhc19mZWF0KGNvbnN0IHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpOwogCi1zdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19uZXcodm9pZCk7CitpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCisJCQkJICBpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJCQkgaW50IGZlYXQsIGludCBmZCkpOwogCiAjZW5kaWYgLyogX19QRVJGX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTM4OTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisvKiBzdHViICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYml0b3BzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlOTgxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9QRVJGX0FTTV9CSVRPUFNfSF8KKyNkZWZpbmUgX1BFUkZfQVNNX0JJVE9QU19IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAiLi4vLi4vdHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBDSEVDS01FOiBOb3Qgc3VyZSBib3RoIGFsd2F5cyBtYXRjaCAqLworI2RlZmluZSBCSVRTX1BFUl9MT05HCV9fV09SRFNJWkUKKworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oIgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMmFiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDIgQEAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3N3YWIuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9zd2FiLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vc3dhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTM4OTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0wLDAgKzEgQEAKKy8qIHN0dWIgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjcyYjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX1BFUkZfQVNNX1VBQ0NFU1NfSF8KKyNkZWZpbmUgX1BFUkZfQVNNX1VBQ0NFU1NfSF8KKworI2RlZmluZSBfX2dldF91c2VyKHNyYywgZGVzdCkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwkoc3JjKSA9ICpkZXN0OwkJCQkJCQlcCisJMDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgZ2V0X3VzZXIJX19nZXRfdXNlcgorCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKQkxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUwNzYzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKQEAgLTAsMCArMSwzIEBACisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9saW51eC9iaXRtYXAuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgiCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlNTdjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX1BFUkZfTElOVVhfQklUT1BTX0hfCisjZGVmaW5lIF9QRVJGX0xJTlVYX0JJVE9QU19IXworCisjZGVmaW5lIF9fS0VSTkVMX18KKworI2RlZmluZSBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUCisjZGVmaW5lIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9saW51eC9iaXRvcHMuaCIKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCWFkZHJbbnIgLyBCSVRTX1BFUl9MT05HXSB8PSAxVUwgPDwgKG5yICUgQklUU19QRVJfTE9ORyk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHRlc3RfYml0KHVuc2lnbmVkIGludCBuciwgY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZXR1cm4gKCgxVUwgPDwgKG5yICUgQklUU19QRVJfTE9ORykpICYKKwkJKCgodW5zaWduZWQgbG9uZyAqKWFkZHIpW25yIC8gQklUU19QRVJfTE9OR10pKSAhPSAwOworfQorCit1bnNpZ25lZCBsb25nIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkCisJCWxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCit1bnNpZ25lZCBsb25nIGdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZAorCQlsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmIwNzEzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9QRVJGX0xJTlVYX0NPTVBJTEVSX0hfCisjZGVmaW5lIF9QRVJGX0xJTlVYX0NPTVBJTEVSX0hfCisKKyNpZm5kZWYgX19hbHdheXNfaW5saW5lCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZQlpbmxpbmUKKyNlbmRpZgorI2RlZmluZSBfX3VzZXIKKyNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2N0eXBlLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2Q0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jdHlwZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi91dGlsLmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGE2Yjg3MzkuLjIxYzAyNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xLDYgKzEsMTYgQEAKICNpZm5kZWYgUEVSRl9MSU5VWF9LRVJORUxfSF8KICNkZWZpbmUgUEVSRl9MSU5VWF9LRVJORUxfSF8KIAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgRElWX1JPVU5EX1VQKG4sZCkgKCgobikgKyAoZCkgLSAxKSAvIChkKSkKKworI2RlZmluZSBBTElHTih4LGEpCQlfX0FMSUdOX01BU0soeCwodHlwZW9mKHgpKShhKS0xKQorI2RlZmluZSBfX0FMSUdOX01BU0soeCxtYXNrKQkoKCh4KSsobWFzaykpJn4obWFzaykpCisKICNpZm5kZWYgb2Zmc2V0b2YKICNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCiAjZW5kaWYKQEAgLTI2LDQgKzM2LDcwIEBACiAJX21heDEgPiBfbWF4MiA/IF9tYXgxIDogX21heDI7IH0pCiAjZW5kaWYKIAorI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKHgsIHkpICh7CQkJCVwKKwl0eXBlb2YoeCkgX21pbjEgPSAoeCk7CQkJXAorCXR5cGVvZih5KSBfbWluMiA9ICh5KTsJCQlcCisJKHZvaWQpICgmX21pbjEgPT0gJl9taW4yKTsJCVwKKwlfbWluMSA8IF9taW4yID8gX21pbjEgOiBfbWluMjsgfSkKKyNlbmRpZgorCisjaWZuZGVmIEJVR19PTgorI2RlZmluZSBCVUdfT04oY29uZCkgYXNzZXJ0KCEoY29uZCkpCisjZW5kaWYKKworLyoKKyAqIEJvdGggbmVlZCBtb3JlIGNhcmUgdG8gaGFuZGxlIGVuZGlhbm5lc3MKKyAqIChEb24ndCB1c2UgYml0bWFwX2NvcHlfbGUoKSBmb3Igbm93KQorICovCisjZGVmaW5lIGNwdV90b19sZTY0KHgpCSh4KQorI2RlZmluZSBjcHVfdG9fbGUzMih4KQkoeCkKKworc3RhdGljIGlubGluZSBpbnQKK3ZzY25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJaW50IGk7CisJc3NpemVfdCBzc2l6ZSA9IHNpemU7CisKKwlpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKKworCXJldHVybiAoaSA+PSBzc2l6ZSkgPyAoc3NpemUgLSAxKSA6IGk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNjbnByaW50ZihjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlzc2l6ZV90IHNzaXplID0gc2l6ZTsKKwlpbnQgaTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJaSA9IHZzbnByaW50ZihidWYsIHNpemUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIChpID49IHNzaXplKSA/IChzc2l6ZSAtIDEpIDogaTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwlyZXR1cm4gc3RydG91bChucHRyLCBlbmRwdHIsIGJhc2UpOworfQorCisjaWZuZGVmIHByX2ZtdAorI2RlZmluZSBwcl9mbXQoZm10KSBmbXQKKyNlbmRpZgorCisjZGVmaW5lIHByX2VycihmbXQsIC4uLikgXAorCWRvIHsgZnByaW50ZihzdGRlcnIsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJfd2FybmluZyhmbXQsIC4uLikgXAorCWRvIHsgZnByaW50ZihzdGRlcnIsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJfaW5mbyhmbXQsIC4uLikgXAorCWRvIHsgZnByaW50ZihzdGRlcnIsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKKwllcHJpbnRmKDEsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9kZWJ1Z04obiwgZm10LCAuLi4pIFwKKwllcHJpbnRmKG4sIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9kZWJ1ZzIoZm10LCAuLi4pIHByX2RlYnVnTigyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcHJfZGVidWczKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMywgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjJmNTkwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2ODYyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9QRVJGX0xJTlVYX1RZUEVTX0hfCisjZGVmaW5lIF9QRVJGX0xJTlVYX1RZUEVTX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBERUNMQVJFX0JJVE1BUChuYW1lLGJpdHMpIFwKKwl1bnNpZ25lZCBsb25nIG5hbWVbQklUU19UT19MT05HUyhiaXRzKV0KKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmMgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKaW5kZXggODA0ZTAyMy4uOTRjYTk1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImRlYnVnLmgiCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Fub25fbWVtb3J5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpAQCAtMTksMTMgKzIwLDI2IEBACiAJcmV0dXJuIG47CiB9CiAKLSBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbikKK3ZvaWQgbWFwX19pbml0KHN0cnVjdCBtYXAgKnNlbGYsIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLAorCSAgICAgICBzdHJ1Y3QgZHNvICpkc28pCit7CisJc2VsZi0+c3RhcnQgICAgPSBzdGFydDsKKwlzZWxmLT5lbmQgICAgICA9IGVuZDsKKwlzZWxmLT5wZ29mZiAgICA9IHBnb2ZmOworCXNlbGYtPmRzbyAgICAgID0gZHNvOworCXNlbGYtPm1hcF9pcCAgID0gbWFwX19tYXBfaXA7CisJc2VsZi0+dW5tYXBfaXAgPSBtYXBfX3VubWFwX2lwOworCVJCX0NMRUFSX05PREUoJnNlbGYtPnJiX25vZGUpOworfQorCitzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbikKIHsKIAlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwogCiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGV2ZW50LT5maWxlbmFtZTsKIAkJY2hhciBuZXdmaWxlbmFtZVtQQVRIX01BWF07CisJCXN0cnVjdCBkc28gKmRzbzsKIAkJaW50IGFub247CiAKIAkJaWYgKGN3ZCkgewpAQCAtNDUsMTggKzU5LDE1IEBACiAJCQlmaWxlbmFtZSA9IG5ld2ZpbGVuYW1lOwogCQl9CiAKLQkJc2VsZi0+c3RhcnQgPSBldmVudC0+c3RhcnQ7Ci0JCXNlbGYtPmVuZCAgID0gZXZlbnQtPnN0YXJ0ICsgZXZlbnQtPmxlbjsKLQkJc2VsZi0+cGdvZmYgPSBldmVudC0+cGdvZmY7Ci0KLQkJc2VsZi0+ZHNvID0gZHNvc19fZmluZG5ldyhmaWxlbmFtZSk7Ci0JCWlmIChzZWxmLT5kc28gPT0gTlVMTCkKKwkJZHNvID0gZHNvc19fZmluZG5ldyhmaWxlbmFtZSk7CisJCWlmIChkc28gPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKIAorCQltYXBfX2luaXQoc2VsZiwgZXZlbnQtPnN0YXJ0LCBldmVudC0+c3RhcnQgKyBldmVudC0+bGVuLAorCQkJICBldmVudC0+cGdvZmYsIGRzbyk7CisKIAkJaWYgKHNlbGYtPmRzbyA9PSB2ZHNvIHx8IGFub24pCi0JCQlzZWxmLT5tYXBfaXAgPSB2ZHNvX19tYXBfaXA7Ci0JCWVsc2UKLQkJCXNlbGYtPm1hcF9pcCA9IG1hcF9fbWFwX2lwOworCQkJc2VsZi0+bWFwX2lwID0gc2VsZi0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCX0KIAlyZXR1cm4gc2VsZjsKIG91dF9kZWxldGU6CkBAIC02NCw2ICs3NSw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCisjZGVmaW5lIERTT19fREVMRVRFRCAiKGRlbGV0ZWQpIgorCitzdHJ1Y3Qgc3ltYm9sICoKK21hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwgdTY0IGlwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWlmICghc2VsZi0+ZHNvLT5sb2FkZWQpIHsKKwkJaW50IG5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgZmlsdGVyKTsKKworCQlpZiAobnIgPCAwKSB7CisJCQlpZiAoc2VsZi0+ZHNvLT5oYXNfYnVpbGRfaWQpIHsKKwkJCQljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJCQkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+ZHNvLT5idWlsZF9pZCwKKwkJCQkJCSAgc2l6ZW9mKHNlbGYtPmRzby0+YnVpbGRfaWQpLAorCQkJCQkJICBzYnVpbGRfaWQpOworCQkJCXByX3dhcm5pbmcoIiVzIHdpdGggYnVpbGQgaWQgJXMgbm90IGZvdW5kIiwKKwkJCQkJICAgc2VsZi0+ZHNvLT5sb25nX25hbWUsIHNidWlsZF9pZCk7CisJCQl9IGVsc2UKKwkJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiAlcyIsCisJCQkJCSAgIHNlbGYtPmRzby0+bG9uZ19uYW1lKTsKKwkJCXByX3dhcm5pbmcoIiwgY29udGludWluZyB3aXRob3V0IHN5bWJvbHNcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0gZWxzZSBpZiAobnIgPT0gMCkgeworCQkJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPmRzby0+bG9uZ19uYW1lOworCQkJY29uc3Qgc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKwkJCWNvbnN0IHNpemVfdCByZWFsX2xlbiA9IGxlbiAtIHNpemVvZihEU09fX0RFTEVURUQpOworCisJCQlpZiAobGVuID4gc2l6ZW9mKERTT19fREVMRVRFRCkgJiYKKwkJCSAgICBzdHJjbXAobmFtZSArIHJlYWxfbGVuICsgMSwgRFNPX19ERUxFVEVEKSA9PSAwKSB7CisJCQkJcHJfd2FybmluZygiJS4qcyB3YXMgdXBkYXRlZCwgcmVzdGFydCB0aGUgbG9uZyBydW5uaW5nIGFwcHMgdGhhdCB1c2UgaXQhXG4iLAorCQkJCQkgICAoaW50KXJlYWxfbGVuLCBuYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfd2FybmluZygibm8gc3ltYm9scyBmb3VuZCBpbiAlcywgbWF5YmUgaW5zdGFsbCBhIGRlYnVnIHBhY2thZ2U/XG4iLCBuYW1lKTsKKwkJCX0KKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIHNlbGYtPmRzby0+ZmluZF9zeW1ib2woc2VsZi0+ZHNvLCBpcCk7Cit9CisKIHN0cnVjdCBtYXAgKm1hcF9fY2xvbmUoc3RydWN0IG1hcCAqc2VsZikKIHsKIAlzdHJ1Y3QgbWFwICptYXAgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggYjA5NzU3MC4uMGZhZjRmMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJzdHJpbmcuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImhlYWRlci5oIgorI2luY2x1ZGUgImRlYnVnZnMuaCIKIAogaW50CQkJCW5yX2NvdW50ZXJzOwogCkBAIC00Nyw2ICs0OCw4IEBACiAgIHsgQ1NXKFBBR0VfRkFVTFRTX01BSiksCSJtYWpvci1mYXVsdHMiLAkJIiIJCX0sCiAgIHsgQ1NXKENPTlRFWFRfU1dJVENIRVMpLAkiY29udGV4dC1zd2l0Y2hlcyIsCSJjcyIJCX0sCiAgIHsgQ1NXKENQVV9NSUdSQVRJT05TKSwJImNwdS1taWdyYXRpb25zIiwJIm1pZ3JhdGlvbnMiCX0sCisgIHsgQ1NXKEFMSUdOTUVOVF9GQVVMVFMpLAkiYWxpZ25tZW50LWZhdWx0cyIsCSIiCQl9LAorICB7IENTVyhFTVVMQVRJT05fRkFVTFRTKSwJImVtdWxhdGlvbi1mYXVsdHMiLAkiIgkJfSwKIH07CiAKICNkZWZpbmUgX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgbmFtZSkgXApAQCAtNzUsNiArNzgsOCBAQAogCSJDUFUtbWlncmF0aW9ucyIsCiAJIm1pbm9yLWZhdWx0cyIsCiAJIm1ham9yLWZhdWx0cyIsCisJImFsaWdubWVudC1mYXVsdHMiLAorCSJlbXVsYXRpb24tZmF1bHRzIiwKIH07CiAKICNkZWZpbmUgTUFYX0FMSUFTRVMgOApAQCAtMTQ5LDE2ICsxNTQsNiBAQAogCiAjZGVmaW5lIE1BWF9FVkVOVF9MRU5HVEggNTEyCiAKLWludCB2YWxpZF9kZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKmRlYnVnZnMpCi17Ci0Jc3RydWN0IHN0YXRmcyBzdF9mczsKLQotCWlmIChzdGF0ZnMoZGVidWdmcywgJnN0X2ZzKSA8IDApCi0JCXJldHVybiAtRU5PRU5UOwotCWVsc2UgaWYgKHN0X2ZzLmZfdHlwZSAhPSAobG9uZykgREVCVUdGU19NQUdJQykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIDA7Ci19CiAKIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRyYWNlcG9pbnRfaWRfdG9fcGF0aCh1NjQgY29uZmlnKQogewpAQCAtMTcxLDcgKzE2Niw3IEBACiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKIAljaGFyIGRpcl9wYXRoW01BWFBBVEhMRU5dOwogCi0JaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKKwlpZiAoZGVidWdmc192YWxpZF9tb3VudHBvaW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiBOVUxMOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKQEAgLTUxMCw3ICs1MDUsNyBAQAogCWNoYXIgc3lzX25hbWVbTUFYX0VWRU5UX0xFTkdUSF07CiAJdW5zaWduZWQgaW50IHN5c19sZW5ndGgsIGV2dF9sZW5ndGg7CiAKLQlpZiAodmFsaWRfZGVidWdmc19tb3VudChkZWJ1Z2ZzX3BhdGgpKQorCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSkKIAkJcmV0dXJuIDA7CiAKIAlldnRfbmFtZSA9IHN0cmNocigqc3RycCwgJzonKTsKQEAgLTY3OCw2ICs2NzMsOCBAQAogCWlmIChyZXQgIT0gRVZUX0ZBSUxFRCkKIAkJZ290byBtb2RpZmllcjsKIAorCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBvciB1bnN1cHBvcnRlZCBldmVudDogJyVzJ1xuIiwgKnN0cik7CisJZnByaW50ZihzdGRlcnIsICJSdW4gJ3BlcmYgbGlzdCcgZm9yIGEgbGlzdCBvZiB2YWxpZCBldmVudHNcbiIpOwogCXJldHVybiBFVlRfRkFJTEVEOwogCiBtb2RpZmllcjoKQEAgLTc4Niw3ICs3ODMsNyBAQAogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CiAJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm47CiAKIAlzeXNfZGlyID0gb3BlbmRpcihkZWJ1Z2ZzX3BhdGgpOwpAQCAtODA0LDcgKzgwMSw3IEBACiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZwcmludGYoc3RkZXJyLCAiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKKwkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKIAkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9UUkFDRVBPSU5UKzFdKTsKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKQEAgLTgyMSw4ICs4MTgsOCBAQAogCXVuc2lnbmVkIGludCBpLCB0eXBlLCBvcCwgcHJldl90eXBlID0gLTE7CiAJY2hhciBuYW1lWzQwXTsKIAotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXZlbnRfc3ltYm9scyk7IGkrKywgc3ltcysrKSB7CiAJCXR5cGUgPSBzeW1zLT50eXBlICsgMTsKQEAgLTgzMCwxOSArODI3LDE5IEBACiAJCQl0eXBlID0gMDsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCQlwcmludGYoIlxuIik7CiAKIAkJaWYgKHN0cmxlbihzeW1zLT5hbGlhcykpCiAJCQlzcHJpbnRmKG5hbWUsICIlcyBPUiAlcyIsIHN5bXMtPnN5bWJvbCwgc3ltcy0+YWxpYXMpOwogCQllbHNlCiAJCQlzdHJjcHkobmFtZSwgc3ltcy0+c3ltYm9sKTsKLQkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsIG5hbWUsCisJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBuYW1lLAogCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1t0eXBlXSk7CiAKIAkJcHJldl90eXBlID0gdHlwZTsKIAl9CiAKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJcHJpbnRmKCJcbiIpOwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWDsgdHlwZSsrKSB7CiAJCWZvciAob3AgPSAwOyBvcCA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYOyBvcCsrKSB7CiAJCQkvKiBza2lwIGludmFsaWQgY2FjaGUgdHlwZSAqLwpAQCAtODUwLDE3ICs4NDcsMTcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsCisJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAogCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKIAkJCX0KIAkJfQogCX0KIAotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIgICUtNDJzIFtyYXcgaGFyZHdhcmUgZXZlbnQgZGVzY3JpcHRvcl1cbiIsCiAJCSJyTk5OIik7Ci0JZnByaW50ZihzdGRlcnIsICJcbiIpOworCXByaW50ZigiXG4iKTsKIAogCXByaW50X3RyYWNlcG9pbnRfZXZlbnRzKCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNjZGZjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0wLDAgKzEsNzMyIEBACisvKgorICogcHJvYmUtZmluZGVyLmMgOiBDIGV4cHJlc3Npb24gdG8ga3Byb2JlIGV2ZW50IGNvbnZlcnRlcgorICoKKyAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInByb2JlLWZpbmRlci5oIgorCisKKy8qIER3YXJmX0RpZSBMaW5rYWdlIHRvIHBhcmVudCBEaWUgKi8KK3N0cnVjdCBkaWVfbGluayB7CisJc3RydWN0IGRpZV9saW5rICpwYXJlbnQ7CS8qIFBhcmVudCBkaWUgKi8KKwlEd2FyZl9EaWUgZGllOwkJCS8qIEN1cnJlbnQgZGllICovCit9OworCitzdGF0aWMgRHdhcmZfRGVidWcgX19kd19kZWJ1ZzsKK3N0YXRpYyBEd2FyZl9FcnJvciBfX2R3X2Vycm9yOworCisvKgorICogR2VuZXJpYyBkd2FyZiBhbmFseXNpcyBoZWxwZXJzCisgKi8KKworI2RlZmluZSBYODZfMzJfTUFYX1JFR1MgOAorY29uc3QgY2hhciAqeDg2XzMyX3JlZ3NfdGFibGVbWDg2XzMyX01BWF9SRUdTXSA9IHsKKwkiJWF4IiwKKwkiJWN4IiwKKwkiJWR4IiwKKwkiJWJ4IiwKKwkiJHN0YWNrIiwJLyogU3RhY2sgYWRkcmVzcyBpbnN0ZWFkIG9mICVzcCAqLworCSIlYnAiLAorCSIlc2kiLAorCSIlZGkiLAorfTsKKworI2RlZmluZSBYODZfNjRfTUFYX1JFR1MgMTYKK2NvbnN0IGNoYXIgKng4Nl82NF9yZWdzX3RhYmxlW1g4Nl82NF9NQVhfUkVHU10gPSB7CisJIiVheCIsCisJIiVkeCIsCisJIiVjeCIsCisJIiVieCIsCisJIiVzaSIsCisJIiVkaSIsCisJIiVicCIsCisJIiVzcCIsCisJIiVyOCIsCisJIiVyOSIsCisJIiVyMTAiLAorCSIlcjExIiwKKwkiJXIxMiIsCisJIiVyMTMiLAorCSIlcjE0IiwKKwkiJXIxNSIsCit9OworCisvKiBUT0RPOiBzd2l0Y2hpbmcgYnkgZHdhcmYgYWRkcmVzcyBzaXplICovCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBBUkNIX01BWF9SRUdTIFg4Nl82NF9NQVhfUkVHUworI2RlZmluZSBhcmNoX3JlZ3NfdGFibGUgeDg2XzY0X3JlZ3NfdGFibGUKKyNlbHNlCisjZGVmaW5lIEFSQ0hfTUFYX1JFR1MgWDg2XzMyX01BWF9SRUdTCisjZGVmaW5lIGFyY2hfcmVnc190YWJsZSB4ODZfMzJfcmVnc190YWJsZQorI2VuZGlmCisKKy8qIFJldHVybiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHJlZ2lzdGVyIHN0cmluZyAoZm9yIGtwcm9iZS10cmFjZXIpICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2FyY2hfcmVnc3RyKHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiAobiA8PSBBUkNIX01BWF9SRUdTKSA/IGFyY2hfcmVnc190YWJsZVtuXSA6IE5VTEw7Cit9CisKKy8qCisgKiBDb21wYXJlIHRoZSB0YWlsIG9mIHR3byBzdHJpbmdzLgorICogUmV0dXJuIDAgaWYgd2hvbGUgb2YgZWl0aGVyIHN0cmluZyBpcyBzYW1lIGFzIGFub3RoZXIncyB0YWlsIHBhcnQuCisgKi8KK3N0YXRpYyBpbnQgc3RydGFpbGNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJaW50IGkxID0gc3RybGVuKHMxKTsKKwlpbnQgaTIgPSBzdHJsZW4oczIpOworCXdoaWxlICgtLWkxID4gMCAmJiAtLWkyID4gMCkgeworCQlpZiAoczFbaTFdICE9IHMyW2kyXSkKKwkJCXJldHVybiBzMVtpMV0gLSBzMltpMl07CisJfQorCXJldHVybiAwOworfQorCisvKiBGaW5kIHRoZSBmaWxlbm8gb2YgdGhlIHRhcmdldCBmaWxlLiAqLworc3RhdGljIER3YXJmX1Vuc2lnbmVkIGN1X2ZpbmRfZmlsZW5vKER3YXJmX0RpZSBjdV9kaWUsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCUR3YXJmX1NpZ25lZCBjbnQsIGk7CisJRHdhcmZfVW5zaWduZWQgZm91bmQgPSAwOworCWNoYXIgKipzcmNzOworCWludCByZXQ7CisKKwlpZiAoIWZuYW1lKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGR3YXJmX3NyY2ZpbGVzKGN1X2RpZSwgJnNyY3MsICZjbnQsICZfX2R3X2Vycm9yKTsKKwlpZiAocmV0ID09IERXX0RMVl9PSykgeworCQlmb3IgKGkgPSAwOyBpIDwgY250ICYmICFmb3VuZDsgaSsrKSB7CisJCQlpZiAoc3RydGFpbGNtcChzcmNzW2ldLCBmbmFtZSkgPT0gMCkKKwkJCQlmb3VuZCA9IGkgKyAxOworCQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBzcmNzW2ldLCBEV19ETEFfU1RSSU5HKTsKKwkJfQorCQlmb3IgKDsgaSA8IGNudDsgaSsrKQorCQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBzcmNzW2ldLCBEV19ETEFfU1RSSU5HKTsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBzcmNzLCBEV19ETEFfTElTVCk7CisJfQorCWlmIChmb3VuZCkKKwkJcHJfZGVidWcoImZvdW5kIGZubzogJWRcbiIsIChpbnQpZm91bmQpOworCXJldHVybiBmb3VuZDsKK30KKworLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLworc3RhdGljIGludCBkaWVfY29tcGFyZV9uYW1lKER3YXJmX0RpZSBkd19kaWUsIGNvbnN0IGNoYXIgKnRuYW1lKQoreworCWNoYXIgKm5hbWU7CisJaW50IHJldDsKKwlyZXQgPSBkd2FyZl9kaWVuYW1lKGR3X2RpZSwgJm5hbWUsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spIHsKKwkJcmV0ID0gc3RyY21wKHRuYW1lLCBuYW1lKTsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBuYW1lLCBEV19ETEFfU1RSSU5HKTsKKwl9IGVsc2UKKwkJcmV0ID0gLTE7CisJcmV0dXJuIHJldDsKK30KKworLyogQ2hlY2sgdGhlIGFkZHJlc3MgaXMgaW4gdGhlIHN1YnByb2dyYW0oZnVuY3Rpb24pLiAqLworc3RhdGljIGludCBkaWVfd2l0aGluX3N1YnByb2dyYW0oRHdhcmZfRGllIHNwX2RpZSwgRHdhcmZfQWRkciBhZGRyLAorCQkJCSBEd2FyZl9TaWduZWQgKm9mZnMpCit7CisJRHdhcmZfQWRkciBsb3BjLCBoaXBjOworCWludCByZXQ7CisKKwkvKiBUT0RPOiBjaGVjayByYW5nZXMgKi8KKwlyZXQgPSBkd2FyZl9sb3dwYyhzcF9kaWUsICZsb3BjLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKQorCQlyZXR1cm4gMDsKKwlyZXQgPSBkd2FyZl9oaWdocGMoc3BfZGllLCAmaGlwYywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlpZiAobG9wYyA8PSBhZGRyICYmIGFkZHIgPCBoaXBjKSB7CisJCSpvZmZzID0gYWRkciAtIGxvcGM7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogQ2hlY2sgdGhlIGRpZSBpcyBpbmxpbmVkIGZ1bmN0aW9uICovCitzdGF0aWMgRHdhcmZfQm9vbCBkaWVfaW5saW5lZF9zdWJwcm9ncmFtKER3YXJmX0RpZSBkd19kaWUpCit7CisJLyogVE9ETzogY2hlY2sgc3RyaWN0bHkgKi8KKwlEd2FyZl9Cb29sIGlubDsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfaGFzYXR0cihkd19kaWUsIERXX0FUX2lubGluZSwgJmlubCwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlyZXR1cm4gaW5sOworfQorCisvKiBHZXQgdGhlIG9mZnNldCBvZiBhYnN0cnVjdF9vcmlnaW4gKi8KK3N0YXRpYyBEd2FyZl9PZmYgZGllX2dldF9hYnN0cmFjdF9vcmlnaW4oRHdhcmZfRGllIGR3X2RpZSkKK3sKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKKwlEd2FyZl9PZmYgY3Vfb2ZmczsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfYXR0cihkd19kaWUsIERXX0FUX2Fic3RyYWN0X29yaWdpbiwgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJcmV0ID0gZHdhcmZfZm9ybXJlZihhdHRyLCAmY3Vfb2ZmcywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKKwlyZXR1cm4gY3Vfb2ZmczsKK30KKworLyogR2V0IGVudHJ5IHBjKG9yIGxvdyBwYywgMXN0IGVudHJ5IG9mIHJhbmdlcykgIG9mIHRoZSBkaWUgKi8KK3N0YXRpYyBEd2FyZl9BZGRyIGRpZV9nZXRfZW50cnlwYyhEd2FyZl9EaWUgZHdfZGllKQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCUR3YXJmX0FkZHIgYWRkcjsKKwlEd2FyZl9PZmYgb2ZmczsKKwlEd2FyZl9SYW5nZXMgKnJhbmdlczsKKwlEd2FyZl9TaWduZWQgY250OworCWludCByZXQ7CisKKwkvKiBUcnkgdG8gZ2V0IGVudHJ5IHBjICovCisJcmV0ID0gZHdhcmZfYXR0cihkd19kaWUsIERXX0FUX2VudHJ5X3BjLCAmYXR0ciwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAocmV0ID09IERXX0RMVl9PSykgeworCQlyZXQgPSBkd2FyZl9mb3JtYWRkcihhdHRyLCAmYWRkciwgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOworCQlyZXR1cm4gYWRkcjsKKwl9CisKKwkvKiBUcnkgdG8gZ2V0IGxvdyBwYyAqLworCXJldCA9IGR3YXJmX2xvd3BjKGR3X2RpZSwgJmFkZHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spCisJCXJldHVybiBhZGRyOworCisJLyogVHJ5IHRvIGdldCByYW5nZXMgKi8KKwlyZXQgPSBkd2FyZl9hdHRyKGR3X2RpZSwgRFdfQVRfcmFuZ2VzLCAmYXR0ciwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlyZXQgPSBkd2FyZl9mb3JtcmVmKGF0dHIsICZvZmZzLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldCA9IGR3YXJmX2dldF9yYW5nZXMoX19kd19kZWJ1Zywgb2ZmcywgJnJhbmdlcywgJmNudCwgTlVMTCwKKwkJCQkmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCWFkZHIgPSByYW5nZXNbMF0uZHdyX2FkZHIxOworCWR3YXJmX3Jhbmdlc19kZWFsbG9jKF9fZHdfZGVidWcsIHJhbmdlcywgY250KTsKKwlyZXR1cm4gYWRkcjsKK30KKworLyoKKyAqIFNlYXJjaCBhIERpZSBmcm9tIERpZSB0cmVlLgorICogTm90ZTogY3VyX2xpbmstPmRpZSBzaG91bGQgYmUgZGVhbGxvY2F0ZWQgaW4gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBfX3NlYXJjaF9kaWVfdHJlZShzdHJ1Y3QgZGllX2xpbmsgKmN1cl9saW5rLAorCQkJICAgICBpbnQgKCpkaWVfY2IpKHN0cnVjdCBkaWVfbGluayAqLCB2b2lkICopLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCUR3YXJmX0RpZSBuZXdfZGllOworCXN0cnVjdCBkaWVfbGluayBuZXdfbGluazsKKwlpbnQgcmV0OworCisJaWYgKCFkaWVfY2IpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgY3VycmVudCBkaWUgKi8KKwl3aGlsZSAoIShyZXQgPSBkaWVfY2IoY3VyX2xpbmssIGRhdGEpKSkgeworCQkvKiBDaGVjayBjaGlsZCBkaWUgKi8KKwkJcmV0ID0gZHdhcmZfY2hpbGQoY3VyX2xpbmstPmRpZSwgJm5ld19kaWUsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCQlpZiAocmV0ID09IERXX0RMVl9PSykgeworCQkJbmV3X2xpbmsucGFyZW50ID0gY3VyX2xpbms7CisJCQluZXdfbGluay5kaWUgPSBuZXdfZGllOworCQkJcmV0ID0gX19zZWFyY2hfZGllX3RyZWUoJm5ld19saW5rLCBkaWVfY2IsIGRhdGEpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIE1vdmUgdG8gbmV4dCBzaWJsaW5nICovCisJCXJldCA9IGR3YXJmX3NpYmxpbmdvZihfX2R3X2RlYnVnLCBjdXJfbGluay0+ZGllLCAmbmV3X2RpZSwKKwkJCQkgICAgICAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBjdXJfbGluay0+ZGllLCBEV19ETEFfRElFKTsKKwkJY3VyX2xpbmstPmRpZSA9IG5ld19kaWU7CisJCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKQorCQkJcmV0dXJuIDA7CisJfQorCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgY3VyX2xpbmstPmRpZSwgRFdfRExBX0RJRSk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2VhcmNoIGEgZGllIGluIGl0cyBjaGlsZHJlbidzIGRpZSB0cmVlICovCitzdGF0aWMgaW50IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihEd2FyZl9EaWUgcGFyZW50X2RpZSwKKwkJCQkgICAgaW50ICgqZGllX2NiKShzdHJ1Y3QgZGllX2xpbmsgKiwgdm9pZCAqKSwKKwkJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGllX2xpbmsgbmV3X2xpbms7CisJaW50IHJldDsKKworCW5ld19saW5rLnBhcmVudCA9IE5VTEw7CisJcmV0ID0gZHdhcmZfY2hpbGQocGFyZW50X2RpZSwgJm5ld19saW5rLmRpZSwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAocmV0ID09IERXX0RMVl9PSykKKwkJcmV0dXJuIF9fc2VhcmNoX2RpZV90cmVlKCZuZXdfbGluaywgZGllX2NiLCBkYXRhKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBGaW5kIGEgbG9jZGVzYyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhZGRyZXNzICovCitzdGF0aWMgaW50IGF0dHJfZ2V0X2xvY2Rlc2MoRHdhcmZfQXR0cmlidXRlIGF0dHIsIER3YXJmX0xvY2Rlc2MgKmRlc2MsCisJCQkgICAgRHdhcmZfQWRkciBhZGRyKQoreworCUR3YXJmX1NpZ25lZCBsY250OworCUR3YXJmX0xvY2Rlc2MgKipsbGJ1ZjsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gZHdhcmZfbG9jbGlzdF9uKGF0dHIsICZsbGJ1ZiwgJmxjbnQsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJcmV0ID0gRFdfRExWX05PX0VOVFJZOworCWZvciAoaSA9IDA7IGkgPCBsY250OyArK2kpIHsKKwkJaWYgKGxsYnVmW2ldLT5sZF9sb3BjIDw9IGFkZHIgJiYKKwkJICAgIGxsYnVmW2ldLT5sZF9oaXBjID4gYWRkcikgeworCQkJbWVtY3B5KGRlc2MsIGxsYnVmW2ldLCBzaXplb2YoRHdhcmZfTG9jZGVzYykpOworCQkJZGVzYy0+bGRfcyA9CisJCQkJbWFsbG9jKHNpemVvZihEd2FyZl9Mb2MpICogbGxidWZbaV0tPmxkX2NlbnRzKTsKKwkJCURJRV9JRihkZXNjLT5sZF9zID09IE5VTEwpOworCQkJbWVtY3B5KGRlc2MtPmxkX3MsIGxsYnVmW2ldLT5sZF9zLAorCQkJCXNpemVvZihEd2FyZl9Mb2MpICogbGxidWZbaV0tPmxkX2NlbnRzKTsKKwkJCXJldCA9IERXX0RMVl9PSzsKKwkJCWJyZWFrOworCQl9CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWZbaV0tPmxkX3MsIERXX0RMQV9MT0NfQkxPQ0spOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxsYnVmW2ldLCBEV19ETEFfTE9DREVTQyk7CisJfQorCS8qIFJlbGVhc2luZyBsb29wICovCisJZm9yICg7IGkgPCBsY250OyArK2kpIHsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsbGJ1ZltpXS0+bGRfcywgRFdfRExBX0xPQ19CTE9DSyk7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWZbaV0sIERXX0RMQV9MT0NERVNDKTsKKwl9CisJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsbGJ1ZiwgRFdfRExBX0xJU1QpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEdldCBkZWNsX2ZpbGUgYXR0cmlidXRlIHZhbHVlIChmaWxlIG51bWJlcikgKi8KK3N0YXRpYyBEd2FyZl9VbnNpZ25lZCBkaWVfZ2V0X2RlY2xfZmlsZShEd2FyZl9EaWUgc3BfZGllKQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCUR3YXJmX1Vuc2lnbmVkIGZubzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfYXR0cihzcF9kaWUsIERXX0FUX2RlY2xfZmlsZSwgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZHdhcmZfZm9ybXVkYXRhKGF0dHIsICZmbm8sICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBhdHRyLCBEV19ETEFfQVRUUik7CisJcmV0dXJuIGZubzsKK30KKworLyogR2V0IGRlY2xfbGluZSBhdHRyaWJ1dGUgdmFsdWUgKGxpbmUgbnVtYmVyKSAqLworc3RhdGljIER3YXJmX1Vuc2lnbmVkIGRpZV9nZXRfZGVjbF9saW5lKER3YXJmX0RpZSBzcF9kaWUpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJRHdhcmZfVW5zaWduZWQgbG5vOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl9hdHRyKHNwX2RpZSwgRFdfQVRfZGVjbF9saW5lLCAmYXR0ciwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlkd2FyZl9mb3JtdWRhdGEoYXR0ciwgJmxubywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKKwlyZXR1cm4gbG5vOworfQorCisvKgorICogUHJvYmUgZmluZGVyIHJlbGF0ZWQgZnVuY3Rpb25zCisgKi8KKworLyogU2hvdyBhIGxvY2F0aW9uICovCitzdGF0aWMgdm9pZCBzaG93X2xvY2F0aW9uKER3YXJmX0xvYyAqbG9jLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlEd2FyZl9TbWFsbCBvcDsKKwlEd2FyZl9VbnNpZ25lZCByZWduOworCUR3YXJmX1NpZ25lZCBvZmZzOworCWludCBkZXJlZiA9IDAsIHJldDsKKwljb25zdCBjaGFyICpyZWdzOworCisJb3AgPSBsb2MtPmxyX2F0b207CisKKwkvKiBJZiB0aGlzIGlzIGJhc2VkIG9uIGZyYW1lIGJ1ZmZlciwgc2V0IHRoZSBvZmZzZXQgKi8KKwlpZiAob3AgPT0gRFdfT1BfZmJyZWcpIHsKKwkJZGVyZWYgPSAxOworCQlvZmZzID0gKER3YXJmX1NpZ25lZClsb2MtPmxyX251bWJlcjsKKwkJb3AgPSBwZi0+ZmJsb2MubGRfc1swXS5scl9hdG9tOworCQlsb2MgPSAmcGYtPmZibG9jLmxkX3NbMF07CisJfSBlbHNlCisJCW9mZnMgPSAwOworCisJaWYgKG9wID49IERXX09QX2JyZWcwICYmIG9wIDw9IERXX09QX2JyZWczMSkgeworCQlyZWduID0gb3AgLSBEV19PUF9icmVnMDsKKwkJb2ZmcyArPSAoRHdhcmZfU2lnbmVkKWxvYy0+bHJfbnVtYmVyOworCQlkZXJlZiA9IDE7CisJfSBlbHNlIGlmIChvcCA+PSBEV19PUF9yZWcwICYmIG9wIDw9IERXX09QX3JlZzMxKSB7CisJCXJlZ24gPSBvcCAtIERXX09QX3JlZzA7CisJfSBlbHNlIGlmIChvcCA9PSBEV19PUF9icmVneCkgeworCQlyZWduID0gbG9jLT5scl9udW1iZXI7CisJCW9mZnMgKz0gKER3YXJmX1NpZ25lZClsb2MtPmxyX251bWJlcjI7CisJCWRlcmVmID0gMTsKKwl9IGVsc2UgaWYgKG9wID09IERXX09QX3JlZ3gpIHsKKwkJcmVnbiA9IGxvYy0+bHJfbnVtYmVyOworCX0gZWxzZQorCQlkaWUoIkR3YXJmX09QICVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLCBvcCk7CisKKwlyZWdzID0gZ2V0X2FyY2hfcmVnc3RyKHJlZ24pOworCWlmICghcmVncykKKwkJZGllKCIlbGxkIGV4Y2VlZHMgbWF4IHJlZ2lzdGVyIG51bWJlci5cbiIsIHJlZ24pOworCisJaWYgKGRlcmVmKQorCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLAorCQkJCSAiICVzPSUrbGxkKCVzKSIsIHBmLT52YXIsIG9mZnMsIHJlZ3MpOworCWVsc2UKKwkJcmV0ID0gc25wcmludGYocGYtPmJ1ZiwgcGYtPmxlbiwgIiAlcz0lcyIsIHBmLT52YXIsIHJlZ3MpOworCURJRV9JRihyZXQgPCAwKTsKKwlESUVfSUYocmV0ID49IHBmLT5sZW4pOworfQorCisvKiBTaG93IGEgdmFyaWFibGVzIGluIGtwcm9iZSBldmVudCBmb3JtYXQgKi8KK3N0YXRpYyB2b2lkIHNob3dfdmFyaWFibGUoRHdhcmZfRGllIHZyX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJRHdhcmZfTG9jZGVzYyBsZDsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfYXR0cih2cl9kaWUsIERXX0FUX2xvY2F0aW9uLCAmYXR0ciwgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQorCQlnb3RvIGVycm9yOworCXJldCA9IGF0dHJfZ2V0X2xvY2Rlc2MoYXR0ciwgJmxkLCAocGYtPmFkZHIgLSBwZi0+Y3VfYmFzZSkpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQorCQlnb3RvIGVycm9yOworCS8qIFRPRE8/ICovCisJRElFX0lGKGxkLmxkX2NlbnRzICE9IDEpOworCXNob3dfbG9jYXRpb24oJmxkLmxkX3NbMF0sIHBmKTsKKwlmcmVlKGxkLmxkX3MpOworCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOworCXJldHVybiA7CitlcnJvcjoKKwlkaWUoIkZhaWxlZCB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiAlcyBhdCB0aGlzIGFkZHJlc3MuXG4iCisJICAgICIgUGVyaGFwcywgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC5cbiIsIHBmLT52YXIpOworfQorCitzdGF0aWMgaW50IHZhcmlhYmxlX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSAoc3RydWN0IHByb2JlX2ZpbmRlciAqKWRhdGE7CisJRHdhcmZfSGFsZiB0YWc7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmICgodGFnID09IERXX1RBR19mb3JtYWxfcGFyYW1ldGVyIHx8CisJICAgICB0YWcgPT0gRFdfVEFHX3ZhcmlhYmxlKSAmJgorCSAgICAoZGllX2NvbXBhcmVfbmFtZShkbGluay0+ZGllLCBwZi0+dmFyKSA9PSAwKSkgeworCQlzaG93X3ZhcmlhYmxlKGRsaW5rLT5kaWUsIHBmKTsKKwkJcmV0dXJuIDE7CisJfQorCS8qIFRPRE86IFN1cHBvcnQgc3RydWN0IG1lbWJlcnMgYW5kIGFycmF5cyAqLworCXJldHVybiAwOworfQorCisvKiBGaW5kIGEgdmFyaWFibGUgaW4gYSBzdWJwcm9ncmFtIGRpZSAqLworc3RhdGljIHZvaWQgZmluZF92YXJpYWJsZShEd2FyZl9EaWUgc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFpc19jX3Zhcm5hbWUocGYtPnZhcikpIHsKKwkJLyogT3V0cHV0IHJhdyBwYXJhbWV0ZXJzICovCisJCXJldCA9IHNucHJpbnRmKHBmLT5idWYsIHBmLT5sZW4sICIgJXMiLCBwZi0+dmFyKTsKKwkJRElFX0lGKHJldCA8IDApOworCQlESUVfSUYocmV0ID49IHBmLT5sZW4pOworCQlyZXR1cm4gOworCX0KKworCXByX2RlYnVnKCJTZWFyY2hpbmcgJyVzJyB2YXJpYWJsZSBpbiBjb250ZXh0LlxuIiwgcGYtPnZhcik7CisJLyogU2VhcmNoIGNoaWxkIGRpZSBmb3IgbG9jYWwgdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzLiAqLworCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihzcF9kaWUsIHZhcmlhYmxlX2NhbGxiYWNrLCBwZik7CisJaWYgKCFyZXQpCisJCWRpZSgiRmFpbGVkIHRvIGZpbmQgJyVzJyBpbiB0aGlzIGZ1bmN0aW9uLlxuIiwgcGYtPnZhcik7Cit9CisKKy8qIEdldCBhIGZyYW1lIGJhc2Ugb24gdGhlIGFkZHJlc3MgKi8KK3N0YXRpYyB2b2lkIGdldF9jdXJyZW50X2ZyYW1lX2Jhc2UoRHdhcmZfRGllIHNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX2F0dHIoc3BfZGllLCBEV19BVF9mcmFtZV9iYXNlLCAmYXR0ciwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlyZXQgPSBhdHRyX2dldF9sb2NkZXNjKGF0dHIsICZwZi0+ZmJsb2MsIChwZi0+YWRkciAtIHBmLT5jdV9iYXNlKSk7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2N1cnJlbnRfZnJhbWVfYmFzZShzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlmcmVlKHBmLT5mYmxvYy5sZF9zKTsKKwltZW1zZXQoJnBmLT5mYmxvYywgMCwgc2l6ZW9mKER3YXJmX0xvY2Rlc2MpKTsKK30KKworLyogU2hvdyBhIHByb2JlIHBvaW50IHRvIG91dHB1dCBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIHNob3dfcHJvYmVwb2ludChEd2FyZl9EaWUgc3BfZGllLCBEd2FyZl9TaWduZWQgb2ZmcywKKwkJCSAgICBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwID0gcGYtPnBwOworCWNoYXIgKm5hbWU7CisJY2hhciB0bXBbTUFYX1BST0JFX0JVRkZFUl07CisJaW50IHJldCwgaSwgbGVuOworCisJLyogT3V0cHV0IG5hbWUgb2YgcHJvYmUgcG9pbnQgKi8KKwlyZXQgPSBkd2FyZl9kaWVuYW1lKHNwX2RpZSwgJm5hbWUsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spIHsKKwkJcmV0ID0gc25wcmludGYodG1wLCBNQVhfUFJPQkVfQlVGRkVSLCAiJXMrJXUiLCBuYW1lLAorCQkJCSh1bnNpZ25lZCBpbnQpb2Zmcyk7CisJCS8qIENvcHkgdGhlIGZ1bmN0aW9uIG5hbWUgaWYgcG9zc2libGUgKi8KKwkJaWYgKCFwcC0+ZnVuY3Rpb24pIHsKKwkJCXBwLT5mdW5jdGlvbiA9IHN0cmR1cChuYW1lKTsKKwkJCXBwLT5vZmZzZXQgPSBvZmZzOworCQl9CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbmFtZSwgRFdfRExBX1NUUklORyk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBmdW5jdGlvbiBoYXMgbm8gbmFtZS4gKi8KKwkJcmV0ID0gc25wcmludGYodG1wLCBNQVhfUFJPQkVfQlVGRkVSLCAiMHglbGx4IiwgcGYtPmFkZHIpOworCQlpZiAoIXBwLT5mdW5jdGlvbikgeworCQkJLyogVE9ETzogVXNlIF9zdGV4dCAqLworCQkJcHAtPmZ1bmN0aW9uID0gc3RyZHVwKCIiKTsKKwkJCXBwLT5vZmZzZXQgPSAoaW50KXBmLT5hZGRyOworCQl9CisJfQorCURJRV9JRihyZXQgPCAwKTsKKwlESUVfSUYocmV0ID49IE1BWF9QUk9CRV9CVUZGRVIpOworCWxlbiA9IHJldDsKKwlwcl9kZWJ1ZygiUHJvYmUgcG9pbnQgZm91bmQ6ICVzXG4iLCB0bXApOworCisJLyogRmluZCBlYWNoIGFyZ3VtZW50ICovCisJZ2V0X2N1cnJlbnRfZnJhbWVfYmFzZShzcF9kaWUsIHBmKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHAtPm5yX2FyZ3M7IGkrKykgeworCQlwZi0+dmFyID0gcHAtPmFyZ3NbaV07CisJCXBmLT5idWYgPSAmdG1wW2xlbl07CisJCXBmLT5sZW4gPSBNQVhfUFJPQkVfQlVGRkVSIC0gbGVuOworCQlmaW5kX3ZhcmlhYmxlKHNwX2RpZSwgcGYpOworCQlsZW4gKz0gc3RybGVuKHBmLT5idWYpOworCX0KKwlmcmVlX2N1cnJlbnRfZnJhbWVfYmFzZShwZik7CisKKwlwcC0+cHJvYmVzW3BwLT5mb3VuZF0gPSBzdHJkdXAodG1wKTsKKwlwcC0+Zm91bmQrKzsKK30KKworc3RhdGljIGludCBwcm9iZWFkZHJfY2FsbGJhY2soc3RydWN0IGRpZV9saW5rICpkbGluaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZiA9IChzdHJ1Y3QgcHJvYmVfZmluZGVyICopZGF0YTsKKwlEd2FyZl9IYWxmIHRhZzsKKwlEd2FyZl9TaWduZWQgb2ZmczsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfdGFnKGRsaW5rLT5kaWUsICZ0YWcsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJLyogQ2hlY2sgdGhlIGFkZHJlc3MgaXMgaW4gdGhpcyBzdWJwcm9ncmFtICovCisJaWYgKHRhZyA9PSBEV19UQUdfc3VicHJvZ3JhbSAmJgorCSAgICBkaWVfd2l0aGluX3N1YnByb2dyYW0oZGxpbmstPmRpZSwgcGYtPmFkZHIsICZvZmZzKSkgeworCQlzaG93X3Byb2JlcG9pbnQoZGxpbmstPmRpZSwgb2ZmcywgcGYpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbmQgcHJvYmUgcG9pbnQgZnJvbSBpdHMgbGluZSBudW1iZXIgKi8KK3N0YXRpYyB2b2lkIGZpbmRfYnlfbGluZShzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlEd2FyZl9TaWduZWQgY250LCBpLCBjbG07CisJRHdhcmZfTGluZSAqbGluZXM7CisJRHdhcmZfVW5zaWduZWQgbGluZW5vID0gMDsKKwlEd2FyZl9BZGRyIGFkZHI7CisJRHdhcmZfVW5zaWduZWQgZm5vOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl9zcmNsaW5lcyhwZi0+Y3VfZGllLCAmbGluZXMsICZjbnQsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJcmV0ID0gZHdhcmZfbGluZV9zcmNmaWxlbm8obGluZXNbaV0sICZmbm8sICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlpZiAoZm5vICE9IHBmLT5mbm8pCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkd2FyZl9saW5lbm8obGluZXNbaV0sICZsaW5lbm8sICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlpZiAobGluZW5vICE9IHBmLT5sbm8pCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkd2FyZl9saW5lb2ZmKGxpbmVzW2ldLCAmY2xtLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCQlyZXQgPSBkd2FyZl9saW5lYWRkcihsaW5lc1tpXSwgJmFkZHIsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlwcl9kZWJ1ZygiUHJvYmUgbGluZSBmb3VuZDogbGluZVslZF06JXUsJWQgYWRkcjoweCVsbHhcbiIsCisJCQkgKGludClpLCAodW5zaWduZWQpbGluZW5vLCAoaW50KWNsbSwgYWRkcik7CisJCXBmLT5hZGRyID0gYWRkcjsKKwkJLyogU2VhcmNoIGEgcmVhbCBzdWJwcm9ncmFtIGluY2x1ZGluZyB0aGlzIGxpbmUsICovCisJCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLAorCQkJCQkgICAgICAgcHJvYmVhZGRyX2NhbGxiYWNrLCBwZik7CisJCWlmIChyZXQgPT0gMCkKKwkJCWRpZSgiUHJvYmUgcG9pbnQgaXMgbm90IGZvdW5kIGluIHN1YnByb2dyYW1zLlxuIik7CisJCS8qIENvbnRpbnVpbmcsIGJlY2F1c2UgdGFyZ2V0IGxpbmUgbWlnaHQgYmUgaW5saW5lZC4gKi8KKwl9CisJZHdhcmZfc3JjbGluZXNfZGVhbGxvYyhfX2R3X2RlYnVnLCBsaW5lcywgY250KTsKK30KKworLyogU2VhcmNoIGZ1bmN0aW9uIGZyb20gZnVuY3Rpb24gbmFtZSAqLworc3RhdGljIGludCBwcm9iZWZ1bmNfY2FsbGJhY2soc3RydWN0IGRpZV9saW5rICpkbGluaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZiA9IChzdHJ1Y3QgcHJvYmVfZmluZGVyICopZGF0YTsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwID0gcGYtPnBwOworCXN0cnVjdCBkaWVfbGluayAqbGs7CisJRHdhcmZfU2lnbmVkIG9mZnM7CisJRHdhcmZfSGFsZiB0YWc7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmICh0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0pIHsKKwkJaWYgKGRpZV9jb21wYXJlX25hbWUoZGxpbmstPmRpZSwgcHAtPmZ1bmN0aW9uKSA9PSAwKSB7CisJCQlpZiAocHAtPmxpbmUpIHsJLyogRnVuY3Rpb24gcmVsYXRpdmUgbGluZSAqLworCQkJCXBmLT5mbm8gPSBkaWVfZ2V0X2RlY2xfZmlsZShkbGluay0+ZGllKTsKKwkJCQlwZi0+bG5vID0gZGllX2dldF9kZWNsX2xpbmUoZGxpbmstPmRpZSkKKwkJCQkJICsgcHAtPmxpbmU7CisJCQkJZmluZF9ieV9saW5lKHBmKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWlmIChkaWVfaW5saW5lZF9zdWJwcm9ncmFtKGRsaW5rLT5kaWUpKSB7CisJCQkJLyogSW5saW5lZCBmdW5jdGlvbiwgc2F2ZSBpdC4gKi8KKwkJCQlyZXQgPSBkd2FyZl9kaWVfQ1Vfb2Zmc2V0KGRsaW5rLT5kaWUsCisJCQkJCQkJICAmcGYtPmlubF9vZmZzLAorCQkJCQkJCSAgJl9fZHdfZXJyb3IpOworCQkJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwkJCQlwcl9kZWJ1ZygiaW5saW5lIGRlZmluaXRpb24gb2Zmc2V0ICVsbGRcbiIsCisJCQkJCSBwZi0+aW5sX29mZnMpOworCQkJCXJldHVybiAwOwkvKiBDb250aW51ZSB0byBzZWFyY2ggKi8KKwkJCX0KKwkJCS8qIEdldCBwcm9iZSBhZGRyZXNzICovCisJCQlwZi0+YWRkciA9IGRpZV9nZXRfZW50cnlwYyhkbGluay0+ZGllKTsKKwkJCXBmLT5hZGRyICs9IHBwLT5vZmZzZXQ7CisJCQkvKiBUT0RPOiBDaGVjayB0aGUgYWRkcmVzcyBpbiB0aGlzIGZ1bmN0aW9uICovCisJCQlzaG93X3Byb2JlcG9pbnQoZGxpbmstPmRpZSwgcHAtPm9mZnNldCwgcGYpOworCQkJcmV0dXJuIDE7IC8qIEV4aXQ7IG5vIHNhbWUgc3ltYm9sIGluIHRoaXMgQ1UuICovCisJCX0KKwl9IGVsc2UgaWYgKHRhZyA9PSBEV19UQUdfaW5saW5lZF9zdWJyb3V0aW5lICYmIHBmLT5pbmxfb2ZmcykgeworCQlpZiAoZGllX2dldF9hYnN0cmFjdF9vcmlnaW4oZGxpbmstPmRpZSkgPT0gcGYtPmlubF9vZmZzKSB7CisJCQkvKiBHZXQgcHJvYmUgYWRkcmVzcyAqLworCQkJcGYtPmFkZHIgPSBkaWVfZ2V0X2VudHJ5cGMoZGxpbmstPmRpZSk7CisJCQlwZi0+YWRkciArPSBwcC0+b2Zmc2V0OworCQkJcHJfZGVidWcoImZvdW5kIGlubGluZSBhZGRyOiAweCVsbHhcbiIsIHBmLT5hZGRyKTsKKwkJCS8qIElubGluZWQgZnVuY3Rpb24uIEdldCBhIHJlYWwgc3VicHJvZ3JhbSAqLworCQkJZm9yIChsayA9IGRsaW5rLT5wYXJlbnQ7IGxrICE9IE5VTEw7IGxrID0gbGstPnBhcmVudCkgeworCQkJCXRhZyA9IDA7CisJCQkJZHdhcmZfdGFnKGxrLT5kaWUsICZ0YWcsICZfX2R3X2Vycm9yKTsKKwkJCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJCQkJaWYgKHRhZyA9PSBEV19UQUdfc3VicHJvZ3JhbSAmJgorCQkJCSAgICAhZGllX2lubGluZWRfc3VicHJvZ3JhbShsay0+ZGllKSkKKwkJCQkJZ290byBmb3VuZDsKKwkJCX0KKwkJCWRpZSgiRmFpbGVkIHRvIGZpbmQgcmVhbCBzdWJwcm9ncmFtLlxuIik7Citmb3VuZDoKKwkJCS8qIEdldCBvZmZzZXQgZnJvbSBzdWJwcm9ncmFtICovCisJCQlyZXQgPSBkaWVfd2l0aGluX3N1YnByb2dyYW0obGstPmRpZSwgcGYtPmFkZHIsICZvZmZzKTsKKwkJCURJRV9JRighcmV0KTsKKwkJCXNob3dfcHJvYmVwb2ludChsay0+ZGllLCBvZmZzLCBwZik7CisJCQkvKiBDb250aW51ZSB0byBzZWFyY2ggKi8KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmluZF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQoreworCXNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLCBwcm9iZWZ1bmNfY2FsbGJhY2ssIHBmKTsKK30KKworLyogRmluZCBhIHByb2JlIHBvaW50ICovCitpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwlEd2FyZl9IYWxmIGFkZHJfc2l6ZSA9IDA7CisJRHdhcmZfVW5zaWduZWQgbmV4dF9jdWggPSAwOworCWludCBjdV9udW1iZXIgPSAwLCByZXQ7CisJc3RydWN0IHByb2JlX2ZpbmRlciBwZiA9IHsucHAgPSBwcH07CisKKwlyZXQgPSBkd2FyZl9pbml0KGZkLCBEV19ETENfUkVBRCwgMCwgMCwgJl9fZHdfZGVidWcsICZfX2R3X2Vycm9yKTsKKwlpZiAocmV0ICE9IERXX0RMVl9PSykgeworCQlwcl93YXJuaW5nKCJObyBkd2FyZiBpbmZvIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfREVCVUdfSU5GTy5cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlwcC0+Zm91bmQgPSAwOworCXdoaWxlICgrK2N1X251bWJlcikgeworCQkvKiBTZWFyY2ggQ1UgKENvbXBpbGF0aW9uIFVuaXQpICovCisJCXJldCA9IGR3YXJmX25leHRfY3VfaGVhZGVyKF9fZHdfZGVidWcsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkmYWRkcl9zaXplLCAmbmV4dF9jdWgsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKKwkJCWJyZWFrOworCisJCS8qIEdldCB0aGUgRElFKERlYnVnZ2luZyBJbmZvcm1hdGlvbiBFbnRyeSkgb2YgdGhpcyBDVSAqLworCQlyZXQgPSBkd2FyZl9zaWJsaW5nb2YoX19kd19kZWJ1ZywgMCwgJnBmLmN1X2RpZSwgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisKKwkJLyogQ2hlY2sgaWYgdGFyZ2V0IGZpbGUgaXMgaW5jbHVkZWQuICovCisJCWlmIChwcC0+ZmlsZSkKKwkJCXBmLmZubyA9IGN1X2ZpbmRfZmlsZW5vKHBmLmN1X2RpZSwgcHAtPmZpbGUpOworCisJCWlmICghcHAtPmZpbGUgfHwgcGYuZm5vKSB7CisJCQkvKiBTYXZlIENVIGJhc2UgYWRkcmVzcyAoZm9yIGZyYW1lX2Jhc2UpICovCisJCQlyZXQgPSBkd2FyZl9sb3dwYyhwZi5jdV9kaWUsICZwZi5jdV9iYXNlLCAmX19kd19lcnJvcik7CisJCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKKwkJCQlwZi5jdV9iYXNlID0gMDsKKwkJCWlmIChwcC0+ZnVuY3Rpb24pCisJCQkJZmluZF9ieV9mdW5jKCZwZik7CisJCQllbHNlIHsKKwkJCQlwZi5sbm8gPSBwcC0+bGluZTsKKwkJCQlmaW5kX2J5X2xpbmUoJnBmKTsKKwkJCX0KKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHBmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJfQorCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJcmV0dXJuIHBwLT5mb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZWJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfUFJPQkVfRklOREVSX0gKKyNkZWZpbmUgX1BST0JFX0ZJTkRFUl9ICisKKyNkZWZpbmUgTUFYX1BBVEhfTEVOIDI1NgorI2RlZmluZSBNQVhfUFJPQkVfQlVGRkVSIDEwMjQKKyNkZWZpbmUgTUFYX1BST0JFUyAxMjgKKworc3RhdGljIGlubGluZSBpbnQgaXNfY192YXJuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogVE9ETyAqLworCXJldHVybiBpc2FscGhhKG5hbWVbMF0pIHx8IG5hbWVbMF0gPT0gJ18nOworfQorCitzdHJ1Y3QgcHJvYmVfcG9pbnQgeworCS8qIElucHV0cyAqLworCWNoYXIJKmZpbGU7CQkvKiBGaWxlIG5hbWUgKi8KKwlpbnQJbGluZTsJCS8qIExpbmUgbnVtYmVyICovCisKKwljaGFyCSpmdW5jdGlvbjsJLyogRnVuY3Rpb24gbmFtZSAqLworCWludAlvZmZzZXQ7CQkvKiBPZmZzZXQgYnl0ZXMgKi8KKworCWludAlucl9hcmdzOwkvKiBOdW1iZXIgb2YgYXJndW1lbnRzICovCisJY2hhcgkqKmFyZ3M7CQkvKiBBcmd1bWVudHMgKi8KKworCWludAlyZXRwcm9iZTsJLyogUmV0dXJuIHByb2JlICovCisKKwkvKiBPdXRwdXQgKi8KKwlpbnQJZm91bmQ7CQkvKiBOdW1iZXIgb2YgZm91bmQgcHJvYmUgcG9pbnRzICovCisJY2hhcgkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KK307CisKKyNpZm5kZWYgTk9fTElCRFdBUkYKK2V4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CisKKyNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPgorI2luY2x1ZGUgPGxpYmR3YXJmL2xpYmR3YXJmLmg+CisKK3N0cnVjdCBwcm9iZV9maW5kZXIgeworCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CS8qIFRhcmdldCBwcm9iZSBwb2ludCAqLworCisJLyogRm9yIGZ1bmN0aW9uIHNlYXJjaGluZyAqLworCUR3YXJmX0FkZHIJYWRkcjsJCS8qIEFkZHJlc3MgKi8KKwlEd2FyZl9VbnNpZ25lZAlmbm87CQkvKiBGaWxlIG51bWJlciAqLworCUR3YXJmX1Vuc2lnbmVkCWxubzsJCS8qIExpbmUgbnVtYmVyICovCisJRHdhcmZfT2ZmCWlubF9vZmZzOwkvKiBJbmxpbmUgb2Zmc2V0ICovCisJRHdhcmZfRGllCWN1X2RpZTsJCS8qIEN1cnJlbnQgQ1UgKi8KKworCS8qIEZvciB2YXJpYWJsZSBzZWFyY2hpbmcgKi8KKwlEd2FyZl9BZGRyCWN1X2Jhc2U7CS8qIEN1cnJlbnQgQ1UgYmFzZSBhZGRyZXNzICovCisJRHdhcmZfTG9jZGVzYwlmYmxvYzsJCS8qIExvY2F0aW9uIG9mIEN1cnJlbnQgRnJhbWUgQmFzZSAqLworCWNvbnN0IGNoYXIJKnZhcjsJCS8qIEN1cnJlbnQgdmFyaWFibGUgbmFtZSAqLworCWNoYXIJCSpidWY7CQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KKwlpbnQJCWxlbjsJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCit9OworI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCisKKyNlbmRpZiAvKl9QUk9CRV9GSU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKaW5kZXggNDBjOWFjZC4uYjQ5MDM1NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYworKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5jCkBAIC01LDggKzUsMTAgQEAKIGNoYXIJCSpwYXJlbnRfcGF0dGVybiA9IGRlZmF1bHRfcGFyZW50X3BhdHRlcm47CiBjaGFyCQlkZWZhdWx0X3NvcnRfb3JkZXJbXSA9ICJjb21tLGRzbyxzeW1ib2wiOwogY2hhcgkJKnNvcnRfb3JkZXIgPSBkZWZhdWx0X3NvcnRfb3JkZXI7Ci1pbnQgc29ydF9fbmVlZF9jb2xsYXBzZSA9IDA7Ci1pbnQgc29ydF9faGFzX3BhcmVudCA9IDA7CitpbnQJCXNvcnRfX25lZWRfY29sbGFwc2UgPSAwOworaW50CQlzb3J0X19oYXNfcGFyZW50ID0gMDsKKworZW51bSBzb3J0X3R5cGUJc29ydF9fZmlyc3RfZGltZW5zaW9uOwogCiB1bnNpZ25lZCBpbnQgZHNvc19fY29sX3dpZHRoOwogdW5zaWduZWQgaW50IGNvbW1zX19jb2xfd2lkdGg7CkBAIC0yNjUsNiArMjY3LDE5IEBACiAJCQlzb3J0X19oYXNfcGFyZW50ID0gMTsKIAkJfQogCisJCWlmIChsaXN0X2VtcHR5KCZoaXN0X2VudHJ5X19zb3J0X2xpc3QpKSB7CisJCQlpZiAoIXN0cmNtcChzZC0+bmFtZSwgInBpZCIpKQorCQkJCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IFNPUlRfUElEOworCQkJZWxzZSBpZiAoIXN0cmNtcChzZC0+bmFtZSwgImNvbW0iKSkKKwkJCQlzb3J0X19maXJzdF9kaW1lbnNpb24gPSBTT1JUX0NPTU07CisJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAiZHNvIikpCisJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9EU087CisJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAic3ltYm9sIikpCisJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9TWU07CisJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAicGFyZW50IikpCisJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9QQVJFTlQ7CisJCX0KKwogCQlsaXN0X2FkZF90YWlsKCZzZC0+ZW50cnktPmxpc3QsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QpOwogCQlzZC0+dGFrZW4gPSAxOwogCkBAIC0yNzMsNCArMjg4LDMgQEAKIAogCXJldHVybiAtRVNSQ0g7CiB9Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmggYi90b29scy9wZXJmL3V0aWwvc29ydC5oCmluZGV4IDEzODA2ZDcuLjMzM2U2NjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuaApAQCAtMzksNiArMzksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBkc29zX19jb2xfd2lkdGg7CiBleHRlcm4gdW5zaWduZWQgaW50IGNvbW1zX19jb2xfd2lkdGg7CiBleHRlcm4gdW5zaWduZWQgaW50IHRocmVhZHNfX2NvbF93aWR0aDsKK2V4dGVybiBlbnVtIHNvcnRfdHlwZSBzb3J0X19maXJzdF9kaW1lbnNpb247CiAKIHN0cnVjdCBoaXN0X2VudHJ5IHsKIAlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKQEAgLTUzLDYgKzU0LDE0IEBACiAJc3RydWN0IHJiX3Jvb3QJCXNvcnRlZF9jaGFpbjsKIH07CiAKK2VudW0gc29ydF90eXBlIHsKKwlTT1JUX1BJRCwKKwlTT1JUX0NPTU0sCisJU09SVF9EU08sCisJU09SVF9TWU0sCisJU09SVF9QQVJFTlQKK307CisKIC8qCiAgKiBjb25maWd1cmFibGUgc29ydGluZyBiaXRzCiAgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCAwNDc0M2QzLi4yMjcwNDM1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCkBAIC0xLDUgKzEsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogc3RhdGljIGludCBoZXgoY2hhciBjaCkKIHsKQEAgLTQzLDMgKzQ1LDg1IEBACiAKIAlyZXR1cm4gczsKIH0KKworI2RlZmluZSBLIDEwMjRMTAorLyoKKyAqIHBlcmZfYXRvbGwoKQorICogUGFyc2UgKFxkKykoYnxCfGtifEtCfG1ifE1CfGdifEdCfHRifFRCKSAoZS5nLiAiMjU2TUIiKQorICogYW5kIHJldHVybiBpdHMgbnVtZXJpYyB2YWx1ZQorICovCitzNjQgcGVyZl9hdG9sbChjb25zdCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IGk7CisJczY0IGxlbmd0aCA9IC0xLCB1bml0ID0gMTsKKworCWlmICghaXNkaWdpdChzdHJbMF0pKQorCQlnb3RvIG91dF9lcnI7CisKKwlmb3IgKGkgPSAxOyBpIDwgc3RybGVuKHN0cik7IGkrKykgeworCQlzd2l0Y2ggKHN0cltpXSkgeworCQljYXNlICdCJzoKKwkJY2FzZSAnYic6CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8ga2lsbzsKKwkJY2FzZSAnayc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOwora2lsbzoKKwkJCXVuaXQgPSBLOworCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJaWYgKHN0cltpICsgMV0gIT0gJ0InKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCWVsc2UKKwkJCQlnb3RvIG1lZ2E7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cltpICsgMV0gIT0gJ2InKQorCQkJCWdvdG8gb3V0X2VycjsKK21lZ2E6CisJCQl1bml0ID0gSyAqIEs7CisJCQlicmVhazsKKwkJY2FzZSAnRyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8gZ2lnYTsKKwkJY2FzZSAnZyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOworZ2lnYToKKwkJCXVuaXQgPSBLICogSyAqIEs7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8gdGVyYTsKKwkJY2FzZSAndCc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOwordGVyYToKKwkJCXVuaXQgPSBLICogSyAqIEsgKiBLOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwJzoJLyogb25seSBzcGVjaWZpZWQgZmlndXJlcyAqLworCQkJdW5pdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmICghaXNkaWdpdChzdHJbaV0pKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbGVuZ3RoID0gYXRvbGwoc3RyKSAqIHVuaXQ7CisJZ290byBvdXQ7CisKK291dF9lcnI6CisJbGVuZ3RoID0gLTE7CitvdXQ6CisJcmV0dXJuIGxlbmd0aDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaAppbmRleCAyYzg0YmY2Li5lNTBiMDdmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5oCkBAIC01LDYgKzUsNyBAQAogCiBpbnQgaGV4MnU2NChjb25zdCBjaGFyICpwdHIsIHU2NCAqdmFsKTsKIGNoYXIgKnN0cnhmcmNoYXIoY2hhciAqcywgY2hhciBmcm9tLCBjaGFyIHRvKTsKK3M2NCBwZXJmX2F0b2xsKGNvbnN0IGNoYXIgKnN0cik7CiAKICNkZWZpbmUgX1NUUih4KSAjeAogI2RlZmluZSBTVFIoeCkgX1NUUih4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IDg1NjY1NWQuLmIzNjM3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QucHJvY2VzczIgeyBmaWxsOnJnYigxODAsMTgwLDE4MCk7IGZpbGwtb3BhY2l0eTowLjk7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5zYW1wbGUgICB7IGZpbGw6cmdiKCAgMCwgIDAsMjU1KTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmJsb2NrZWQgIHsgZmlsbDpyZ2IoMjU1LCAgMCwgIDApOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwotCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3Qud2FpdGluZyAgeyBmaWxsOnJnYigyMTQsMjE0LCAgMCk7IGZpbGwtb3BhY2l0eTowLjM7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIyNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LldBSVRJTkcgIHsgZmlsbDpyZ2IoMjU1LDIxNCwgNDgpOyBmaWxsLW9wYWNpdHk6MC42OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuY3B1ICAgICAgeyBmaWxsOnJnYigxOTIsMTkyLDE5Mik7IGZpbGwtb3BhY2l0eTowLjI7IHN0cm9rZS13aWR0aDowLjU7IHN0cm9rZTpyZ2IoMTI4LDEyOCwxMjgpOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wc3RhdGUgICB7IGZpbGw6cmdiKDEyOCwxMjgsMTI4KTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCBmYWE4NGY1Li40ZDc1ZTc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC05LDEwICs5LDkgQEAKICNpbmNsdWRlIDxsaWJlbGYuaD4KICNpbmNsdWRlIDxnZWxmLmg+CiAjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KIAotY29uc3QgY2hhciAqc3ltX2hpc3RfZmlsdGVyOwotCiBlbnVtIGRzb19vcmlnaW4gewogCURTT19fT1JJR19LRVJORUwgPSAwLAogCURTT19fT1JJR19KQVZBX0pJVCwKQEAgLTI4LDYgKzI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19maW5kKGNvbnN0IGNoYXIgKm5hbWUpOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbyk7CiBzdGF0aWMgdm9pZCBrZXJuZWxfbWFwc19faW5zZXJ0KHN0cnVjdCBtYXAgKm1hcCk7Cit1bnNpZ25lZCBpbnQgc3ltYm9sX19wcml2X3NpemU7CiAKIHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBrZXJuZWxfbWFwczsKIApAQCAtNzcsMzkgKzc3LDMxIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXcodTY0IHN0YXJ0LCB1NjQgbGVuLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgdW5zaWduZWQgaW50IHByaXZfc2l6ZSwgaW50IHYpCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXcodTY0IHN0YXJ0LCB1NjQgbGVuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXNpemVfdCBuYW1lbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlzdHJ1Y3Qgc3ltYm9sICpzZWxmID0gY2FsbG9jKDEsIHByaXZfc2l6ZSArIHNpemVvZigqc2VsZikgKyBuYW1lbGVuKTsKLQorCXN0cnVjdCBzeW1ib2wgKnNlbGYgPSBjYWxsb2MoMSwgKHN5bWJvbF9fcHJpdl9zaXplICsKKwkJCQkJIHNpemVvZigqc2VsZikgKyBuYW1lbGVuKSk7CiAJaWYgKCFzZWxmKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICh2ID4gMikKLQkJcHJpbnRmKCJuZXcgc3ltYm9sOiAlMDE2THggWyUwOGx4XTogJXMsIGhpc3Q6ICVwXG4iLAotCQkJc3RhcnQsICh1bnNpZ25lZCBsb25nKWxlbiwgbmFtZSwgc2VsZi0+aGlzdCk7Ci0KLQlzZWxmLT5oaXN0ID0gTlVMTDsKLQlzZWxmLT5oaXN0X3N1bSA9IDA7Ci0KLQlpZiAoc3ltX2hpc3RfZmlsdGVyICYmICFzdHJjbXAobmFtZSwgc3ltX2hpc3RfZmlsdGVyKSkKLQkJc2VsZi0+aGlzdCA9IGNhbGxvYyhzaXplb2YodTY0KSwgbGVuKTsKLQotCWlmIChwcml2X3NpemUpIHsKLQkJbWVtc2V0KHNlbGYsIDAsIHByaXZfc2l6ZSk7Ci0JCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHByaXZfc2l6ZTsKKwlpZiAoc3ltYm9sX19wcml2X3NpemUpIHsKKwkJbWVtc2V0KHNlbGYsIDAsIHN5bWJvbF9fcHJpdl9zaXplKTsKKwkJc2VsZiA9ICgodm9pZCAqKXNlbGYpICsgc3ltYm9sX19wcml2X3NpemU7CiAJfQogCXNlbGYtPnN0YXJ0ID0gc3RhcnQ7CiAJc2VsZi0+ZW5kICAgPSBsZW4gPyBzdGFydCArIGxlbiAtIDEgOiBzdGFydDsKKworCXByX2RlYnVnMygiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOworCiAJbWVtY3B5KHNlbGYtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyB2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYsIHVuc2lnbmVkIGludCBwcml2X3NpemUpCitzdGF0aWMgdm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCWZyZWUoKCh2b2lkICopc2VsZikgLSBwcml2X3NpemUpOworCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfX3ByaXZfc2l6ZSk7CiB9CiAKIHN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQpAQCAtMTE4LDE5ICsxMTAsMzEgQEAKIAkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsIHNlbGYtPm5hbWUpOwogfQogCi1zdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc3ltX3ByaXZfc2l6ZSkKK3N0YXRpYyB2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQoreworCXNlbGYtPmxvbmdfbmFtZSA9IG5hbWU7CisJc2VsZi0+bG9uZ19uYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZHNvX19zZXRfYmFzZW5hbWUoc3RydWN0IGRzbyAqc2VsZikKK3sKKwlzZWxmLT5zaG9ydF9uYW1lID0gYmFzZW5hbWUoc2VsZi0+bG9uZ19uYW1lKTsKK30KKworc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZHNvICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJc3RyY3B5KHNlbGYtPm5hbWUsIG5hbWUpOwotCQlzZWxmLT5sb25nX25hbWUgPSBzZWxmLT5uYW1lOworCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc2VsZi0+bmFtZSk7CiAJCXNlbGYtPnNob3J0X25hbWUgPSBzZWxmLT5uYW1lOwogCQlzZWxmLT5zeW1zID0gUkJfUk9PVDsKLQkJc2VsZi0+c3ltX3ByaXZfc2l6ZSA9IHN5bV9wcml2X3NpemU7CiAJCXNlbGYtPmZpbmRfc3ltYm9sID0gZHNvX19maW5kX3N5bWJvbDsKIAkJc2VsZi0+c2xlbl9jYWxjdWxhdGVkID0gMDsKIAkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX05PVF9GT1VORDsKKwkJc2VsZi0+bG9hZGVkID0gMDsKKwkJc2VsZi0+aGFzX2J1aWxkX2lkID0gMDsKIAl9CiAKIAlyZXR1cm4gc2VsZjsKQEAgLTE0NSw3ICsxNDksNyBAQAogCQlwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKIAkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7CiAJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsICZzZWxmLT5zeW1zKTsKLQkJc3ltYm9sX19kZWxldGUocG9zLCBzZWxmLT5zeW1fcHJpdl9zaXplKTsKKwkJc3ltYm9sX19kZWxldGUocG9zKTsKIAl9CiB9CiAKQEAgLTE1Nyw2ICsxNjEsMTIgQEAKIAlmcmVlKHNlbGYpOwogfQogCit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKQoreworCW1lbWNweShzZWxmLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCkpOworCXNlbGYtPmhhc19idWlsZF9pZCA9IDE7Cit9CisKIHN0YXRpYyB2b2lkIGRzb19faW5zZXJ0X3N5bWJvbChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJnNlbGYtPnN5bXMucmJfbm9kZTsKQEAgLTE5OSwxMSArMjA5LDM3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK2ludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCit7CisJY2hhciAqYmlkID0gYmY7CisJdTggKnJhdyA9IHNlbGY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkJc3ByaW50ZihiaWQsICIlMDJ4IiwgKnJhdyk7CisJCSsrcmF3OworCQliaWQgKz0gMjsKKwl9CisKKwlyZXR1cm4gcmF3IC0gc2VsZjsKK30KKworc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKKwlyZXR1cm4gZnByaW50ZihmcCwgIiVzIiwgc2J1aWxkX2lkKTsKK30KKwogc2l6ZV90IGRzb19fZnByaW50ZihzdHJ1Y3QgZHNvICpzZWxmLCBGSUxFICpmcCkKIHsKLQlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgImRzbzogJXNcbiIsIHNlbGYtPnNob3J0X25hbWUpOwotCiAJc3RydWN0IHJiX25vZGUgKm5kOworCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgc2VsZi0+c2hvcnRfbmFtZSk7CisKKwlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoc2VsZiwgZnApOworCXJldCArPSBmcHJpbnRmKGZwLCAiKVxuIik7CisKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3Qgc3ltYm9sICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CiAJCXJldCArPSBzeW1ib2xfX2ZwcmludGYocG9zLCBmcCk7CkBAIC0yMTcsNyArMjUzLDcgQEAKICAqIHNvIHRoYXQgd2UgY2FuIGluIHRoZSBuZXh0IHN0ZXAgc2V0IHRoZSBzeW1ib2wgLT5lbmQgYWRkcmVzcyBhbmQgdGhlbgogICogY2FsbCBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMuCiAgKi8KLXN0YXRpYyBpbnQga2VybmVsX21hcHNfX2xvYWRfYWxsX2thbGxzeW1zKGludCB2KQorc3RhdGljIGludCBrZXJuZWxfbWFwc19fbG9hZF9hbGxfa2FsbHN5bXModm9pZCkKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTI1OSwxMiArMjk1LDE2IEBACiAJCS8qCiAJCSAqIFdpbGwgZml4IHVwIHRoZSBlbmQgbGF0ZXIsIHdoZW4gd2UgaGF2ZSBhbGwgc3ltYm9scyBzb3J0ZWQuCiAJCSAqLwotCQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwgc3ltYm9sX25hbWUsCi0JCQkJICBrZXJuZWxfbWFwLT5kc28tPnN5bV9wcml2X3NpemUsIHYpOworCQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwgc3ltYm9sX25hbWUpOwogCiAJCWlmIChzeW0gPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwogCisJCS8qCisJCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgorCQkgKiBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMsIHdoZW4gd2UgaGF2ZSBzcGxpdCB0aGUKKwkJICogbWFwcyBwZXIgbW9kdWxlCisJCSAqLwogCQlkc29fX2luc2VydF9zeW1ib2woa2VybmVsX21hcC0+ZHNvLCBzeW0pOwogCX0KIApAQCAtMzA4LDggKzM0OCw4IEBACiAJCQlpZiAoc3RyY21wKG1hcC0+ZHNvLT5uYW1lLCBtb2R1bGUpKSB7CiAJCQkJbWFwID0ga2VybmVsX21hcHNfX2ZpbmRfYnlfZHNvX25hbWUobW9kdWxlKTsKIAkJCQlpZiAoIW1hcCkgewotCQkJCQlmcHV0cygiL3Byb2Mve2thbGxzeW1zLG1vZHVsZXN9ICIKLQkJCQkJICAgICAgImluY29uc2lzdGVuY3khXG4iLCBzdGRlcnIpOworCQkJCQlwcl9lcnIoIi9wcm9jL3trYWxsc3ltcyxtb2R1bGVzfSAiCisJCQkJCSAgICAgICAiaW5jb25zaXN0ZW5jeSFcbiIpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCQkJfQpAQCAtMzI2LDggKzM2Niw3IEBACiAJCQlzbnByaW50Zihkc29fbmFtZSwgc2l6ZW9mKGRzb19uYW1lKSwgIltrZXJuZWxdLiVkIiwKIAkJCQkga2VybmVsX3JhbmdlKyspOwogCi0JCQlkc28gPSBkc29fX25ldyhkc29fbmFtZSwKLQkJCQkgICAgICAga2VybmVsX21hcC0+ZHNvLT5zeW1fcHJpdl9zaXplKTsKKwkJCWRzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKIAkJCWlmIChkc28gPT0gTlVMTCkKIAkJCQlyZXR1cm4gLTE7CiAKQEAgLTMzNyw3ICszNzYsNyBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJbWFwLT5tYXBfaXAgPSB2ZHNvX19tYXBfaXA7CisJCQltYXAtPm1hcF9pcCA9IG1hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJa2VybmVsX21hcHNfX2luc2VydChtYXApOwogCQkJKytrZXJuZWxfcmFuZ2U7CiAJCX0KQEAgLTM0NSw3ICszODQsNyBAQAogCQlpZiAoZmlsdGVyICYmIGZpbHRlcihtYXAsIHBvcykpIHsKIGRlbGV0ZV9zeW1ib2w6CiAJCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCAma2VybmVsX21hcC0+ZHNvLT5zeW1zKTsKLQkJCXN5bWJvbF9fZGVsZXRlKHBvcywga2VybmVsX21hcC0+ZHNvLT5zeW1fcHJpdl9zaXplKTsKKwkJCXN5bWJvbF9fZGVsZXRlKHBvcyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAobWFwICE9IGtlcm5lbF9tYXApIHsKIAkJCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCAma2VybmVsX21hcC0+ZHNvLT5zeW1zKTsKQEAgLTM1OSwxMCArMzk4LDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IGtlcm5lbF9tYXBzX19sb2FkX2thbGxzeW1zKHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsCi0JCQkJICAgICAgaW50IHVzZV9tb2R1bGVzLCBpbnQgdikKK3N0YXRpYyBpbnQga2VybmVsX21hcHNfX2xvYWRfa2FsbHN5bXMoc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHVzZV9tb2R1bGVzKQogewotCWlmIChrZXJuZWxfbWFwc19fbG9hZF9hbGxfa2FsbHN5bXModikpCisJaWYgKGtlcm5lbF9tYXBzX19sb2FkX2FsbF9rYWxsc3ltcygpKQogCQlyZXR1cm4gLTE7CiAKIAlkc29fX2ZpeHVwX3N5bV9lbmQoa2VybmVsX21hcC0+ZHNvKTsKQEAgLTM3MCw5ICs0MDgsOSBAQAogCXJldHVybiBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMoZmlsdGVyLCB1c2VfbW9kdWxlcyk7CiB9CiAKLXN0YXRpYyBzaXplX3Qga2VybmVsX21hcHNfX2ZwcmludGYoRklMRSAqZnAsIGludCB2KQorc3RhdGljIHNpemVfdCBrZXJuZWxfbWFwc19fZnByaW50ZihGSUxFICpmcCkKIHsKLQlzaXplX3QgcHJpbnRlZCA9IGZwcmludGYoc3RkZXJyLCAiS2VybmVsIG1hcHM6XG4iKTsKKwlzaXplX3QgcHJpbnRlZCA9IGZwcmludGYoZnAsICJLZXJuZWwgbWFwczpcbiIpOwogCXN0cnVjdCByYl9ub2RlICpuZDsKIAogCWZvciAobmQgPSByYl9maXJzdCgma2VybmVsX21hcHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewpAQCAtMzgwLDE3ICs0MTgsMTcgQEAKIAogCQlwcmludGVkICs9IGZwcmludGYoZnAsICJNYXA6Iik7CiAJCXByaW50ZWQgKz0gbWFwX19mcHJpbnRmKHBvcywgZnApOwotCQlpZiAodiA+IDEpIHsKKwkJaWYgKHZlcmJvc2UgPiAxKSB7CiAJCQlwcmludGVkICs9IGRzb19fZnByaW50Zihwb3MtPmRzbywgZnApOwogCQkJcHJpbnRlZCArPSBmcHJpbnRmKGZwLCAiLS1cbiIpOwogCQl9CiAJfQogCi0JcmV0dXJuIHByaW50ZWQgKyBmcHJpbnRmKHN0ZGVyciwgIkVORCBrZXJuZWwgbWFwc1xuIik7CisJcmV0dXJuIHByaW50ZWQgKyBmcHJpbnRmKGZwLCAiRU5EIGtlcm5lbCBtYXBzXG4iKTsKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfcGVyZl9tYXAoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCisJCQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwpAQCAtNDI3LDE0ICs0NjUsMTMgQEAKIAkJaWYgKGxlbiArIDIgPj0gbGluZV9sZW4pCiAJCQljb250aW51ZTsKIAotCQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgc2l6ZSwgbGluZSArIGxlbiwKLQkJCQkgIHNlbGYtPnN5bV9wcml2X3NpemUsIHYpOworCQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgc2l6ZSwgbGluZSArIGxlbik7CiAKIAkJaWYgKHN5bSA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7CiAKIAkJaWYgKGZpbHRlciAmJiBmaWx0ZXIobWFwLCBzeW0pKQotCQkJc3ltYm9sX19kZWxldGUoc3ltLCBzZWxmLT5zeW1fcHJpdl9zaXplKTsKKwkJCXN5bWJvbF9fZGVsZXRlKHN5bSk7CiAJCWVsc2UgewogCQkJZHNvX19pbnNlcnRfc3ltYm9sKHNlbGYsIHN5bSk7CiAJCQlucl9zeW1zKys7CkBAIC01NDIsNyArNTc5LDggQEAKICAqIEFuZCBhbHdheXMgbG9vayBhdCB0aGUgb3JpZ2luYWwgZHNvLCBub3QgYXQgZGVidWdpbmZvIHBhY2thZ2VzLCB0aGF0CiAgKiBoYXZlIHRoZSBQTFQgZGF0YSBzdHJpcHBlZCBvdXQgKHNoZHJfcmVsX3BsdC5zaF90eXBlID09IFNIVF9OT0JJVFMpLgogICovCi1zdGF0aWMgaW50IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzdHJ1Y3QgIGRzbyAqc2VsZiwgaW50IHYpCitzdGF0aWMgaW50IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzdHJ1Y3QgIGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXVpbnQzMl90IG5yX3JlbF9lbnRyaWVzLCBpZHg7CiAJR0VsZl9TeW0gc3ltOwpAQCAtNTYyLDcgKzYwMCw3IEBACiAJaWYgKGZkIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllbGYgPSBlbGZfYmVnaW4oZmQsIEVMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CiAJaWYgKGVsZiA9PSBOVUxMKQogCQlnb3RvIG91dF9jbG9zZTsKIApAQCAtNjI2LDEyICs2NjQsMTYgQEAKIAkJCQkgIiVzQHBsdCIsIGVsZl9zeW1fX25hbWUoJnN5bSwgc3ltc3RycykpOwogCiAJCQlmID0gc3ltYm9sX19uZXcocGx0X29mZnNldCwgc2hkcl9wbHQuc2hfZW50c2l6ZSwKLQkJCQkJc3ltcGx0bmFtZSwgc2VsZi0+c3ltX3ByaXZfc2l6ZSwgdik7CisJCQkJCXN5bXBsdG5hbWUpOwogCQkJaWYgKCFmKQogCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CiAKLQkJCWRzb19faW5zZXJ0X3N5bWJvbChzZWxmLCBmKTsKLQkJCSsrbnI7CisJCQlpZiAoZmlsdGVyICYmIGZpbHRlcihtYXAsIGYpKQorCQkJCXN5bWJvbF9fZGVsZXRlKGYpOworCQkJZWxzZSB7CisJCQkJZHNvX19pbnNlcnRfc3ltYm9sKHNlbGYsIGYpOworCQkJCSsrbnI7CisJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKHNoZHJfcmVsX3BsdC5zaF90eXBlID09IFNIVF9SRUwpIHsKIAkJR0VsZl9SZWwgcG9zX21lbSwgKnBvczsKQEAgLTY0NCwxMiArNjg2LDE2IEBACiAJCQkJICIlc0BwbHQiLCBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpKTsKIAogCQkJZiA9IHN5bWJvbF9fbmV3KHBsdF9vZmZzZXQsIHNoZHJfcGx0LnNoX2VudHNpemUsCi0JCQkJCXN5bXBsdG5hbWUsIHNlbGYtPnN5bV9wcml2X3NpemUsIHYpOworCQkJCQlzeW1wbHRuYW1lKTsKIAkJCWlmICghZikKIAkJCQlnb3RvIG91dF9lbGZfZW5kOwogCi0JCQlkc29fX2luc2VydF9zeW1ib2woc2VsZiwgZik7Ci0JCQkrK25yOworCQkJaWYgKGZpbHRlciAmJiBmaWx0ZXIobWFwLCBmKSkKKwkJCQlzeW1ib2xfX2RlbGV0ZShmKTsKKwkJCWVsc2UgeworCQkJCWRzb19faW5zZXJ0X3N5bWJvbChzZWxmLCBmKTsKKwkJCQkrK25yOworCQkJfQogCQl9CiAJfQogCkBAIC02NjIsMTQgKzcwOCwxNCBAQAogCWlmIChlcnIgPT0gMCkKIAkJcmV0dXJuIG5yOwogb3V0OgotCWZwcmludGYoc3RkZXJyLCAiJXM6IHByb2JsZW1zIHJlYWRpbmcgJXMgUExUIGluZm8uXG4iLAotCQlfX2Z1bmNfXywgc2VsZi0+bG9uZ19uYW1lKTsKKwlwcl93YXJuaW5nKCIlczogcHJvYmxlbXMgcmVhZGluZyAlcyBQTFQgaW5mby5cbiIsCisJCSAgIF9fZnVuY19fLCBzZWxmLT5sb25nX25hbWUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBjb25zdCBjaGFyICpuYW1lLAogCQkJIGludCBmZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGtlcm5lbCwKLQkJCSBpbnQga21vZHVsZSwgaW50IHYpCisJCQkgaW50IGttb2R1bGUpCiB7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CiAJc3RydWN0IGRzbyAqY3Vycl9kc28gPSBzZWxmOwpAQCAtNjg2LDE3ICs3MzIsMTQgQEAKIAlFbGYgKmVsZjsKIAlpbnQgbnIgPSAwOwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewotCQlpZiAodikKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKLQkJCQlfX2Z1bmNfXywgbmFtZSk7CisJCXByX2VycigiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwgX19mdW5jX18sIG5hbWUpOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKIAlpZiAoZ2VsZl9nZXRlaGRyKGVsZiwgJmVoZHIpID09IE5VTEwpIHsKLQkJaWYgKHYpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW5ub3QgZ2V0IGVsZiBoZWFkZXIuXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZWxmX2VuZDsKIAl9CiAKQEAgLTc4Miw3ICs4MjUsNyBAQAogCQkJCWlmIChrbW9kdWxlKQogCQkJCQlzdGFydCArPSBtYXAtPnN0YXJ0ICsgc2hkci5zaF9vZmZzZXQ7CiAKLQkJCQljdXJyX2RzbyA9IGRzb19fbmV3KGRzb19uYW1lLCBzZWxmLT5zeW1fcHJpdl9zaXplKTsKKwkJCQljdXJyX2RzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKIAkJCQlpZiAoY3Vycl9kc28gPT0gTlVMTCkKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKIAkJCQljdXJyX21hcCA9IG1hcF9fbmV3MihzdGFydCwgY3Vycl9kc28pOwpAQCAtNzkwLDcgKzgzMyw4IEBACiAJCQkJCWRzb19fZGVsZXRlKGN1cnJfZHNvKTsKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKIAkJCQl9Ci0JCQkJY3Vycl9tYXAtPm1hcF9pcCA9IHZkc29fX21hcF9pcDsKKwkJCQljdXJyX21hcC0+bWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKKwkJCQljdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJCWN1cnJfZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwogCQkJCWtlcm5lbF9tYXBzX19pbnNlcnQoY3Vycl9tYXApOwogCQkJCWRzb3NfX2FkZChjdXJyX2Rzbyk7CkBAIC04MDEsMTAgKzg0NSw5IEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlpZiAodiA+IDIpCi0JCQkJcHJpbnRmKCJhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJUx4IHNoX2FkZHI6ICVMeCBzaF9vZmZzZXQ6ICVMeFxuIiwKLQkJCQkJKHU2NClzeW0uc3RfdmFsdWUsICh1NjQpc2hkci5zaF9hZGRyLCAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKLQorCQkJcHJfZGVidWcyKCJhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJUx4IHNoX2FkZHI6ICIKKwkJCQkgICIlTHggc2hfb2Zmc2V0OiAlTHhcbiIsICh1NjQpc3ltLnN0X3ZhbHVlLAorCQkJCSAgKHU2NClzaGRyLnNoX2FkZHIsICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwogCQl9CiAJCS8qCkBAIC04MTYsMTQgKzg1OSwxMyBAQAogCQlpZiAoZGVtYW5nbGVkICE9IE5VTEwpCiAJCQllbGZfbmFtZSA9IGRlbWFuZ2xlZDsKIG5ld19zeW1ib2w6Ci0JCWYgPSBzeW1ib2xfX25ldyhzeW0uc3RfdmFsdWUsIHN5bS5zdF9zaXplLCBlbGZfbmFtZSwKLQkJCQljdXJyX2Rzby0+c3ltX3ByaXZfc2l6ZSwgdik7CisJCWYgPSBzeW1ib2xfX25ldyhzeW0uc3RfdmFsdWUsIHN5bS5zdF9zaXplLCBlbGZfbmFtZSk7CiAJCWZyZWUoZGVtYW5nbGVkKTsKIAkJaWYgKCFmKQogCQkJZ290byBvdXRfZWxmX2VuZDsKIAogCQlpZiAoZmlsdGVyICYmIGZpbHRlcihjdXJyX21hcCwgZikpCi0JCQlzeW1ib2xfX2RlbGV0ZShmLCBjdXJyX2Rzby0+c3ltX3ByaXZfc2l6ZSk7CisJCQlzeW1ib2xfX2RlbGV0ZShmKTsKIAkJZWxzZSB7CiAJCQlkc29fX2luc2VydF9zeW1ib2woY3Vycl9kc28sIGYpOwogCQkJbnIrKzsKQEAgLTg0Miw2MyArODg0LDEwOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNkZWZpbmUgQlVJTERfSURfU0laRSAxMjgKLQotc3RhdGljIGNoYXIgKmRzb19fcmVhZF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCBpbnQgdikKK2Jvb2wgZHNvc19fcmVhZF9idWlsZF9pZHModm9pZCkKIHsKLQlpbnQgaTsKKwlib29sIGhhdmVfYnVpbGRfaWQgPSBmYWxzZTsKKwlzdHJ1Y3QgZHNvICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmRzb3MsIG5vZGUpCisJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChwb3MtPmxvbmdfbmFtZSwgcG9zLT5idWlsZF9pZCwKKwkJCQkJICAgIHNpemVvZihwb3MtPmJ1aWxkX2lkKSkgPiAwKSB7CisJCQloYXZlX2J1aWxkX2lkCSAgPSB0cnVlOworCQkJcG9zLT5oYXNfYnVpbGRfaWQgPSB0cnVlOworCQl9CisKKwlyZXR1cm4gaGF2ZV9idWlsZF9pZDsKK30KKworaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpCit7CisJaW50IGZkLCBlcnIgPSAtMTsKIAlHRWxmX0VoZHIgZWhkcjsKIAlHRWxmX1NoZHIgc2hkcjsKIAlFbGZfRGF0YSAqYnVpbGRfaWRfZGF0YTsKIAlFbGZfU2NuICpzZWM7Ci0JY2hhciAqYnVpbGRfaWQgPSBOVUxMLCAqYmlkOwotCXVuc2lnbmVkIGNoYXIgKnJhdzsKIAlFbGYgKmVsZjsKLQlpbnQgZmQgPSBvcGVuKHNlbGYtPmxvbmdfbmFtZSwgT19SRE9OTFkpOwogCisJaWYgKHNpemUgPCBCVUlMRF9JRF9TSVpFKQorCQlnb3RvIG91dDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewotCQlpZiAodikKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKLQkJCQlfX2Z1bmNfXywgc2VsZi0+bG9uZ19uYW1lKTsKKwkJcHJfZGVidWcyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUpOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKIAlpZiAoZ2VsZl9nZXRlaGRyKGVsZiwgJmVoZHIpID09IE5VTEwpIHsKLQkJaWYgKHYpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW5ub3QgZ2V0IGVsZiBoZWFkZXIuXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZWxmX2VuZDsKIAl9CiAKLQlzZWMgPSBlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLCAiLm5vdGUuZ251LmJ1aWxkLWlkIiwgTlVMTCk7CisJc2VjID0gZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwKKwkJCQkgICIubm90ZS5nbnUuYnVpbGQtaWQiLCBOVUxMKTsKIAlpZiAoc2VjID09IE5VTEwpCiAJCWdvdG8gb3V0X2VsZl9lbmQ7CiAKIAlidWlsZF9pZF9kYXRhID0gZWxmX2dldGRhdGEoc2VjLCBOVUxMKTsKIAlpZiAoYnVpbGRfaWRfZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9lbGZfZW5kOwotCWJ1aWxkX2lkID0gbWFsbG9jKEJVSUxEX0lEX1NJWkUpOwotCWlmIChidWlsZF9pZCA9PSBOVUxMKQotCQlnb3RvIG91dF9lbGZfZW5kOwotCXJhdyA9IGJ1aWxkX2lkX2RhdGEtPmRfYnVmICsgMTY7Ci0JYmlkID0gYnVpbGRfaWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7ICsraSkgewotCQlzcHJpbnRmKGJpZCwgIiUwMngiLCAqcmF3KTsKLQkJKytyYXc7Ci0JCWJpZCArPSAyOwotCX0KLQlpZiAodiA+PSAyKQotCQlwcmludGYoIiVzKCVzKTogJXNcbiIsIF9fZnVuY19fLCBzZWxmLT5sb25nX25hbWUsIGJ1aWxkX2lkKTsKKwltZW1jcHkoYmYsIGJ1aWxkX2lkX2RhdGEtPmRfYnVmICsgMTYsIEJVSUxEX0lEX1NJWkUpOworCWVyciA9IEJVSUxEX0lEX1NJWkU7CiBvdXRfZWxmX2VuZDoKIAllbGZfZW5kKGVsZik7CiBvdXRfY2xvc2U6CiAJY2xvc2UoZmQpOwogb3V0OgotCXJldHVybiBidWlsZF9pZDsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgc3lzZnNfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJ1aWxkX2lkLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgZmQsIGVyciA9IC0xOworCisJaWYgKHNpemUgPCBCVUlMRF9JRF9TSVpFKQorCQlnb3RvIG91dDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWdvdG8gb3V0OworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBiZltCVUZTSVpdOworCQlHRWxmX05oZHIgbmhkcjsKKwkJaW50IG5hbWVzeiwgZGVzY3N6OworCisJCWlmIChyZWFkKGZkLCAmbmhkciwgc2l6ZW9mKG5oZHIpKSAhPSBzaXplb2YobmhkcikpCisJCQlicmVhazsKKworCQluYW1lc3ogPSAobmhkci5uX25hbWVzeiArIDMpICYgLTRVOworCQlkZXNjc3ogPSAobmhkci5uX2Rlc2NzeiArIDMpICYgLTRVOworCQlpZiAobmhkci5uX3R5cGUgPT0gTlRfR05VX0JVSUxEX0lEICYmCisJCSAgICBuaGRyLm5fbmFtZXN6ID09IHNpemVvZigiR05VIikpIHsKKwkJCWlmIChyZWFkKGZkLCBiZiwgbmFtZXN6KSAhPSBuYW1lc3opCisJCQkJYnJlYWs7CisJCQlpZiAobWVtY21wKGJmLCAiR05VIiwgc2l6ZW9mKCJHTlUiKSkgPT0gMCkgeworCQkJCWlmIChyZWFkKGZkLCBidWlsZF9pZCwKKwkJCQkgICAgQlVJTERfSURfU0laRSkgPT0gQlVJTERfSURfU0laRSkgeworCQkJCQllcnIgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJlYWQoZmQsIGJmLCBkZXNjc3opICE9IGRlc2NzeikKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWludCBuID0gbmFtZXN6ICsgZGVzY3N6OworCQkJaWYgKHJlYWQoZmQsIGJmLCBuKSAhPSBuKQorCQkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlKGZkKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKQpAQCAtOTE4LDIwICsxMDA1LDIzIEBACiAJcmV0dXJuIG9yaWdpbltzZWxmLT5vcmlnaW5dOwogfQogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgc2l6ZSA9IFBBVEhfTUFYOwotCWNoYXIgKm5hbWUgPSBtYWxsb2Moc2l6ZSksICpidWlsZF9pZCA9IE5VTEw7CisJY2hhciAqbmFtZSA9IG1hbGxvYyhzaXplKTsKKwl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAlpbnQgcmV0ID0gLTE7CiAJaW50IGZkOwogCisJc2VsZi0+bG9hZGVkID0gMTsKKwogCWlmICghbmFtZSkKIAkJcmV0dXJuIC0xOwogCiAJc2VsZi0+YWRqdXN0X3N5bWJvbHMgPSAwOwogCiAJaWYgKHN0cm5jbXAoc2VsZi0+bmFtZSwgIi90bXAvcGVyZi0iLCAxMCkgPT0gMCkgewotCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoc2VsZiwgbWFwLCBmaWx0ZXIsIHYpOworCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoc2VsZiwgbWFwLCBmaWx0ZXIpOwogCQlzZWxmLT5vcmlnaW4gPSByZXQgPiAwID8gRFNPX19PUklHX0pBVkFfSklUIDoKIAkJCQkJIERTT19fT1JJR19OT1RfRk9VTkQ7CiAJCXJldHVybiByZXQ7CkBAIC05NTIsMTIgKzEwNDIsMTcgQEAKIAkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIERTT19fT1JJR19CVUlMRElEOgotCQkJYnVpbGRfaWQgPSBkc29fX3JlYWRfYnVpbGRfaWQoc2VsZiwgdik7Ci0JCQlpZiAoYnVpbGRfaWQgIT0gTlVMTCkgeworCQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNlbGYtPmxvbmdfbmFtZSwgYnVpbGRfaWQsCisJCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkpIHsKKwkJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCisJCQkJCQkgIGJ1aWxkX2lkX2hleCk7CiAJCQkJc25wcmludGYobmFtZSwgc2l6ZSwKIAkJCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCi0JCQkJCWJ1aWxkX2lkLCBidWlsZF9pZCArIDIpOwotCQkJCWZyZWUoYnVpbGRfaWQpOworCQkJCQlidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQkJCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpCisJCQkJCWdvdG8gY29tcGFyZV9idWlsZF9pZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNlbGYtPm9yaWdpbisrOwpAQCAtOTcwLDEwICsxMDY1LDIwIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCisJCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChuYW1lLCBidWlsZF9pZCwKKwkJCQkJCSAgICBzaXplb2YoYnVpbGRfaWQpKSA8IDApCisJCQkJZ290byBtb3JlOworY29tcGFyZV9idWlsZF9pZDoKKwkJCWlmIChtZW1jbXAoYnVpbGRfaWQsIHNlbGYtPmJ1aWxkX2lkLAorCQkJCSAgIHNpemVvZihzZWxmLT5idWlsZF9pZCkpICE9IDApCisJCQkJZ290byBtb3JlOworCQl9CisKIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAl9IHdoaWxlIChmZCA8IDApOwogCi0JcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIG5hbWUsIGZkLCBmaWx0ZXIsIDAsIDAsIHYpOworCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBuYW1lLCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CiAKIAkvKgpAQCAtOTgzLDcgKzEwODgsNyBAQAogCQlnb3RvIG1vcmU7CiAKIAlpZiAocmV0ID4gMCkgewotCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHNlbGYsIHYpOworCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHNlbGYsIG1hcCwgZmlsdGVyKTsKIAkJaWYgKG5yX3BsdCA+IDApCiAJCQlyZXQgKz0gbnJfcGx0OwogCX0KQEAgLTEwMzEsMzQgKzExMzYsMzEgQEAKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfbW9kdWxlX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyID0gMCwgZmQgPSBvcGVuKHNlbGYtPmxvbmdfbmFtZSwgT19SRE9OTFkpOwogCisJc2VsZi0+bG9hZGVkID0gMTsKKwogCWlmIChmZCA8IDApIHsKLQkJaWYgKHYpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW5ub3Qgb3BlbiAlc1xuIiwKLQkJCQlfX2Z1bmNfXywgc2VsZi0+bG9uZ19uYW1lKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IG9wZW4gJXNcbiIsIF9fZnVuY19fLCBzZWxmLT5sb25nX25hbWUpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDAsIDEsIHYpOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDAsIDEpOwogCWNsb3NlKGZkKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZHNvc19fbG9hZF9tb2R1bGVzX3N5bV9kaXIoY2hhciAqZGlybmFtZSwKLQkJCQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKK3N0YXRpYyBpbnQgZHNvc19fbG9hZF9tb2R1bGVzX3N5bV9kaXIoY2hhciAqZGlybmFtZSwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwogCWludCBucl9zeW1ib2xzID0gMCwgZXJyOwogCURJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKIAogCWlmICghZGlyKSB7Ci0JCWlmICh2KQotCQkJZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IG9wZW4gJXMgZGlyXG4iLCBfX2Z1bmNfXywKLQkJCQlkaXJuYW1lKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IG9wZW4gJXMgZGlyXG4iLCBfX2Z1bmNfXywgZGlybmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwNzIsNyArMTE3NCw3IEBACiAKIAkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwKIAkJCQkgZGlybmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCWVyciA9IGRzb3NfX2xvYWRfbW9kdWxlc19zeW1fZGlyKHBhdGgsIGZpbHRlciwgdik7CisJCQllcnIgPSBkc29zX19sb2FkX21vZHVsZXNfc3ltX2RpcihwYXRoLCBmaWx0ZXIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVsc2UgewpAQCAtMTA4MCw2ICsxMTgyLDcgQEAKIAkJCSAgICAgZHNvX25hbWVbUEFUSF9NQVhdOwogCQkJc3RydWN0IG1hcCAqbWFwOwogCQkJc3RydWN0IHJiX25vZGUgKmxhc3Q7CisJCQljaGFyICpsb25nX25hbWU7CiAKIAkJCWlmIChkb3QgPT0gTlVMTCB8fCBzdHJjbXAoZG90LCAiLmtvIikpCiAJCQkJY29udGludWU7CkBAIC0xMDk0LDExICsxMTk3LDEzIEBACiAJCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsCiAJCQkJIGRpcm5hbWUsIGRlbnQtPmRfbmFtZSk7CiAKLQkJCW1hcC0+ZHNvLT5sb25nX25hbWUgPSBzdHJkdXAocGF0aCk7Ci0JCQlpZiAobWFwLT5kc28tPmxvbmdfbmFtZSA9PSBOVUxMKQorCQkJbG9uZ19uYW1lID0gc3RyZHVwKHBhdGgpOworCQkJaWYgKGxvbmdfbmFtZSA9PSBOVUxMKQogCQkJCWdvdG8gZmFpbHVyZTsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShtYXAtPmRzbywgbG9uZ19uYW1lKTsKKwkJCWRzb19fc2V0X2Jhc2VuYW1lKG1hcC0+ZHNvKTsKIAotCQkJZXJyID0gZHNvX19sb2FkX21vZHVsZV9zeW0obWFwLT5kc28sIG1hcCwgZmlsdGVyLCB2KTsKKwkJCWVyciA9IGRzb19fbG9hZF9tb2R1bGVfc3ltKG1hcC0+ZHNvLCBtYXAsIGZpbHRlcik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCQlsYXN0ID0gcmJfbGFzdCgmbWFwLT5kc28tPnN5bXMpOwpAQCAtMTEyNSw3ICsxMjMwLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZHNvc19fbG9hZF9tb2R1bGVzX3N5bShzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKK3N0YXRpYyBpbnQgZHNvc19fbG9hZF9tb2R1bGVzX3N5bShzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKIAljaGFyIG1vZHVsZXNfcGF0aFtQQVRIX01BWF07CkBAIC0xMTM2LDcgKzEyNDEsNyBAQAogCXNucHJpbnRmKG1vZHVsZXNfcGF0aCwgc2l6ZW9mKG1vZHVsZXNfcGF0aCksICIvbGliL21vZHVsZXMvJXMva2VybmVsIiwKIAkJIHV0cy5yZWxlYXNlKTsKIAotCXJldHVybiBkc29zX19sb2FkX21vZHVsZXNfc3ltX2Rpcihtb2R1bGVzX3BhdGgsIGZpbHRlciwgdik7CisJcmV0dXJuIGRzb3NfX2xvYWRfbW9kdWxlc19zeW1fZGlyKG1vZHVsZXNfcGF0aCwgZmlsdGVyKTsKIH0KIAogLyoKQEAgLTExNDksMjEgKzEyNTQsMTYgQEAKIAlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwogCiAJaWYgKHNlbGYgIT0gTlVMTCkgewotCQlzZWxmLT5zdGFydCA9IHN0YXJ0OwogCQkvKgotCQkgKiBXaWxsIGJlIGZpbGxlZCBhZnRlciB3ZSBsb2FkIGFsbCB0aGUgc3ltYm9scworCQkgKiAtPmVuZCB3aWxsIGJlIGZpbGxlZCBhZnRlciB3ZSBsb2FkIGFsbCB0aGUgc3ltYm9scwogCQkgKi8KLQkJc2VsZi0+ZW5kID0gMDsKLQotCQlzZWxmLT5wZ29mZiA9IDA7Ci0JCXNlbGYtPmRzbyA9IGRzbzsKLQkJc2VsZi0+bWFwX2lwID0gbWFwX19tYXBfaXA7Ci0JCVJCX0NMRUFSX05PREUoJnNlbGYtPnJiX25vZGUpOworCQltYXBfX2luaXQoc2VsZiwgc3RhcnQsIDAsIDAsIGRzbyk7CiAJfQorCiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyBpbnQgZHNvc19fbG9hZF9tb2R1bGVzKHVuc2lnbmVkIGludCBzeW1fcHJpdl9zaXplKQoraW50IGRzb3NfX2xvYWRfbW9kdWxlcyh2b2lkKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwpAQCAtMTIwMiw3ICsxMzAyLDcgQEAKIAkJKnNlcCA9ICdcMCc7CiAKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiWyVzXSIsIGxpbmUpOwotCQlkc28gPSBkc29fX25ldyhuYW1lLCBzeW1fcHJpdl9zaXplKTsKKwkJZHNvID0gZHNvX19uZXcobmFtZSk7CiAKIAkJaWYgKGRzbyA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7CkBAIC0xMjEzLDYgKzEzMTMsMTIgQEAKIAkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwogCQl9CiAKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAorCQkJICIvc3lzL21vZHVsZS8lcy9ub3Rlcy8ubm90ZS5nbnUuYnVpbGQtaWQiLCBsaW5lKTsKKwkJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKG5hbWUsIGRzby0+YnVpbGRfaWQsCisJCQkJCSBzaXplb2YoZHNvLT5idWlsZF9pZCkpID09IDApCisJCQlkc28tPmhhc19idWlsZF9pZCA9IHRydWU7CisKIAkJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS01PRFVMRTsKIAkJa2VybmVsX21hcHNfX2luc2VydChtYXApOwogCQlkc29zX19hZGQoZHNvKTsKQEAgLTEyMzAsODUgKzEzMzYsNzcgQEAKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfdm1saW51eChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsCi0JCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2KQorCQkJICAgICBjb25zdCBjaGFyICp2bWxpbnV4LCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnIsIGZkID0gb3Blbih2bWxpbnV4LCBPX1JET05MWSk7CiAKKwlzZWxmLT5sb2FkZWQgPSAxOworCiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHNlbGYtPmxvbmdfbmFtZSwgZmQsIGZpbHRlciwgMSwgMCwgdik7CisJZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHNlbGYtPmxvbmdfbmFtZSwgZmQsIGZpbHRlciwgMSwgMCk7CiAKIAljbG9zZShmZCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZHNvc19fbG9hZF9rZXJuZWwoY29uc3QgY2hhciAqdm1saW51eCwgdW5zaWduZWQgaW50IHN5bV9wcml2X3NpemUsCi0JCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2LCBpbnQgdXNlX21vZHVsZXMpCitpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHVzZV9tb2R1bGVzKQogewogCWludCBlcnIgPSAtMTsKLQlzdHJ1Y3QgZHNvICpkc28gPSBkc29fX25ldyh2bWxpbnV4LCBzeW1fcHJpdl9zaXplKTsKIAotCWlmIChkc28gPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JZHNvLT5zaG9ydF9uYW1lID0gIltrZXJuZWxdIjsKLQlrZXJuZWxfbWFwID0gbWFwX19uZXcyKDAsIGRzbyk7CisJa2VybmVsX21hcCA9IG1hcF9fbmV3MigwLCBzZWxmKTsKIAlpZiAoa2VybmVsX21hcCA9PSBOVUxMKQogCQlnb3RvIG91dF9kZWxldGVfZHNvOwogCi0Ja2VybmVsX21hcC0+bWFwX2lwID0gdmRzb19fbWFwX2lwOworCWtlcm5lbF9tYXAtPm1hcF9pcCA9IGtlcm5lbF9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAotCWlmICh1c2VfbW9kdWxlcyAmJiBkc29zX19sb2FkX21vZHVsZXMoc3ltX3ByaXZfc2l6ZSkgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgbGlzdCBvZiBtb2R1bGVzIGluIHVzZSEgIgotCQkJCSJDb250aW51aW5nLi4uXG4iKTsKKwlpZiAodXNlX21vZHVsZXMgJiYgZHNvc19fbG9hZF9tb2R1bGVzKCkgPCAwKSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBsb2FkIGxpc3Qgb2YgbW9kdWxlcyBpbiB1c2UhICIKKwkJCSAgICJDb250aW51aW5nLi4uXG4iKTsKIAkJdXNlX21vZHVsZXMgPSAwOwogCX0KIAotCWlmICh2bWxpbnV4KSB7Ci0JCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywga2VybmVsX21hcCwgdm1saW51eCwgZmlsdGVyLCB2KTsKLQkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpIHsKLQkJCWludCBzeW1zID0gZHNvc19fbG9hZF9tb2R1bGVzX3N5bShmaWx0ZXIsIHYpOworCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIGtlcm5lbF9tYXAsIHNlbGYtPm5hbWUsIGZpbHRlcik7CisJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpIHsKKwkJaW50IHN5bXMgPSBkc29zX19sb2FkX21vZHVsZXNfc3ltKGZpbHRlcik7CiAKLQkJCWlmIChzeW1zIDwgMCkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZWFkIG1vZHVsZSBzeW1ib2xzISIKLQkJCQkJIiBDb250aW51aW5nLi4uXG4iKTsKLQkJCWVsc2UKLQkJCQllcnIgKz0gc3ltczsKLQkJfQorCQlpZiAoc3ltcyA8IDApCisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVhZCBtb2R1bGUgc3ltYm9scyEiCisJCQkJICAgIiBDb250aW51aW5nLi4uXG4iKTsKKwkJZWxzZQorCQkJZXJyICs9IHN5bXM7CiAJfQogCiAJaWYgKGVyciA8PSAwKQotCQllcnIgPSBrZXJuZWxfbWFwc19fbG9hZF9rYWxsc3ltcyhmaWx0ZXIsIHVzZV9tb2R1bGVzLCB2KTsKKwkJZXJyID0ga2VybmVsX21hcHNfX2xvYWRfa2FsbHN5bXMoZmlsdGVyLCB1c2VfbW9kdWxlcyk7CiAKIAlpZiAoZXJyID4gMCkgewotCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJiX2ZpcnN0KCZkc28tPnN5bXMpOworCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJiX2ZpcnN0KCZzZWxmLT5zeW1zKTsKIAkJc3RydWN0IHN5bWJvbCAqc3ltID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CiAKIAkJa2VybmVsX21hcC0+c3RhcnQgPSBzeW0tPnN0YXJ0OwotCQlub2RlID0gcmJfbGFzdCgmZHNvLT5zeW1zKTsKKwkJbm9kZSA9IHJiX2xhc3QoJnNlbGYtPnN5bXMpOwogCQlzeW0gPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKIAkJa2VybmVsX21hcC0+ZW5kID0gc3ltLT5lbmQ7CiAKLQkJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOworCQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwogCQlrZXJuZWxfbWFwc19faW5zZXJ0KGtlcm5lbF9tYXApOwogCQkvKgogCQkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCBzb3J0ZWQgb3V0LCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgYWxsCiAJCSAqIG1hcHM6CiAJCSAqLwogCQlrZXJuZWxfbWFwc19fZml4dXBfZW5kKCk7Ci0JCWRzb3NfX2FkZChkc28pOwogCi0JCWlmICh2ID4gMCkKLQkJCWtlcm5lbF9tYXBzX19mcHJpbnRmKHN0ZGVyciwgdik7CisJCWlmICh2ZXJib3NlKQorCQkJa2VybmVsX21hcHNfX2ZwcmludGYoc3RkZXJyKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwogCiBvdXRfZGVsZXRlX2RzbzoKLQlkc29fX2RlbGV0ZShkc28pOworCWRzb19fZGVsZXRlKHNlbGYpOwogCXJldHVybiAtMTsKIH0KIApAQCAtMTMzNiwzMCArMTQzNCwxNiBAQAogc3RydWN0IGRzbyAqZHNvc19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBkc28gKmRzbyA9IGRzb3NfX2ZpbmQobmFtZSk7Ci0JaW50IG5yOwogCi0JaWYgKGRzbykKLQkJcmV0dXJuIGRzbzsKLQotCWRzbyA9IGRzb19fbmV3KG5hbWUsIDApOwotCWlmICghZHNvKQotCQlnb3RvIG91dF9kZWxldGVfZHNvOwotCi0JbnIgPSBkc29fX2xvYWQoZHNvLCBOVUxMLCBOVUxMLCB2ZXJib3NlKTsKLQlpZiAobnIgPCAwKSB7Ci0JCWVwcmludGYoIkZhaWxlZCB0byBvcGVuOiAlc1xuIiwgbmFtZSk7Ci0JCWdvdG8gb3V0X2RlbGV0ZV9kc287CisJaWYgKCFkc28pIHsKKwkJZHNvID0gZHNvX19uZXcobmFtZSk7CisJCWlmIChkc28gIT0gTlVMTCkgeworCQkJZHNvc19fYWRkKGRzbyk7CisJCQlkc29fX3NldF9iYXNlbmFtZShkc28pOworCQl9CiAJfQotCWlmICghbnIpCi0JCWVwcmludGYoIk5vIHN5bWJvbHMgZm91bmQgaW46ICVzLCBtYXliZSBpbnN0YWxsIGEgZGVidWcgcGFja2FnZT9cbiIsIG5hbWUpOwotCi0JZHNvc19fYWRkKGRzbyk7CiAKIAlyZXR1cm4gZHNvOwotCi1vdXRfZGVsZXRlX2RzbzoKLQlkc29fX2RlbGV0ZShkc28pOwotCXJldHVybiBOVUxMOwogfQogCiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApCkBAIC0xMzcwLDIxICsxNDU0LDUyIEBACiAJCWRzb19fZnByaW50Zihwb3MsIGZwKTsKIH0KIAotaW50IGxvYWRfa2VybmVsKHZvaWQpCitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwKQogewotCWlmIChkc29zX19sb2FkX2tlcm5lbCh2bWxpbnV4X25hbWUsIDAsIE5VTEwsIHZlcmJvc2UsIG1vZHVsZXMpIDw9IDApCi0JCXJldHVybiAtMTsKKwlzdHJ1Y3QgZHNvICpwb3M7CisJc2l6ZV90IHJldCA9IDA7CiAKLQl2ZHNvID0gZHNvX19uZXcoIlt2ZHNvXSIsIDApOwotCWlmICghdmRzbykKLQkJcmV0dXJuIC0xOwotCi0JZHNvc19fYWRkKHZkc28pOwotCi0JcmV0dXJuIDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKSB7CisJCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChwb3MsIGZwKTsKKwkJcmV0ICs9IGZwcmludGYoZnAsICIgJXNcbiIsIHBvcy0+bG9uZ19uYW1lKTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBzeW1ib2xfX2luaXQodm9pZCkKK3N0cnVjdCBkc28gKmRzb3NfX2xvYWRfa2VybmVsKHZvaWQpCit7CisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXcodm1saW51eF9uYW1lKTsKKworCWlmIChrZXJuZWwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlrZXJuZWwtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOworCXZkc28gPSBkc29fX25ldygiW3Zkc29dIik7CisJaWYgKCF2ZHNvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBrZXJuZWwtPmJ1aWxkX2lkLAorCQkJCSBzaXplb2Yoa2VybmVsLT5idWlsZF9pZCkpID09IDApCisJCWtlcm5lbC0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKKworCWRzb3NfX2FkZChrZXJuZWwpOworCWRzb3NfX2FkZCh2ZHNvKTsKKworCXJldHVybiBrZXJuZWw7Cit9CisKK2ludCBsb2FkX2tlcm5lbChzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb3NfX2xvYWRfa2VybmVsKCk7CisKKwlpZiAoa2VybmVsID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShrZXJuZWwsIGZpbHRlciwgbW9kdWxlcyk7Cit9CisKK3ZvaWQgc3ltYm9sX19pbml0KHVuc2lnbmVkIGludCBwcml2X3NpemUpCiB7CiAJZWxmX3ZlcnNpb24oRVZfQ1VSUkVOVCk7CisJc3ltYm9sX19wcml2X3NpemUgPSBwcml2X3NpemU7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggMmU0NTIyZS4uZjA1OTNhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19QRVJGX1NZTUJPTCAxCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KQEAgLTI2LDYgKzI3LDE2IEBACiAjZW5kaWYKICNlbmRpZgogCisvKgorICogbGliZWxmIDAuOC54IGFuZCBlYXJsaWVyIGRvIG5vdCBzdXBwb3J0IEVMRl9DX1JFQURfTU1BUDsKKyAqIGZvciBuZXdlciB2ZXJzaW9ucyB3ZSBjYW4gdXNlIG1tYXAgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZToKKyAqLworI2lmZGVmIExJQkVMRl9OT19NTUFQCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFECisjZWxzZQorIyBkZWZpbmUgUEVSRl9FTEZfQ19SRUFEX01NQVAgRUxGX0NfUkVBRF9NTUFQCisjZW5kaWYKKwogI2lmbmRlZiBETUdMX1BBUkFNUwogI2RlZmluZSBETUdMX1BBUkFNUyAgICAgICgxIDw8IDApICAgICAgIC8qIEluY2x1ZGUgZnVuY3Rpb24gYXJncyAqLwogI2RlZmluZSBETUdMX0FOU0kgICAgICAgICgxIDw8IDEpICAgICAgIC8qIEluY2x1ZGUgY29uc3QsIHZvbGF0aWxlLCBldGMgKi8KQEAgLTM1LDUyICs0Niw1OCBAQAogCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7CiAJdTY0CQlzdGFydDsKIAl1NjQJCWVuZDsKLQl1NjQJCWhpc3Rfc3VtOwotCXU2NAkJKmhpc3Q7Ci0Jdm9pZAkJKnByaXY7CiAJY2hhcgkJbmFtZVswXTsKIH07CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3ltYm9sX19wcml2X3NpemU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc3ltYm9sX19wcml2KHN0cnVjdCBzeW1ib2wgKnNlbGYpCit7CisJcmV0dXJuICgodm9pZCAqKXNlbGYpIC0gc3ltYm9sX19wcml2X3NpemU7Cit9CisKIHN0cnVjdCBkc28gewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltczsKIAlzdHJ1Y3Qgc3ltYm9sICAgICooKmZpbmRfc3ltYm9sKShzdHJ1Y3QgZHNvICosIHU2NCBpcCk7Ci0JdW5zaWduZWQgaW50CSBzeW1fcHJpdl9zaXplOwotCXVuc2lnbmVkIGNoYXIJIGFkanVzdF9zeW1ib2xzOwotCXVuc2lnbmVkIGNoYXIJIHNsZW5fY2FsY3VsYXRlZDsKKwl1OAkJIGFkanVzdF9zeW1ib2xzOjE7CisJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKKwl1OAkJIGxvYWRlZDoxOworCXU4CQkgaGFzX2J1aWxkX2lkOjE7CiAJdW5zaWduZWQgY2hhcgkgb3JpZ2luOworCXU4CQkgYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJdTE2CQkgbG9uZ19uYW1lX2xlbjsKIAljb25zdCBjaGFyCSAqc2hvcnRfbmFtZTsKIAljaGFyCSAJICpsb25nX25hbWU7CiAJY2hhcgkJIG5hbWVbMF07CiB9OwogCi1leHRlcm4gY29uc3QgY2hhciAqc3ltX2hpc3RfZmlsdGVyOwotCi10eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotCi1zdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc3ltX3ByaXZfc2l6ZSk7CitzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqc2VsZik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHNvX19zeW1fcHJpdihzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0JcmV0dXJuICgodm9pZCAqKXN5bSkgLSBzZWxmLT5zeW1fcHJpdl9zaXplOwotfQotCiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIHU2NCBpcCk7CiAKLWludCBkc29zX19sb2FkX2tlcm5lbChjb25zdCBjaGFyICp2bWxpbnV4LCB1bnNpZ25lZCBpbnQgc3ltX3ByaXZfc2l6ZSwKLQkJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UsIGludCBtb2R1bGVzKTsKLWludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLAotCSAgICAgIGludCB2ZXJib3NlKTsKK2ludCBkc29zX19sb2FkX21vZHVsZXModm9pZCk7CiBzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBtb2R1bGVzKTsKIHZvaWQgZHNvc19fZnByaW50ZihGSUxFICpmcCk7CitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwKTsKIAorc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKTsKIHNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApOwogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7Cit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKTsKIAotaW50IGxvYWRfa2VybmVsKHZvaWQpOworaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOworaW50IHN5c2ZzX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOworYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKTsKK2ludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpOwogCi12b2lkIHN5bWJvbF9faW5pdCh2b2lkKTsKK3N0cnVjdCBkc28gKmRzb3NfX2xvYWRfa2VybmVsKHZvaWQpOworaW50IGxvYWRfa2VybmVsKHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworCit2b2lkIHN5bWJvbF9faW5pdCh1bnNpZ25lZCBpbnQgcHJpdl9zaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHNvczsKIGV4dGVybiBzdHJ1Y3QgbWFwICprZXJuZWxfbWFwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IGY1M2ZhZDcuLjBmNmQ3OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTMzLDYgKzMzLDE3IEBACiAJcmV0dXJuIHNlbGYtPmNvbW0gPyAwIDogLUVOT01FTTsKIH0KIAoraW50IHRocmVhZF9fY29tbV9sZW4oc3RydWN0IHRocmVhZCAqc2VsZikKK3sKKwlpZiAoIXNlbGYtPmNvbW1fbGVuKSB7CisJCWlmICghc2VsZi0+Y29tbSkKKwkJCXJldHVybiAwOworCQlzZWxmLT5jb21tX2xlbiA9IHN0cmxlbihzZWxmLT5jb21tKTsKKwl9CisKKwlyZXR1cm4gc2VsZi0+Y29tbV9sZW47Cit9CisKIHN0YXRpYyBzaXplX3QgdGhyZWFkX19mcHJpbnRmKHN0cnVjdCB0aHJlYWQgKnNlbGYsIEZJTEUgKmZwKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKQEAgLTExNiw5ICsxMjcsOSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHZlcmJvc2UgPj0gMikgewotCQkJcHJpbnRmKCJvdmVybGFwcGluZyBtYXBzOlxuIik7Ci0JCQltYXBfX2ZwcmludGYobWFwLCBzdGRvdXQpOwotCQkJbWFwX19mcHJpbnRmKHBvcywgc3Rkb3V0KTsKKwkJCWZwdXRzKCJvdmVybGFwcGluZyBtYXBzOlxuIiwgc3RkZXJyKTsKKwkJCW1hcF9fZnByaW50ZihtYXAsIHN0ZGVycik7CisJCQltYXBfX2ZwcmludGYocG9zLCBzdGRlcnIpOwogCQl9CiAKIAkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgJnNlbGYtPm1hcHMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCmluZGV4IDFhYmVmM2IuLjUzYWRkZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKQEAgLTEyLDkgKzEyLDExIEBACiAJcGlkX3QJCQlwaWQ7CiAJY2hhcgkJCXNob3J0bmFtZVszXTsKIAljaGFyCQkJKmNvbW07CisJaW50CQkJY29tbV9sZW47CiB9OwogCiBpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKTsKK2ludCB0aHJlYWRfX2NvbW1fbGVuKHN0cnVjdCB0aHJlYWQgKnNlbGYpOwogc3RydWN0IHRocmVhZCAqdGhyZWFkc19fZmluZG5ldyhwaWRfdCBwaWQpOwogc3RydWN0IHRocmVhZCAqcmVnaXN0ZXJfaWRsZV90aHJlYWQodm9pZCk7CiB2b2lkIHRocmVhZF9faW5zZXJ0X21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCA0YjYxYjQ5Li5lYWU1NjA1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtMjg2LDE2ICsyODYsMTkgQEAKIAljaGFyICpsaW5lOwogCWNoYXIgKm5leHQgPSBOVUxMOwogCWNoYXIgKmFkZHJfc3RyOwotCWNoYXIgKmZtdDsKIAlpbnQgaTsKIAogCWxpbmUgPSBzdHJ0b2tfcihmaWxlLCAiXG4iLCAmbmV4dCk7CiAJd2hpbGUgKGxpbmUpIHsKKwkJYWRkcl9zdHIgPSBzdHJzZXAoJmxpbmUsICI6Iik7CisJCWlmICghbGluZSkgeworCQkJd2FybmluZygiZXJyb3IgcGFyc2luZyBwcmludCBzdHJpbmdzIik7CisJCQlicmVhazsKKwkJfQogCQlpdGVtID0gbWFsbG9jX29yX2RpZShzaXplb2YoKml0ZW0pKTsKLQkJYWRkcl9zdHIgPSBzdHJ0b2tfcihsaW5lLCAiOiIsICZmbXQpOwogCQlpdGVtLT5hZGRyID0gc3RydG91bGwoYWRkcl9zdHIsIE5VTEwsIDE2KTsKIAkJLyogZm10IHN0aWxsIGhhcyBhIHNwYWNlLCBza2lwIGl0ICovCi0JCWl0ZW0tPnByaW50ayA9IHN0cmR1cChmbXQrMSk7CisJCWl0ZW0tPnByaW50ayA9IHN0cmR1cChsaW5lKzEpOwogCQlpdGVtLT5uZXh0ID0gbGlzdDsKIAkJbGlzdCA9IGl0ZW07CiAJCWxpbmUgPSBzdHJ0b2tfcihOVUxMLCAiXG4iLCAmbmV4dCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5oIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAppbmRleCA5ZGUyMzI5Li5mMjIwM2EwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdXRpbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKQEAgLTEzNCw2ICsxMzQsMTUgQEAKIGV4dGVybiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiAKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oIgorCisjZGVmaW5lIERJRV9JRihjbmQpCVwKKwlkbyB7IGlmIChjbmQpCVwKKwkJZGllKCIgYXQgKCIgX19GSUxFX18gIjoiIF9fc3RyaW5naWZ5KF9fTElORV9fKSAiKTogIglcCisJCSAgICBfX3N0cmluZ2lmeShjbmQpICJcbiIpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCiBleHRlcm4gdm9pZCBzZXRfZGllX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpIE5PUkVUVVJOKTsKIAogZXh0ZXJuIGludCBwcmVmaXhjbXAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtMzA2LDYgKzMxNSw3IEBACiAjdW5kZWYgaXNhc2NpaQogI3VuZGVmIGlzc3BhY2UKICN1bmRlZiBpc2RpZ2l0CisjdW5kZWYgaXN4ZGlnaXQKICN1bmRlZiBpc2FscGhhCiAjdW5kZWYgaXNwcmludAogI3VuZGVmIGlzYWxudW0KQEAgLTMyMyw2ICszMzMsOCBAQAogI2RlZmluZSBpc2FzY2lpKHgpICgoKHgpICYgfjB4N2YpID09IDApCiAjZGVmaW5lIGlzc3BhY2UoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfU1BBQ0UpCiAjZGVmaW5lIGlzZGlnaXQoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfRElHSVQpCisjZGVmaW5lIGlzeGRpZ2l0KHgpCVwKKwkoc2FuZV9pc3Rlc3QodG91cHBlcih4KSwgR0lUX0FMUEhBIHwgR0lUX0RJR0lUKSAmJiB0b3VwcGVyKHgpIDwgJ0cnKQogI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQogI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQogI2RlZmluZSBpc3ByaW50KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1BSSU5UKQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggYjdjNzhhNC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0yNzE3LDggKzI3MTcsNiBAQAogCWludCByOwogCWludCBjcHU7CiAKLQlrdm1faW5pdF9kZWJ1ZygpOwotCiAJciA9IGt2bV9hcmNoX2luaXQob3BhcXVlKTsKIAlpZiAocikKIAkJZ290byBvdXRfZmFpbDsKQEAgLTI3ODUsNiArMjc4Myw4IEBACiAJa3ZtX3ByZWVtcHRfb3BzLnNjaGVkX2luID0ga3ZtX3NjaGVkX2luOwogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9vdXQgPSBrdm1fc2NoZWRfb3V0OwogCisJa3ZtX2luaXRfZGVidWcoKTsKKwogCXJldHVybiAwOwogCiBvdXRfZnJlZToKQEAgLTI4MDcsNyArMjgwNyw2IEBACiBvdXQ6CiAJa3ZtX2FyY2hfZXhpdCgpOwogb3V0X2ZhaWw6Ci0Ja3ZtX2V4aXRfZGVidWcoKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9pbml0KTsKQEAgLTI4MTUsNiArMjgxNCw3IEBACiB2b2lkIGt2bV9leGl0KHZvaWQpCiB7CiAJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CisJa3ZtX2V4aXRfZGVidWcoKTsKIAltaXNjX2RlcmVnaXN0ZXIoJmt2bV9kZXYpOwogCWttZW1fY2FjaGVfZGVzdHJveShrdm1fdmNwdV9jYWNoZSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJmt2bV9zeXNkZXYpOwpAQCAtMjgyNCw3ICsyODI0LDYgQEAKIAlvbl9lYWNoX2NwdShoYXJkd2FyZV9kaXNhYmxlLCBOVUxMLCAxKTsKIAlrdm1fYXJjaF9oYXJkd2FyZV91bnNldHVwKCk7CiAJa3ZtX2FyY2hfZXhpdCgpOwotCWt2bV9leGl0X2RlYnVnKCk7CiAJZnJlZV9jcHVtYXNrX3ZhcihjcHVzX2hhcmR3YXJlX2VuYWJsZWQpOwogCV9fZnJlZV9wYWdlKGJhZF9wYWdlKTsKIH0K